0% ont trouvé ce document utile (0 vote)
5 vues44 pages

Introduction à la Programmation Orientée Objet

ECAM-Python2BA-Cours3-Slides

Transféré par

iteruvaniteru
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues44 pages

Introduction à la Programmation Orientée Objet

ECAM-Python2BA-Cours3-Slides

Transféré par

iteruvaniteru
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

B201A Informatique

appliquée

Séance 3
Classe et
objet

Sébastien Combéfis, Quentin Lurkin 2017–2018


Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons
Attribution – Pas d’Utilisation Commerciale – Pas de Modification 4.0 International.
Rappels

Tuple

Séquence ordonnée non modifiable d’éléments


Emballage et déballage, affectation multiple
Définition et utilisation de tuples nommés

Objet

Création d’un objet


Accès aux attributs et appels de méthode
Introduction à la programmation orientée objet

3
Objectifs

Définition de classes

Définition, constructeur et initialisation


Variable d’instance
Définition et appel de méthode

Programmation orientée objet

Méthodes « spéciales » (égalité et représentation


d’objets) Visibilité des attributs, encapsulation
Conception orientée objet

4
Class
e
Objet et
classe
Un objet est une instance d’une classe
Une classe est un modèle à partir duquel on construit des
objets

La classe définit deux éléments constitutifs des objets


Les attributs et les fonctionnalités de l’objet
Marque : Sony-Ericsson
Modèle : S500i
Couleur : Mysterious Green
Batterie : 80%
Luminosité : 60%

Marque : Sony-Ericsson
Modèle : S500i
Couleur : Spring Yellow
Batterie : 35%
Luminosité : 90%

6
Attribut et fonctionnalité

Un attribut est une donnée stockée dans un objet


Les valeurs des attributs définissent l’état de l’objet

Une fonctionnalité permet d’effectuer une action


Obtenir une information sur l’objet ou donner un
ordre
GSM
GSM Marque
Modèle
g Couleur
GSM
envoyerSMS
Sony Ericsson recevoirAppel
w200i voirNiveauBatterie
Orange-Blanc

7
Utilisation d’un
objet
Pour pouvoir créer des objets, il faut une classe
Une définition unique permet de créer plusieurs objets

Une fois créée, interaction avec attribut et


fonctionnalité
Utilisation de l’opérateur d’accès/appel sur l’objet
1 # Construction d ’ objets
2 maxime = Perso n ( " Maxime " , " Hockey " )
3 e l i s e = Perso n ( " E l i s e " , " S pac e " )
4
5 # Ac c è s à un a t t r i b u t
6 p r i n t ( maxime . f i r s t n a m e ) # A f f i c h e ’ Hockey ’
7
8 # Appel d ’ une méthode
9 p r i n t ( maxime . h a s f r i e n d ( e l i s e ) ) # A f f i c h e ’ True ’

8
Définir une
classe

Définition d’une classe avec le mot réservé c l a s s

Corps de la classe est un bloc de code indenté


Le corps de la classe peut contenir des définitions de
méthodes

Classe minimale grâce à l’instruction pass


Aussi appelée instruction vide car ne fait rien

1 class Contact:
2 pass

9
Créer une instance

Un objet est une instance d’une classe


À partir d’une classe, on crée autant d’objets que l’on veut

1 a = Contact ()
2 b = Contact ()

Contact

a
Contact

Contact

b Contact Contact

10
Définir un constructeur

Initialisation d’un objet par la méthode spéciale init


Admet au moins un paramètre qui est s e l f

Le paramètre s e l f référence l’objet à construire


Permet d’accéder aux attributs et fonctionnalités de l’objet

1 class Contact:
2 def init ( s e l f , f i r s t n a m e , l as t name , phonenumber ) :
3 s e l f . firstname = firstname
4 s e l f . l a s t n a m e = l as t name
5 s e l f . phonenumber = phonenumber

11
Appeler un constructeur

Méthode appelée au moment de la création d’un


objet
Initialise l’objet, en donnant une valeur à ses variables
1 marchand = C o n t a c t ( " C é d r i c " , " Marchand " , 2693)
2 f l e m a l = C o n t a c t ( " Clé mence " , " F l e m a l " , 0)

Contact Contact
firstname
lastname
marchand phonenumber
Contact
Cédric
Marchand
Contact
8172
Contact
Clémence
flemal Flemal
0

12
Objet et référence

Un objet est une instance d’une classe


L’instanciation d’une classe produit un objet

Stockage d’une référence vers l’objet dans une


variable
L’adresse où l’objet se situe en mémoire
1 p r i n t ( marchand )
2 print ( flemal )

< main . Contact object a t 0 x109678748 >


< main . Contact object a t 0 x109678780 >

13
Variable d’instance

Variables d’instance attachées à un objet définissent son


état
Chaque objet possède ses propres copies de ces variables

Accès aux variables d’instance avec l’objet cible


Ou s e l f à l’intérieur du code de la classe
1 p r i n t ( marchand . f i r s t n a m e )
2 p r i n t ( f l e m a l . phonenumber )

Cé dric
0

14
Plusieurs constructeurs

Paramètre optionnel pour offrir plusieurs constructeurs

Définit une valeur par défaut pour les variables


d’instance D’abord les obligatoires, puis les optionnelles

1 class Contact:
2 def init ( s e l f , f i r s t n a m e , l as t name , phonenumber = 0 ) :
3 s e l f . firstname = firstname
4 s e l f . l a s t n a m e = l as t name
5 s e l f . phonenumber = phonenumber
6
7 marchand = C o n t a c t ( " C é d r i c " , " Marchand " , 2693)
8 f l e m a l = C o n t a c t ( " Clé mence " , " F l e m a l " )

15
Méthode

Méthode attachée à un objet réalisant une action


dessus
La méthode reçoit d’office un paramètre s e l f , l’objet cible

Appel d’une méthode sur un objet cible avec le point


1 c l a s s( . )
Contact:
2 def init ( s e l f , f irst name , lastname ) :
3 s e l f . firstname = firstname
4 s e l f . l a s t n a m e = l as t name
5 s e l f . phonenumber = 0
6
7 def setphonenumber ( s e l f , number):
8 s e l f . phonenumber = number
9
10 marchand = C o n t a c t ( " C é d r i c " , " Marchand " )
11 marchand . setphonenumber (2693 )

16
Plusieurs
méthodes
Comme pour le constructeur pour avoir plusieurs
méthodes
Utilisation de la valeur spéciale None comme valeur par défaut
1 class Contact:
2 # [...]
3 def changename ( s e l f , f i r s t n a m e = None , l a s t n a m e = None ) :
4 i f f i r s t n a m e i s not None :
5 s e l f . firstname = firstname
6 i f l a s t n a m e i s not None :
7 s e l f . l a s t n a m e = l as t name

[Link](’John’, ’Doe’)

[Link](’John’)

[Link](lastname=’Doe’)

17
Définir un vecteur dans le plan (1)

Deux variables d’instance pour représenter les coordonnées


Les deux variables s e l f . x et s e l f . y représentent (x, y )

Une méthode norm pour calculer la longueur du vecteur



La norme vaut x 2 +y2

1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. x = x
4 self. y = y
5
6 def norm ( s e l f ) :
7 r e t u r n s q r t ( s e l f . x * * 2 + s e l f . y * * 2)
8
9 u = Ve c t o r (1 , - 1)
10 p r i n t ( u . norm ( ) )

1 .4142135623730951
18
Exemple : Définir une musique

Un titre, une liste d’artistes et une durée

Méthode hasArtist teste si un artiste a composé la


musique
1 c l a s s Music:
2 def init ( self , title , artists , duration ) :
3 self. title = title
4 s e l f . artists = artists
5 s e l f . durat io n = duration
6
7 def h a s A u t h o r ( s e l f , name ) :
8 r e t u r n name in s e l f . a r t i s t s
9
10 m1 = M u s i c ( ’ Easy Come Easy Go ’ , [ ’ A l i c e on t h e r o o f ’ ] , 213)
11 p r i n t ( m1 . h a s A u t h o r ( ’ Stromae ’ ) )

Fa l s e

19
Exemple : Définir une personne

Deux éléments particuliers à relever dans la classe Person

Variables d’instance pas en paramètre du constructeur


Une méthode ne renvoie pas forcément quelque
chose

1 c l a s s Perso n :
2 def init ( s e l f , f irst name , lastname ) :
3 s e l f . firstname = firstname
4 s e l f . l a s t n a m e = l as t name
5 s e l f . friends = []
6
7 def a d d f r i e n d ( p ) :
8 s e l f . f r i e n d s . append ( p)
9
10 def h a s f r i e n d ( p ) :
11 r e t u r n p in s e l f . f r i e n d s

20
Mot réservé s e l f

La variable d’instance est accessible dans toute la classe


Existe en mémoire pendant toute la durée de vie de l’objet

Opposée à la variable locale qui n’existe que dans la


méthode
1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 pass
4
5 def norm ( s e l f ) :
6 r e t u r n s q r t ( x * * 2 + y * * 2)
7
8 u = Ve c t o r (1 , - 1)
9 p r i n t ( u . norm ( ) )

Tra c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e " program . p y " , l i n e 38 , i n <module >
p r i n t ( u . norm ( ) )
F i l e " program . p y " , l i n e 35 , i n norm
r e t u r n s q r t ( x * * 2 + y * * 2)
Name E r r o r : name ’ x ’ i s no t d e f i n e d
21
Fonction vs méthode (1)

Une méthode est une fonction associée à un objet

La méthode peut agir sur les variables d’instance de


l’objet La méthode est appelée sur un objet cible

Fonction agissant sur un tuple nommé


Tuple passé en paramètre de manière explicite

1 Ve c t o r = namedtuple ( ’ Ve c t o r ’ , [’x’, ’y’])


2
3 def norm ( v ) :
4 r e t u r n s q r t ( v . x * * 2 + v . y * * 2)
5
6 u = Ve c t o r (1 , - 1)
7 p r i n t ( norm ( u ) )

22
Fonction vs méthode (2)

Une méthode est une fonction associée à un objet


La méthode peut agir sur les variables d’instance de
l’objet La méthode est appelée sur un objet cible

Méthode agissant sur un objet cible


Objet cible passé de manière implicite

1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. x = x
4 self. y = y
5
6 def norm ( s e l f ) :
7 r e t u r n s q r t ( s e l f . x * * 2 + s e l f . y * * 2)
8
9 u = Ve c t o r (1 , - 1)
10 p r i n t ( u . norm ( ) )

23
Résumé : définition d’une
classe
Deux éléments à définir dans le corps d’une
classe

Le constructeur initialise les variables


d’instance Les méthodes interrogent ou
agissent sur l’objet

Plusieurs constructeurs et versions d’une


1
méthode
c l a s s Nom De La C l a s s e :
2 def init ( s e l f , pc1 , pc2 , . . . ) :
3 sÀe ll’aide
f . v a r ides
n s t 1paramètres
= pc1 optionnels
4 s e l f . v a r i n s t 2 = pc2
5 s e l f . a u t r e v a r i n s t = valeur
6
7 def methode ( s e l f , pm1 , pm2 , . . . ) :
8 # . . . a g i r sur l ’ o b j e t . . .

24
Résumé : utilisation d’un
objet

Création d’un objet à partir du nom de la classe

Appel implicite du constructeur ( i n i t )

Même nombre de valeurs (vci ) que de paramètres (pci )

Stockage d’une référence vers l’objet dans une variable


Utilisation de cette variable pour agir sur l’objet

1 var = Nom De La C l a s s e ( vc1 , vc2 , ...)


2
3 v a r . methode ( vm1 , vm2 , ...)

25
Programmation
orientée
Représentation d’un objet

La méthode s tr construit une représentation de


l’objet
Renvoie une chaine de caractères lisible de l’objet
1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. x = x
4 self. y = y
5
6 def str ( self):
7 return ’ ( ’ + s t r ( s e l f . x) + ’ , ’ + s tr ( s e l f . y) + ’ ) ’
8
9 u = Ve c t o r (1 , - 1)
10 p r i n t ( u)

(1 , - 1)

27
Égalité
(1)
L’opérateur d’égalité compare les références des
variables
Le contenu des objets n’est pas comparé
1 u = Ve c t o r (1 , - 1)
2 v = Ve c t o r (1 , - 1)
3 p r i n t ( u == v) # Fa l s e

Vector Vector

u v
Vector Vector
1 1
-1 -1

28
Alias
(1)
Un alias est une copie de la référence vers un
objet
Il n’y a qu’une seule copie de l’objet en mémoire
1 u = Ve c t o r (1 , - 1)
2 v = u
3 p r i n t ( u == v) # True

Vector Vector

u v
Vector
1
-1

29
Alias
(2)
Qu’affiche le code suivant après
exécution ?

magic1 appelle une méthode sur data


magic2 modifie la variable locale data
1 def magic1 ( d a t a ) :
2 d a t a . append ( " Coucou " )
3
4 def magic2 ( d a t a ) :
5 d a t a = " Coucou "
6
7 a = [0 , 1 , 2, 3]
8 prin t ( a)
9
10 magi c1 ( a)
11 prin t ( a)
12
13 magi c2 ( a)
14 prin t ( a)

30
Surcharge d’opérateur (1)

On peut redéfinir les opérateurs arithmétiques


add pour +, sub pour - , mul pour *...

1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. x = x
4 self. y = y
5
6 def add ( s e l f , o t h e r ) :
7 r e t u r n Ve c t o r ( s e l f . x + o t h e r . x , s e l f . y + o t h e r . y)
8
9 # ...
10
11 u = Ve c t o r (1 , - 1)
12 v = Ve c t o r (2 , 1)
13 p r i n t ( u + v)

(3 , 0)

31
Surcharge d’opérateur (2)

On peut redéfinir les opérateurs de


comparaison
lt pour <, le pour <=, eq pour ==...
1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. x = x
4 self. y = y
5
6 def lt ( self , other):
7 r e t u r n s e l f . x < o t h e r . x or ( s e l f . x == o t h e r . x and s e l f . y <
o t h e r . y)
8
9 # ...
10
11 u = Ve c t o r (1 , - 1)
12 v = Ve c t o r (2 , 1)
13 p r i n t ( u < v)

True

32
Définir un vecteur dans le plan (2)

Une seule variable d’instance pour les


coordonnées
Stockée dans un tuple par exemple

Choix d’implémentation complètement libres


Il n’y a pas qu’une seule solution unique
1 c l a s s Ve c t o r :
2 def init ( s e l f , x , y):
3 s e l f . c o o rds = ( x , y)
4
5 def norm ( s e l f ) :
6 r e t u r n s q r t ( s e l f . c o o rds [ 0 ] * * 2 + s e l f . c o o rds [ 1 ] * * 2)
7
8 u = Ve c t o r (1 , - 1)
9 p r i n t ( u . norm ( ) )

33
Égalité
(2)
Surcharge de l’opérateur d’égalité pour comparer les
objets
Le contenu des objets sera comparé, et non plus les
références

Comparaison des identités avec l’opérateur i s

1
Comparaison
c l a s s Ve ctor: des références des objets
2 # ...
3
4 def eq
5 ( self ,
other):
return
self.
c o o rd
s ==
other
.
c o o rd 34
s
Encapsulation (1)

Les données de l’objet sont encapsulées dans l’objet


Ne pas dévoiler les détails d’implémentation en dehors de l’objet

Pas d’accès direct aux variables d’instance


Pas recommandé d’accéder directement aux variables
d’instance
1 u = Ve c t o r (1 , - 1)
2 v = Ve c t o r (2 , 1)
3
4 s = Ve c t o r ( u . x + v . x , u . y + v . y)
5
6 # ou
7 # s = Ve c t o r ( u . c o o rds [ 0 ] + v . c o o rds [ 0 ] , u . c o o rds [ 0 ] + v . c o o rds [ 0 ] )

35
Variable
privée
Variable privée en préfixant son nom avec
Ne pourra pas être accédée en dehors de la
classe
1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. x = x
4 self. y = y
5
6 u = Ve c t o r (1 , - 1)
7 print ( u . x)

Tra c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e " program . p y " , l i n e 9 , i n <module >
print( u. x)
A t t r i b u t e E r r o r : ’ Ve c t o r ’ o b j e c t has no
attribute ’ x’

36
Accesseur

Accès à une variable privée à l’aide d’un accesseur


Méthode qui renvoie une variable d’instance

Un accesseur se définit avec la décoration @property


L’appel se fait comme si c’était une variable d’instance
publique
1 from math import s qr t
2
3 c l a s s Ve c t o r :
4 # ...
5
6 @ pr oper ty
7 def x ( s e l f ) :
8 return s e l f . x
9
10 u = Ve c t o r (1 , - 1)
11 pr int ( u . x) # 1

37
Mutateur

Modification d’une variable privée à l’aide d’un


mutateur
Méthode qui change la valeur d’une variable d’instance

Un mutateur se définit avec la décoration @[Link]


Où nom est celui de la variable à modifier
1 c l a s s Ve c t o r :
2 # ...
3
4 @[Link] er
5 def x ( s e l f , v a l u e ) :
6 self. x = va l u e
7
8 u = Ve c t o r (1 , - 1)
9 u . x = 12
10 pr int ( u . x) # 12

38
Encapsulation (2)

Accès à un objet uniquement via les méthodes publiques


Utilisateur indépendants de la représentation interne de l’objet

1 c l a s s Ve c t o r :
2 def init ( self , x , y):
3 self. c o o rd s = ( x , y)
4
5 @ pr oper ty
6 def x ( s e l f ) :
7 return s e l f . c o o rd s [ 0 ]
8
9 @[Link] er
10 def x ( s e l f , v a l u e ) :
11 self. c o o rd s = ( va l u e , self. c o o rd s [ 1 ] )
12
13 u = Ve c t o r (1 , - 1)
14 u . x = 12
15 pr int ( u . x) # 12

39
Interface

L’interface publique d’un objet expose ses


fonctionnalités
Définit ce que l’utilisateur peut faire avec l’objet

Interface publique de la classe Vector

Une variable d’instance coords privée


Un accesseur et un mutateur pour la coordonnée x
Une méthode coords publique
Vector
−coords
+x
+norm()

40
Composition
d’objets

On peut composer plusieurs objets ensemble


En utilisant des variables d’instance de type objet

1 c las s Rectangle :
2 def init ( s e l f , l o w e r l e f t , width , height , angle =0):
3 self. l owerl ef t = lowerleft
4 self. widt h = width
5 self. hei gh t = height
6 self. angl e = angle
7
8 @ pr oper ty
9 def l o w e r l e f t ( s e l f ) :
10 return s e l f . lowerleft
11
12 p = Ve c t o r (1 , - 1)
13 r = R e c t a n g l e ( p , 100 , 50)
14 print ( r . l o we r l e f t ) # (1 , - 1)

41
Réutilisation de
code
On peut réutiliser le code définit pour les objets
composés
Il suffit d’appeler les méthodes des variables objet
1 c las s Rectangle :
2 # ...
3
4 def str ( self):
5 r e t u r n " R e c t a n g l e en " + s t r ( s e l f .
l o w e r l e f t ) + " de l o n g u e u r " + s t r ( s e l f . width ) + " e t
de h a u t e u r " + s t r ( s e l f . h e i g h t ) + " i n c l i n é de " + s t r (
self. angle ) + " degré s"
6
7 r = R e c t a n g l e ( Ve c t o r (1 , - 1 ) , 100 , 50)
8 print ( r)

R e c t a n g l e en (1 , - 1) de l o n g u e u r 100 e t de h a u t e u r 50 i n c l i n é de
0 deg ré s

42
Chaine de caractères
formatée
Chaine de caractères formatée à partir de valeurs
Incrustation de valeurs définie avec des balises {}
Valeurs à incruster passées en paramètres de format

Même nombre de balises que de valeurs passées en


paramètre
Sinon, l’interpréteur Python produit une erreur d’exécution

1 c las s Rectangle :
2 # ...
3
4 def str ( self):
5 r e t u r n " R e c t a n g l e en { } de l o n g u e u r { } e t de h a u t e u r { }
i n c l i n é de { } d e g r é s " . f o r m a t ( s e l f . lowerleft , s e l f . width
, self. height , s e l f . angle )
6
7 r = R e c t a n g l e ( Ve c t o r (1 , - 1 ) , 100 , 50)
8 print ( r) 43
Crédits

[Link]
[Link]

44

Vous aimerez peut-être aussi