POO 1/3 Introduction à la Programmation Orientée Objet Pierre Parrend IUT Lumière Lyon II, 2005-2006 [email protected] Sommaire ● Les Langages de Programmation ● Premier Programme ● Les Objets ● Objets et Classes ● Ecrire une Classe ● Héritage ● Interfaces et Classes Abtraites Janvier 2008 Programmation Orientée Objet 2 Les Langages de Programmation ● 4 grandes familles – – – – Procédural ● Code Modulaire et Appels de Procédures ● Ada, C, Pascal, Perl, PHP, VB Fonctionnel ● Evaluation de fonctions mathématiques ● APL, Erlang, Haskell, ML, LISP, F#, Scheme, XSLT Logique ● Exploitation des propriétés de la Logique mathématique ● Prolog Objet ● Janvier 2008 Une application est en ensemble d'entités autonomes représentants données et fonctions Programmation Orientée Objet ● C++, C#, Java, Smalltalk 3 Les Langages de Programmation ● Vers Java Janvier 2008 Programmation Orientée Objet 4 Code Mon Premier Programme ● HelloWorld HelloWorld dans le monde Objet ● public class HelloWorld { public static void main(String[] args) { System.out.println("Bonjour Monde"); } } public class HelloWorldClass { //constructeur public HelloWorldClass(){/*initialisation*/} private void bonjourMonde() { System.out.println("Hello World"); } } Janvier 2008 public static void main(String[] args) { HelloWorldClass objetPoli =new HelloWorldClass(); objetPoli.bonjourMonde(); } Programmation Orientée Objet 5 Ce qu'est un Objet ● Définition – – Entité cohérente composée de données et de fonctions ● Avoir et Etre ● Etat et Action Représentation en mémoire d'une entité de l'application Janvier 2008 Programmation Orientée Objet 6 Code Dialogue d'Objets ● Scénario Aéroport – 3 Classes: Scenario, Avion, TourDeControle – La classe Scenario crée l'environnement: Avions, TourDeControle – La classe Scenario lance le décollage et l'atterrisage des avions – Les Avions transmettent leur statut à la TourDeContrôle Janvier 2008 Programmation Orientée Objet 7 Code Dialogue d'Objets ● Scénario Aéroport – Diagramme de Classes Janvier 2008 Programmation Orientée Objet 8 Code Dialogue d'Objets ● Scénario Aéroport – Diagramme de Séquence Scénario init() new() TourDeControle new() Avion decollage( ) decollage() atterrissage() informe() atterrissage() informe() Janvier 2008 Programmation Orientée Objet 9 Code Dialogue d'Objets package aeroport;//Package import java.util.ArrayList;//Imports de classes de l'API public class Scenario//Classe { //Données //configuration private int nbAvions=5; //stockage des données private TourDeControle bigBoss; private ArrayList avions; //Méthodes private void init() { System.out.println("Initialisation"); bigBoss=new TourDeControle(); avions=new ArrayList(); for(int i=0;i<nbAvions;i++) { avions.add(new Avion(i,bigBoss)); } } Janvier 2008 private void decollage() { System.out.println("Décollage"); Avion avionCourant; for(int i=0;i<avions.size();i++) { avionCourant=(Avion)avions.get(i); avionCourant.decollage(); } } private void atterrissage() { System.out.println("Atterrissage"); Avion avionCourant; for(int i=0;i<avions.size();i++){ avionCourant=(Avion)avions.get(i); avionCourant.atterrissage(); } } //Méthode main public static void main(String[] args) { Scenario aeroport=new Scenario(); aeroport.init(); aeroport.decollage(); aeroport.atterrissage(); } } Programmation Orientée Objet 10 Code Dialogue d'Objets package aeroport;//Package package aeroport;//Package public class Avion//Classe { //Données private int id; private TourDeControle tdc; public class TourDeControle//Classe { //Constructeur public TourDeControle() { System.out.println(">> TourDeControle créée"); } //Constructeur public Avion(int identifiant, TourDeControle tdc) { this.id=identifiant; this.tdc=tdc; System.out.println("* Avion "+id+" created *"); } //Méthodes public void decollage() { tdc.informe("Décollage en cours",this.id); } } //Méthode public void informe(String message, int idAvion) { String information="L'Avion "+idAvion+ " a transmis le message suivant: "+message+"."; System.out.println(">> "+information); } } public void atterrissage() { tdc.informe("Atterrisage en cours",this.id); } Janvier 2008 Programmation Orientée Objet 11 Objets et Classes ● ● Classe: Définition d'un Type d'Objets – Vue statique – Ce qu'on programme Objet: Instanciation d'une classe – Vue dynamique – Ce qu'on exécute Janvier 2008 Programmation Orientée Objet 12 Objets et Classes ● Cycle de Vie d'un Objet 1) Déclaration association du nom de variable avec un Type 2) Instanciation Public void maMethod() { HelloWorldClass objetPoli } = new HelloWorldClass(); Allocation d'espace mémoire à l'objet 3) Initialisation Appel au constructeur de l'Objet 4) destruction Par le Garbage Collector Janvier 2008 Programmation Orientée Objet 13 Objets et Classes ● Type et Classes – ● Les Classes définissent des Types de Données Types de Données en Java – Types basiques ● – – Boolean, short, int, long, float, double Interfaces ● API Java et définies par l'application ● Définition de types ● Ex: List, Iterable, Collection Classes Janvier 2008 ● API Java et définies par l'application ● Ex: System, Runtime, ArrayList, HelloWorldClass Programmation Orientée Objet 14 Ecrire une Classe ● Package – Première ligne du fichier package commande; ● Imports de Classes – Classes utilisées par la classe en cours import java.io.File; import java.lang.System; ● Nom de Classe – C'est le nom du fichier dans lequel la classe est enregistrée ● Janvier 2008 Panier.java public class Panier{} Programmation Orientée Objet 15 Ecrire une Classe ● Membres d'une classe – Attributs public class Panier{ private ArrayList produits; private int idClient; ... } – Methodes public class Panier{ ... public void addProduit(int idProduit, int quantite){...} public ArrayList getProduits(){...} } Janvier 2008 Programmation Orientée Objet 16 Ecrire une Classe ● Méthodes particulières – Constructeur public class Panier{ ... public Panier(int idClient){ this.idClient=idClient; } ... } – main public class HelloWorld{ public static void main(String[] args) { System.out.println(“HelloWorld”); } } Janvier 2008 Programmation Orientée Objet 17 Ecrire une Classe Visibilité ● private protected # + public protected default private Classe X X X X Package X X X Classe Fille X X Autres X public default (package protected) Janvier 2008 Programmation Orientée Objet 18 Ecrire une Classe ● Domaine de définition des variables – Variables: globales, de méthodes, locales Janvier 2008 Programmation Orientée Objet 19 Héritage ● Principe – ● Mise en commun de code entre plusieurs classes similaires Coder l'héritage package geometrie; public class Figure{...} public class Carre extends Figure {} public class Rectangle extends Figure {} public class Carre extends Figure { public Carre(...) { super(...); } } Janvier 2008 Programmation Orientée Objet 20 Héritage ● Définitions – Héritage: mécanisme d'extension de classe. Une Classe Fille qui hérite d'une classe mère a accès à l'ensemble de ses membres (hors membres privés), et peut les compléter et/ou les redéfinir. Janvier 2008 Programmation Orientée Objet 21 Héritage ● Définitions (Suite) – Généralisation: c'est le mécanisme symétrique de l'Héritage. La généralisation consiste à définir une classe mère qui contient le code commun à plusieurs classes filles. – Polymorphisme: plusieurs classes filles différentes peuvent ête manipulées de manière transparente sous forme d'une instance du type de la classe mère. C'est le polymorphisme (1 classe peuvent être définie de plusieurs manières différentes et être utilisée de la même façon) Janvier 2008 Programmation Orientée Objet 22 Héritage ● Example Janvier 2008 Programmation Orientée Objet 23 Héritage ● Example package geometrie; //classe fille public class Carre extends Figure { package geometrie; //classe mère public class Figure { public int largeur; public String nom; public String couleur; public int surface; public { } Figure(String nom, String couleur, int surface) this.nom=nom; this.couleur=couleur; this.surface=surface; public void printProprietes() { System.out.println("****"); System.out.println("nom de la figure: " +nom); System.out.println("couleur: "+couleur); } public int getSurface() { Janvier 2008 return surface; } } public Carre(String nom, String couleur, int largeur) { super(nom, couleur,largeur*largeur); this.largeur=largeur; } public void demo() { this.printProprietes(); System.out.println(“surface: ”+ this.getSurface()); } //exemple de method surchargee – redondant public int getSurface(){ return largeur*largeur; } Programmation Orientée Objet 24 } Héritage ● Example public class Test { public static void main(String[] args) { System.out.println("Test – Geometrie"); //heritage simple Carre monCarre =new Carre("roue", "rouge",25); System.out.println("Surface: " +monCarre.getSurface()); monCarre.printProprietes(); Rectangle monRectangle =new Rectangle("piscine","Vert",3,5); monRectangle.printProprietes(); //Polymorphisme Figure fig =new Carre("jacques", "bleu", 4); fig.printProprietes(); Janvier 2008 } } Programmation Orientée Objet 25 Interfaces et Classes Abstraites ● Example Janvier 2008 Programmation Orientée Objet 26 Interfaces et Classes Abstraites ● Principe ● Coder les Interfaces public interface List{ //define method signature public Object[] toArray(); } public class ArrayList implements List{ Object[] dataArray; public Object[] toArray(){ //code return this.dataArray; } } Janvier 2008 Programmation Orientée Objet 27 Interfaces et Classes Abstraites ● Coder les Classes Abstraites public abstract class AbstractList implements List{ //define constructor public AbstractList(){//code} abstract public Object get(int index); public List subList(int indexFrom, int indexTo){//code} } Janvier 2008 Programmation Orientée Objet 28 Interfaces et Classes Abstraites ● Définitions: Interfaces, Classes Abstraites ● Interface: Définition fonctionnelle d'un type de donnée. ● ● Une interface définit les membres (variables, méthodes) que devront implémenter les classes de ce type. Une classe peut implémenter plusieurs interfaces, et donc être de plusieurs types. Les interfaces peuvent, comme l'héritage, être utilisées pour le polymorphisme. Une interface ne peut pas être instanciée (= utilisée comme objet). Janvier 2008 Programmation Orientée Objet 29 Interfaces et Classes Abstraites ● ● ● Définitions: Interfaces, Classes Abstraites Classe Abstraite: Classe Mère qui définit partiellement le comportement des ses Classes Filles, en particulier par le biais de méthodes abstraites, définies mais non implémentées. Signature d'une méthode: définition du nom, type de retour, type et nombre des paramètres, visibilité d'une méthode. Janvier 2008 Programmation Orientée Objet 30 Code HelloWorld Expliqué ● ● String[] args – Tableau d'arguments – Auquels on accède par args[i] static – ● Accès sur la classe (et non sur l'objet) void – ● public class HelloWorld { public static void main(String[] args) { System.out.println("Bonjour Monde"); } } Pas de donnée retournée par la function System.out.println – Affichage sur la sortie standard du Système Janvier 2008 Programmation Orientée Objet 31 Exercice Dialogue d'Objets ● Ecrire un programme simple qui réponde au cahier des charges suivant: – Une classe 'GestionClient' ● – – Avec une méthode ajoutClient(), qui crée un client, et affiche ses propriétés Une Classe 'Client' ● Initialisé avec un nom (de type String), un identifiant (de type int) ● Une méthode 'afficher', qui affiche les propriétés du client (nom, identifiant) Une Classe Scenario ● Avec une méthode main ● Créer les clients suivants par le biais de 'GestionClient': – – Janvier 2008 Gérard, identifiant=1 Amandine, identifiant=2; Programmation Orientée Objet 32