theme 10
TRANSCRIPT
1
THEME 10
LES CLASSES2011-04-14
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 …
3
CLASSES: EXEMPLE INTRODUCTIF 1
Êtres vivants
Végétaux
Animaux Champignons
Bactéries
Caractéristiques des végétauxComportement des végétaux
Caractéristiques des animauxComportement des animaux
Caractéristiques des champignonsComportement des champignons
Caractéristiques des champignonsComportement des champignons
CLASSES: EXEMPLE INTRODUCTIF 2
4
Fichiers
Fichier texte
Fichier image Fichier son
Fichier vidéo
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
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ées dans la classe.
Dérivation: construire de nouveaux objets à partir d’objets préexistants
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.
class MonPoint:"definition d'un point geometrique"
8
ATTRIBUTS D’UNE CLASSE
Attributs(variables): propriétés des objets d’une classe
# definition de la classeclass MonPoint:
"definition d'un point geometrique " x=0 #assignation de valeur a l’attribut xy=0 #assignation de valeur a l’attribut y
…point1 = MonPoint()print point1.x, point1.y
point1.x=3.0point1.y=4.0
print point1.x, point1.y
0X
Y 0
point1
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,
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
def afficherCoordonnees(self):
print " x="self.x," y="self.y
def changerCoordonnees(self,pX,pY):
self.x= pX
self.y= pY
def getX(self):
return self.X
def getY(self):
return self.Y
INSTANCIATION: CRÉATION D’UN OBJET
11
point1• X=10• Y=15
point2• X=1• Y=12
pt3• X=2• Y=3
Point
12
INSTANCIATION: CRÉATION D’UN OBJET
point1 contient la référence (adresse en mémoire) d’un nouvel objet de type MonPoint.
point1 est une instance de la classe MonPoint.
# definition de la classe
class MonPoint: "definition d'un point geometrique " …
# fin definition de la classe
…point1 = MonPoint()
print point1
point1
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
def afficherCoordonnees(self):
print " x="self.x," y="self.y
def changerCoordonnees(self,pX,pY):
self.x= pX
self.y= pY
def getX(self):
return self.X
def getY(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 objetclass 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
class Personne:
def _init_(self):
self.prenom=" "
self.nom=" "
self.age=""
self.conjoint=Personne()
def setConjoint(self,prs):
self.conjoint=prs
def getConjoint(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
enfant1
nom
age
Prenom
Nom
Age
conjoint
pere
Prenom
Nom
Age
conjointmere
16
SIMILITUDE ET UNICITÉDeux objets (instances) d’une même classe
Même attributsMêmes méthodes
Chaque objet a des valeurs particulières pour leurs attributsclass 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.
18
EXERCICE 10.2
Écrire un script Python qui permet de représenter une liste d’individus Chaque individu a un nom, prénom, âge et fonction
Le script doit permettre d’initialiser une liste de dix individus avec des valeurs par défaut.
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
20
EXEMPLE
Personne
Étudiant
Employé
Artiste
NomPrenomAgeConjoint
NomPrenomAgeConjoint
Relevé de notesListe de coursNiveau d’études
NomPrenomAgeConjoint
MatriculeNASNuméro de posteNuméro de bureau
NomPrenomAgeConjoint
Domaine d’artListe d’oeuvres
21
SYNTAXE POUR L’HÉRITAGE
#
class Etudiant(Personne):
def _init_(self):
Personne._init_(self)
self.ReleveCotes=[]
self.ListeCours=[]
self.NiveauEtudes="Non defini"
def changerDeNiveauEtudes(niveau):
self.NiveauEtudes=niveau
class Artiste(Personne):
def _init_(self):
Personne._init_(self)
self.domaineArt= " Non defini"
self.ListeOeuvres=[]
def produireOeuvre(nouvelleOeuvre):
self.ListeOeuvres.append(nouvellesOeuvre)
class Employe(Personne):
def _init_(self):
Personne._init_(self) self.Matricule=0 self.NAS=0 self.poste=0 self.Numéro de bureau=0