2. La programmation Orientée Objet (POO) Un paradigme de programmation informatique Rendre un code source Plus facilement réutilisable Plus facile à modifier Peut être utilisée sous plusieurs langages de programmation (C++, Java, Python,…) Mots clés: Classes Objets /Instances Constructeur Héritage/Polymorphisme … 2
3. Classes: exemple introductif 1 3 Caractéristiques des végétaux Comportement des végétaux Caractéristiques des champignons Comportement des champignons Caractéristiques des animaux Comportement des animaux Caractéristiques des champignons Comportement des champignons
5. Classes: Definition Une classe est une structure particulière dans le langage objet Décrit la structure interne de données ayant comme type cette classe Définit les méthodes qui s’appliquent aux objets de la même famille Contiennent une méthode qui crée les objets de cette classe. Une classe est équivalente à un type défini par le programmeur 5
6. Avantages des classes Permettent de créer des logiciels complexes: interaction entre différents objets et avec le monde extérieur. Encapsulation: les fonctionnalités propres au comportement de l’objet sont encapsulés dans la classe. Dérivation: construire de nouveaux objets à partir d’objets préexistants 6
7. Définition d’une classe Exemple: un point est défini par ses coordonnées: Abscisse X Ordonnée Y Définition de classe N’importe ou dans un programme: en général, au début Ou dans un module à importer Une convention très répandue veut que l’on donne aux classes des noms qui commencent par une majuscule. 7 Class MonPoint: "definition d'un point geometrique"
8. Attributs d’une classe Attributs(variables): propriétés des objets d’une classe 8 # definition de la classe Class MonPoint: "definition d'un point geometrique " x=0 #assignation de valeur a l’attribut x y=0 #assignation de valeur a l’attribut y … point1 = MonPoint() print point1.x, point1.y point1.x=3.0 point1.y=4.0 print point1.x,point1.y 0 X point1 Y 0
9. Méthodes Les méthodes définissent le comportement des objets de la classe La définition d'une méthode est toujours placée à l'intérieur de la définition d'une classe Le premier paramètre utilisé par une méthode doit toujours être une référence d'instance. Self est la référence vers l’instance courante de la classe, 9
10. 10 Class MonPoint: "definition d'un point geometrique " x=0 #assignation de valeur a l’attribut x y=0 #assignation de valeur a l’attribut y defafficherCoordonnees(self): print" x="self.x," y="self.y defchangerCoordonnees(self,pX,pY): self.x= pX self.y= pY defgetX(self): return self.X defgetY(self): return self.Y
12. Instanciation: Création d’un objet 12 # definition de la classe Class MonPoint: "definition d'un point geometrique " … # fin definitionde la classe … point1 = MonPoint() print point1 point1 contient la référence (adresse en mémoire) d’un nouvel objet de type MonPoint. point1 est une instance de la classeMonPoint. point1
13. 13 Class MonPoint: "definition d'un point geometrique " x=0 #assignation de valeur a l’attribut x y=0 #assignation de valeur a l’attribut y defafficherCoordonnees(self): print" x="self.x," y="self.y defchangerCoordonnees(self,pX,pY): self.x= pX self.y= pY defgetX(self): return self.X defgetY(self): return self.Y #propgramme principal point1 = MonPoint() point1.afficherCoordonnees() point1.changerCoordonnes(5,3) point1.afficherCoordonnes()
14. Méthode spéciale: le constructeur Exécutée automatiquement lors de l’instanciation des objets Sert a initialiser les attributs d’un objet 14 Class MonPoint: "definition d'un point geometrique " def _init_(self): self.x=10 self.y=10 … point1 = MonPoint() point1.afficherCoordonnees()
15. Typage des attributs Les types prédéfinis dans Python: booléen, entier, réel, String, liste, tuple, dictionnaire,… Classes prdéfinies dans Pyhton ou définies par l’utilsateur 15 class Personne: def_init_(self): self.prenom=" " self.nom=" " self.age="" self.conjoint=Personne() defsetConjoint(self,prs): self.conjoint=prs defgetConjoint(self): return self.conjoint.nom class Enfant: def_init_(self): self.prenom=" " self.nom=" " self.age="" self.pere=Personne() self.mere=Personne() enfant1=Enfant() prenom nom enfant1 age Prenom Nom Age conjoint Prenom Nom Age conjoint pere mere
16. Similitude et unicité Deux objets (instances) d’une même classe Même attributs Mêmes méthodes Chaque objet a des valeurs particulières pour leurs attributs 16 Class MonPoint: "definition d'un point geometrique " def _init_(self): self.x=10 self.y=10 … point1 = MonPoint() point1.x=15 point1.y=18 point1.afficherCoordonnees() point2 = MonPoint() point2.x=5 point2.y=3 point2.afficherCoordonnees()
17. Exercice 10.1 Définissez une classe Cercle(). Les objets construits à partir de cette classe seront des cercles de tailles variées. En plus de la méthode constructeur, vous définirez une méthode surface(), qui devra renvoyer la surface du cercle. 17
18. Exercice 10.2 Ecrire un script Python qui permet de représenter une liste d’individus Chaque individu a un nom, prenom, age et fonctions Le script doit permettre d’initialiser une liste de dix individus avec des valeurs par défaut. 18
19. Héritage entre les classes Dériver à partir d’une classe mère, des classes filles Les classes filles héritent des propriétés de la classe mère Attributs Méthodes Les classes filles ont des propriétés spécifiques 19
20. Exemple 20 Nom Prenom Age Conjoint Nom Prenom Age Conjoint Relevé de notes Liste de cours Niveau d’études Nom Prenom Age Conjoint Domaine d’art Liste d’oeuvres Nom Prenom Age Conjoint Matricule NAS Numéro de poste Numéro de bureau
21. Syntaxe pour l’héritage 21 # class Etudiant(Personne): def_init_(self): Personne._init_(self) self.ReleveCotes=[] self.ListeCours=[] self.NiveauEtudes="Non defini" defchangerDeNiveauEtudes(niveau): self.NiveauEtudes=niveau class Employe(Personne): def_init_(self): Personne._init_(self) self.Matricule=0 self.NAS=0 self.poste=0 self.Numéro de bureau=0 class Artiste(Personne): def_init_(self): Personne._init_(self) self.domaineArt= " Non defini" self.ListeOeuvres=[] defproduireOeuvre(nouvelleOeuvre): self.ListeOeuvres.append(nouvellesOeuvre)