Informatique S4-POO Programmation Orient ee Objetbuche/data/POO_2014/pooSlide.pdf · C edric Buche...
Transcript of Informatique S4-POO Programmation Orient ee Objetbuche/data/POO_2014/pooSlide.pdf · C edric Buche...
Informatique S4-POO
Programmation Orientee Objet— Concepts —
Cedric Buche
Ecole Nationale d’Ingenieurs de Brest (ENIB)
28 janvier 2014
Cedric Buche (ENIB) POO 28 janvier 2014 1 / 137
Avant-propos Objectifs
Objectifs thematiques de POO
Que va m’apprendre POO ?
Le modele objet :
ObjetClasseEncapsulationCollaborationHeritage(Abstraction)(Modularite)(Persistance)
Modeliser objetLa partie statique du langage UML :
Diag. de cas d’utilisationDiag. de classesModele d’interaction (Diag. sequence + communication)
Cedric Buche (ENIB) POO 28 janvier 2014 2 / 137
Avant-propos Objectifs
Et la suite ... ?Cycle Ingenieur ENIB - Tronc commun
Semestre Theme Volume
S5 Prog. par objets (Java) 45hS6 Prog. par objets (C++) 45hS6 Modeles pour l’ingenierie des systemes (UML) 45hS6 Base de donnees 22h
S7 Reseaux 90h
S8 Stage en entreprise 45hS10 Stage en entreprise 45h
Cedric Buche (ENIB) POO 28 janvier 2014 3 / 137
Avant-propos Organisation
Equipe pedagogique 2013
Enseignants-chercheurs
Bosser Anne-Gwen Cours + Labo [email protected]
Desmeulles Gireg Cours + Labo [email protected]
Cedric Buche (ENIB) POO 28 janvier 2014 4 / 137
Avant-propos Organisation
Planning
Module : Programmation Orientee Objet — POO 2013
Responsable : Cedric Buche (CERV, bureau 30, tel : 02 98 05 89 66, email : [email protected]) S4
Intervenants : C. Buche (cb)
Semaine LABO CTD
37 POO — Justification modele objetctd cb
37 POO — Concepts fondateursctd cb
38 POO — Rappels pythonlabo cb
38 POO — Concepts fondateurslabo cb
39 POO — Encapsulationctd cb
39 POO — Collaboration et hierarchiectd cb
40 POO — Encapsulationlabo cb
40 POO — Collaboration et heritagelabo cb
41 UML — Generalitesctd cb
41 UML — Classesctd cb
42 UML — Classeslabo cb
42 UML — Classeslabo cb
43 UML — Classesctd cb
43 UML — Classesctd cb
44 VacancesToussaint
Semaine LABO CTD
45 UML — Classeslabo cb
45 UML — Classeslabo cb
46 UML — Use Case (diag.)ctd cb
46 UML — Use Case (scenarios)ctd cb
47 UML — Use Case (diag.)labo cb
47 UML — Use Case (scenarios)labo cb
48 UML — Interactions (com)ctd cb
48 UML — Interactions (seq)ctd cb
49 UML — Interactions (com)labo cb
49 UML — Interactions (seq)labo cb
50
50
51
51
Cedric Buche (ENIB) POO 28 janvier 2014 5 / 137
Avant-propos Evaluation
Types de controle
Controle d’attention
Controle de l’attention sur un cours particulier - QCM
Duree 5-10’
En fin de cours
Controle des connaissances
Controle des connaissances acquis sur un theme - QCM
Duree 5-10’
En debut de labo
Controle d’attention + Controle des connaissances→ Note de travail
Cedric Buche (ENIB) POO 28 janvier 2014 6 / 137
Avant-propos Evaluation
Types de controle
Controle d’attention
Controle de l’attention sur un cours particulier - QCM
Duree 5-10’
En fin de cours
Controle des connaissances
Controle des connaissances acquis sur un theme - QCM
Duree 5-10’
En debut de labo
Controle d’attention + Controle des connaissances→ Note de travail
Cedric Buche (ENIB) POO 28 janvier 2014 6 / 137
Avant-propos Evaluation
Types de controle
Controle d’attention
Controle de l’attention sur un cours particulier - QCM
Duree 5-10’
En fin de cours
Controle des connaissances
Controle des connaissances acquis sur un theme - QCM
Duree 5-10’
En debut de labo
Controle d’attention + Controle des connaissances→ Note de travail
Cedric Buche (ENIB) POO 28 janvier 2014 6 / 137
Avant-propos Evaluation
Exemple de QCM
Informatique Contrôle ContinuNom/Prenom : Groupe :
1. QCM titre 4(a) réponse fausse 4.2(b) réponse fausse 4.1(c) réponse fausse 4.5(d) réponse juste 4(e) réponse fausse 4.3(f) réponse fausse 4.4
2. QCM titre 1(a) réponse juste 1(b) réponse fausse 1.2(c) réponse fausse 1.3(d) réponse fausse 1.1
3. QCM titre 2(a) réponse juste 2(b) réponse fausse 2.1(c) réponse fausse 2.2
4. QCM titre 3(a) réponse juste 3(b) réponse fausse 3.1(c) réponse fausse 3.2
1
Cedric Buche (ENIB) POO 28 janvier 2014 7 / 137
Avant-propos Evaluation
Notation QCM
Note : distance au but
0 : dans le mille ! → objectif atteint1 : pas mal → objectif en vue2 : tout juste sur la cible → objectif loingtain3 : meme pas touche → objectif pas atteint
Cedric Buche (ENIB) POO 28 janvier 2014 8 / 137
Avant-propos Evaluation
Notation QCM
Note : distance au but
0 : dans le mille ! → objectif atteint1 : pas mal → objectif en vue2 : tout juste sur la cible → objectif loingtain3 : meme pas touche → objectif pas atteint
Cedric Buche (ENIB) POO 28 janvier 2014 8 / 137
Avant-propos Evaluation
DS
Controle de synthese
Controle des competences acquises sur un demi-semestre
Duree 1h20
Concepts objetUML
Cedric Buche (ENIB) POO 28 janvier 2014 9 / 137
Avant-propos Evaluation
Evaluation des apprentissages
Et si je suis absent ?
a un ”Controle d’attention”
→ Je justifie mon abscence (certificat medical)
a un ”Controle des connaissances”
→ Je justifie mon abscence (certificat medical)
a un ”Controle de synthese”
→ Je justifie mon abscence (certificat medical)Rattrapage
Cedric Buche (ENIB) POO 28 janvier 2014 10 / 137
Justification du modele objet (1 UC)
Plan de la presentation
1 Justification du modele objet (1 UC)
2 Concepts fondateurs (1 UC)
3 Encapsulation (1 UC)
4 Hierarchie (1 UC)
5 Collaborations entre objets (1 UC)
6 Pour aller plus loin
Cedric Buche (ENIB) POO 28 janvier 2014 11 / 137
Justification du modele objet (1 UC)
1 Justification du modele objet (1 UC)
2 Concepts fondateurs (1 UC)
3 Encapsulation (1 UC)
4 Hierarchie (1 UC)
5 Collaborations entre objets (1 UC)
6 Pour aller plus loin
Cedric Buche (ENIB) POO 28 janvier 2014 12 / 137
Justification du modele objet (1 UC)
Cours 1 / Labo 2
Objectifs
Justifier le modele objet
Notion de classe :
definitionconstructeur
Notion d’objet :
instanciationmanipulation
Cedric Buche (ENIB) POO 28 janvier 2014 13 / 137
Justification du modele objet (1 UC) Complexite
Complexite des problemes
� La complexite des logiciels est une caracteristique innee etnon propriete accidentelle � [Brooks, 1987]
Cedric Buche (ENIB) POO 28 janvier 2014 14 / 137
Justification du modele objet (1 UC) Complexite
Difficulte du controle du processus de developpement
La tache de l’equipe de developpement de logiciel est de donner
l’illusion de la simplicite [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 15 / 137
Justification du modele objet (1 UC) Complexite
Consequences d’une complexite sans limites
� Plus un systeme est complexe, plus il est susceptibled’effondrement � [Peter, 1986]
Est ce qu’un entrepreneur songe a ajouter une nouvelle assise a un
immeuble de 100 etages existant ? Ce genre de considerations est
pourtant demande par certains utilisateurs de logiciels
Cedric Buche (ENIB) POO 28 janvier 2014 16 / 137
Justification du modele objet (1 UC) Complexite
Qualite du logiciel
Extensibilite :
faculte d’adaptation d’un logiciel aux changements de specification.
simplicite de la conception
decentralisation
Reutilisabilite :
aptitude d’un logiciel a etre reutilise en tout ou en partie pour denouvelles applications.
Ne pas reinventer la roue !
Programmer moins pour programmer mieux !
Cedric Buche (ENIB) POO 28 janvier 2014 17 / 137
Justification du modele objet (1 UC) Complexite
Qualite du logiciel
Extensibilite :
faculte d’adaptation d’un logiciel aux changements de specification.
simplicite de la conception
decentralisation
Reutilisabilite :
aptitude d’un logiciel a etre reutilise en tout ou en partie pour denouvelles applications.
Ne pas reinventer la roue !
Programmer moins pour programmer mieux !
Cedric Buche (ENIB) POO 28 janvier 2014 17 / 137
Justification du modele objet (1 UC) Complexite
Qualite du logiciel
Extensibilite :
faculte d’adaptation d’un logiciel aux changements de specification.
simplicite de la conception
decentralisation
Reutilisabilite :
aptitude d’un logiciel a etre reutilise en tout ou en partie pour denouvelles applications.
Ne pas reinventer la roue !
Programmer moins pour programmer mieux !
Cedric Buche (ENIB) POO 28 janvier 2014 17 / 137
Justification du modele objet (1 UC) Programmation procedurale
Paradigme de programmation procedurale
Programmation procedurale
separation entre code et donnees.
Variables (globales)
contiennent vos donnees
sont utilisees par des fonctions/procedures.
Fonctions
peuvent modifier une variable
peuvent passer cette variable a une autre fonction/procedure.
Cedric Buche (ENIB) POO 28 janvier 2014 18 / 137
Justification du modele objet (1 UC) Programmation procedurale
Paradigme de programmation procedurale
Programmation procedurale
separation entre code et donnees.
Variables (globales)
contiennent vos donnees
sont utilisees par des fonctions/procedures.
Fonctions
peuvent modifier une variable
peuvent passer cette variable a une autre fonction/procedure.
Cedric Buche (ENIB) POO 28 janvier 2014 18 / 137
Justification du modele objet (1 UC) Programmation procedurale
Paradigme de programmation procedurale
Programmation procedurale
separation entre code et donnees.
Variables (globales)
contiennent vos donnees
sont utilisees par des fonctions/procedures.
Fonctions
peuvent modifier une variable
peuvent passer cette variable a une autre fonction/procedure.
Cedric Buche (ENIB) POO 28 janvier 2014 18 / 137
Justification du modele objet (1 UC) Programmation procedurale
Exemple
Dans une entreprise situee a Biarritz,Robert (num de secu 10573123456),est employe sur un poste de technicien
1 ###########################################
2 # V e r s i o n 1
3 # v a r i a b l e s g l o b a l e s
4 ###########################################
5
6 num secu robert = 10573123456
7 nom robert = ”Robert”
8 q u a l i f i c a t i o n r o b e r t = ” Technic ien ”
9 l i e u d e t r a v a i l r o b e r t = ” B i a r r i t z ”
Cedric Buche (ENIB) POO 28 janvier 2014 19 / 137
Justification du modele objet (1 UC) Programmation procedurale
Limites de la programmation procedurale : Exemple
Ajout d’un employe bernard
1 # r o b e r t
2 num secu robert = 10573123456
3 nom robert = ”Robert”
4 q u a l i f i c a t i o n r o b e r t = ” Technic ien ”
5 l i e u d e t r a v a i l r o b e r t = ” B i a r r i t z ”
6
7 # b e r n a r d
8 num secu bernard = 2881111001
9 nom bernard = ”Bernard”
10 q u a l i f i c a t i o n b e r n a r d = ” Ingen i eur ”
11 l i e u d e t r a v a i l b e r n a r d = ” B i a r r i t z ”
12
13 # . . .
Cedric Buche (ENIB) POO 28 janvier 2014 20 / 137
Justification du modele objet (1 UC) Programmation procedurale
Limites de la programmation procedurale
1 ###########################################
2 # V e r s i o n 2
3 # u t i l i s a t i o n de c o n t e n e u r s
4 ###########################################
5
6 tab robe r t =[10573123456 ,
7 ” robe r t ” ,
8 ” Technic ien ” ,
9 ” B i a r r i t z ” ]
10 tab mickey =[14456464443 ,
11 ”mickey” ,
12 ” Ingen i eur ” ,
13 ” Brest ” ]
14 tab =[ ]
15 tab . append ( tab robe r t )
16 tab . append ( tab mickey )
17 print tab [ 0 ] [ 0 ] # num s e c u r o b e r t
Cedric Buche (ENIB) POO 28 janvier 2014 21 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet
Definition de la structure de donnee par la notion de classe
1 ###########################################
2 # V e r s i o n 3
3 # s t r u c t u r a t i o n d e s d o n n e e s
4 ###########################################
5
6 class Employe :
7 num secu
8 nom
9 q u a l i f i c a t i o n
10 L i e u d e t r a v a i l
Cedric Buche (ENIB) POO 28 janvier 2014 22 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet : classe
Classe
declare les proprietes communes d’un ensemble d’objets
Exemple
La classe Voiture possede les proprietes suivantes (les attributs) :
couleur
puissance
Cedric Buche (ENIB) POO 28 janvier 2014 23 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet : classe
Classe
declare les proprietes communes d’un ensemble d’objets
Exemple
La classe Voiture possede les proprietes suivantes (les attributs) :
couleur
puissance
Cedric Buche (ENIB) POO 28 janvier 2014 23 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet : objets
Classe → Objets
usine a partir de laquelle il est possible de creer des objets.
Objets : exemple instance de la classe Voiture
Voiture "Clio 2007 version roland garros"
couleur: verte
puissance: 70 Ch
Voiture "307 blue lagoon"
couleur: bleue
puissance: 90 Ch
Cedric Buche (ENIB) POO 28 janvier 2014 24 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet : objets
Classe → Objets
usine a partir de laquelle il est possible de creer des objets.
Objets : exemple instance de la classe Voiture
Voiture "Clio 2007 version roland garros"
couleur: verte
puissance: 70 Ch
Voiture "307 blue lagoon"
couleur: bleue
puissance: 90 Ch
Cedric Buche (ENIB) POO 28 janvier 2014 24 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
En pratique ...
Mise en place d’objets concrets (instances de classe)
1 # r o b e r t
2 e1=Employe ( ) # o b j e t e 1 : i n s t a n c e de l a c l a s s e Employe
3 e1 . num secu = 10573123456
4 e1 .nom = ”Robert”
5 e1 . q u a l i f i c a t i o n = ” Technic ien ”
6 e1 . L i e u d e t r a v a i l = ” B i a r r i t z ”
7
8 print ( e1 . num secu ,
9 e1 . nom,
10 e1 . q u a l i f i c a t i o n ,
11 e1 . L i e u d e t r a v a i l )
12
13 # mi c k e y
14 e2=Employe ( ) # o b j e t e 2 : i n s t a n c e de l a c l a s s e Employe
15 e2 . num secu = 14456464443
16 e2 .nom = ”Mickey”
17 e2 . q u a l i f i c a t i o n = ” Inge ”
18 e2 . L i e u d e t r a v a i l = ” Brest ”
Cedric Buche (ENIB) POO 28 janvier 2014 25 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
En pratique ...
1 # n o r b e r t
2 e3=Employe ( )
3
4 print ( e3 . num secu , # ERREUR
5 e3 . nom,
6 e3 . q u a l i f i c a t i o n ,
7 e3 . L i e u d e t r a v a i l )
Cedric Buche (ENIB) POO 28 janvier 2014 26 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet : Le constructeur
Constructeur
les attributs doivent etres initialisees avec une valeur � pardefaut �
appel a une fonction particuliere : le constructeur
Cedric Buche (ENIB) POO 28 janvier 2014 27 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
En pratique ...
1
2 class Employe :
3 def i n i t ( s e l f ) : # C o n s t r u c t e u r de l a c l a s s e Employe
4 s e l f . num secu = 000000000
5 s e l f . nom = ”no name”
6 s e l f . q u a l i f i c a t i o n = ” novice ”
7 s e l f . L i e u d e t r a v a i l = ” Par i s ”
En python, le premier argument du constructeurest toujours self
Cedric Buche (ENIB) POO 28 janvier 2014 28 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
En pratique ...
1 # n o r b e r t
2 e3=Employe ( ) # c r e a t i o n de e 3 : a p p e l i m p l i c i t e de i n i t de Employe
3
4 print ( e3 . num secu , # OK ! ! !
5 e3 . nom,
6 e3 . q u a l i f i c a t i o n ,
7 e3 . L i e u d e t r a v a i l )
Cedric Buche (ENIB) POO 28 janvier 2014 29 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
En pratique ...
1
2 class Employe :
3 def i n i t ( s e l f ,
4 le num secu ,
5 le nom ,
6 l a q u a l i f i c a t i o n ,
7 l e L i e u d e t r a v a i l ) :
8
9 s e l f . num secu = le num secu
10 s e l f . nom = le nom
11 s e l f . q u a l i f i c a t i o n = l a q u a l i f i c a t i o n
12 s e l f . L i e u d e t r a v a i l = l e L i e u d e t r a v a i l
Cedric Buche (ENIB) POO 28 janvier 2014 30 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
En pratique ...
En python,→ init appelee implicitement a la creation d’unobjet→ le constructeur peut posseder plusieurs arguments(en plus de self )
Cedric Buche (ENIB) POO 28 janvier 2014 31 / 137
Justification du modele objet (1 UC) Vers la Programmation Orientee Objet (POO)
Vers la programmation orientee objet : Le constructeur
1
2 class Employe :
3 def i n i t ( s e l f ,
4 le num secu = 000000000 ,
5 le nom = ”no name” ,
6 l a q u a l i f i c a t i o n = ” novice ” ,
7 l e L i e u d e t r a v a i l = ” Par i s ” ) :
8
9 s e l f . num secu = le num secu
10 s e l f . nom = le nom
11 s e l f . q u a l i f i c a t i o n = l a q u a l i f i c a t i o n
12 s e l f . L i e u d e t r a v a i l = l e L i e u d e t r a v a i l
13
14
15 ############## Programme P r i n c i p a l #############
16
17 e1 = Employe ( l e L i e u d e t r a v a i l = ” Brest ” )
Cedric Buche (ENIB) POO 28 janvier 2014 32 / 137
Concepts fondateurs (1 UC)
Plan de la presentation
1 Justification du modele objet (1 UC)
2 Concepts fondateurs (1 UC)
3 Encapsulation (1 UC)
4 Hierarchie (1 UC)
5 Collaborations entre objets (1 UC)
6 Pour aller plus loin
Cedric Buche (ENIB) POO 28 janvier 2014 33 / 137
Concepts fondateurs (1 UC)
Cours 2 / Labo 2
Objectifs
Classe :
AttributsMethodesConstructeur / destructeur
Objet :
EtatComportementIdentite
Cedric Buche (ENIB) POO 28 janvier 2014 34 / 137
Concepts fondateurs (1 UC)
Cours 2 / Labo 2
Objectifs
Classe :
AttributsMethodesConstructeur / destructeur
Objet :
EtatComportementIdentite
Cedric Buche (ENIB) POO 28 janvier 2014 34 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?
Les classes
Je croyais qu’on allait apprendre a creer des objets,pourquoi creer une classe ?
pour creer un objet, il faut d’abord creer une classe !
exemple : pour construire une maison,
besoin d’un plan d’architecte→ classe = plan,→ l’objet = maison.→ ”Creer une classe”, c’est dessiner les plans de l’objet.
Cedric Buche (ENIB) POO 28 janvier 2014 35 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?
Une classe represente un ensemble d’objets qui partagent une structure
commmune et un comportement commun [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 36 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?
Les classes
Une classe est la description d’une famille d’objets qui ont lameme structure et les memes comportements.
Une classe est une sorte de moule a partir duquel sont generes lesobjets.
Une classegeneration−−−−−−−−→ des objets
Cedric Buche (ENIB) POO 28 janvier 2014 37 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?
Les classes
Une classe est la description d’une famille d’objets qui ont lameme structure et les memes comportements.
Une classe est une sorte de moule a partir duquel sont generes lesobjets.
Une classegeneration−−−−−−−−→ des objets
Cedric Buche (ENIB) POO 28 janvier 2014 37 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?
Les classes
Une classe est constituee :1 d’un ensemble de variables (ou attributs) qui decrivent la structure
des objets ;2 d’un ensemble de fonctions (ou methodes)
qui sont applicables aux objets, et qui decrivent leur comportement.
attributs : variables contenues dans la classe,
on parle aussi de ”variables membres”
methodes : fonctions contenues dans la classe,
on parle aussi de ”fonctions membres”
ou de competences
ou de services
Cedric Buche (ENIB) POO 28 janvier 2014 38 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?
Les classes
Une classe est constituee :1 d’un ensemble de variables (ou attributs) qui decrivent la structure
des objets ;2 d’un ensemble de fonctions (ou methodes)
qui sont applicables aux objets, et qui decrivent leur comportement.
attributs : variables contenues dans la classe,
on parle aussi de ”variables membres”
methodes : fonctions contenues dans la classe,
on parle aussi de ”fonctions membres”
ou de competences
ou de services
Cedric Buche (ENIB) POO 28 janvier 2014 38 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Classe — Objets
1 Classe
AbstractionDefinit une infinite d’objets instances
2 Objet = etat + comportement + identite
AttributsMethodesIdentite
On dit qu’un objet est une instance d’une classe
Cedric Buche (ENIB) POO 28 janvier 2014 39 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Classe — Objets
1 Classe
AbstractionDefinit une infinite d’objets instances
2 Objet = etat + comportement + identite
AttributsMethodesIdentite
On dit qu’un objet est une instance d’une classe
Cedric Buche (ENIB) POO 28 janvier 2014 39 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Classe — Objets
1 Classe
AbstractionDefinit une infinite d’objets instances
2 Objet = etat + comportement + identite
AttributsMethodesIdentite
On dit qu’un objet est une instance d’une classe
Cedric Buche (ENIB) POO 28 janvier 2014 39 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Etat
Etat d’un objet
regroupe les valeurs instantanees de tous ses attributs
evolue au cours du temps
est la consequence de ses comportements passes
Cedric Buche (ENIB) POO 28 janvier 2014 40 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Etat ... En pratique
1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def i n i t ( s e l f , v1=”nomarque” , v2=” noco lo r ” , v3 =0):
4 s e l f . marque = v1
5 s e l f . cou l eur = v2
6 s e l f . r e s e rveEs sence = v3
7
8 ### Ob j e t #####
9 homer mobile = Voiture ( )
10
11 ## Et a t
12 homer mobile . marque = ” pipo ”
13 homer mobile . cou l eur = ” rose ”
14 homer mobile . r e s e rveEs sence = 30
Cedric Buche (ENIB) POO 28 janvier 2014 41 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Attributs et variables
les attributs caracterisent l’etat des instances d’une classe. Ilsparticipent a la modelisation du probleme.
les variables sont des memoires locales a des methodes. Elles sontla pour faciliter la gestion du traitement.
l’acces aux variables est limite au bloc ou elles sont declarees :regle de portee
Cedric Buche (ENIB) POO 28 janvier 2014 42 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Attributs et variables
les attributs caracterisent l’etat des instances d’une classe. Ilsparticipent a la modelisation du probleme.
les variables sont des memoires locales a des methodes. Elles sontla pour faciliter la gestion du traitement.
l’acces aux variables est limite au bloc ou elles sont declarees :regle de portee
Cedric Buche (ENIB) POO 28 janvier 2014 42 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Attributs et variables
les attributs caracterisent l’etat des instances d’une classe. Ilsparticipent a la modelisation du probleme.
les variables sont des memoires locales a des methodes. Elles sontla pour faciliter la gestion du traitement.
l’acces aux variables est limite au bloc ou elles sont declarees :regle de portee
Cedric Buche (ENIB) POO 28 janvier 2014 42 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Comportement
Comportement d’un objet
regroupe toutes ses competences
decrit les actions et les reactions d’un objet
→ se represente sous la forme de methodes(appelees parfois fonctions membres)
Pour un objet ”homer mobile”
demarrer
arreter
freiner
. . .
Cedric Buche (ENIB) POO 28 janvier 2014 43 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Comportement
Comportement d’un objet
regroupe toutes ses competences
decrit les actions et les reactions d’un objet
→ se represente sous la forme de methodes(appelees parfois fonctions membres)
Pour un objet ”homer mobile”
demarrer
arreter
freiner
. . .
Cedric Buche (ENIB) POO 28 janvier 2014 43 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Comportement ... En pratique
1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def i n i t ( s e l f , v1=”nomarque” , v2=” noco lo r ” , v3 =0):
4 s e l f . marque = v1
5 s e l f . cou l eur = v2
6 s e l f . r e s e rveEs sence = v3
7
8 def demarrer ( s e l f ) :
9 print ” j e demarre”
10 def a r r e t e r ( s e l f ) :
11 print ” j e m ' a r r e t e ”
12 . . .
13 ### Ob j e t #####
14 homer mobile = Voiture ( )
15
16 ## Compor t ement
17 homer mobile . demarrer ( )
18 homer mobile . a r r e t e r ( )
Cedric Buche (ENIB) POO 28 janvier 2014 44 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Comportement — Etat
L’etat et le comportement sont lies
homer mobile.demarrer()
ne marchera pas si
homer mobile.reserveEssence
== 0
Cedric Buche (ENIB) POO 28 janvier 2014 45 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Comportement — Etat
1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def i n i t ( s e l f , v1=”nomarque” , v2=” noco lo r ” , v3 =0):
4 s e l f . marque = v1
5 s e l f . cou l eur = v2
6 s e l f . r e s e rveEs sence = v3
7
8 def demarrer ( s e l f ) :
9 i f s e l f . r e s e rveEs sence > 0 :
10 print ” j e demarre”
11 else :
12 print ” j e ne peux pas demarrer ”
Cedric Buche (ENIB) POO 28 janvier 2014 46 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Etat : evolution
Pour l’objet ”homer mobile”
marque : pipo
couleur : rose
reserve d’essence :30l
Apres 100 kms . . .
marque : pipo
couleur : rose
reserve d’essence :25l
Cedric Buche (ENIB) POO 28 janvier 2014 47 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Etat : evolution
Pour l’objet ”homer mobile”
marque : pipo
couleur : rose
reserve d’essence :30l
Apres 100 kms . . .
marque : pipo
couleur : rose
reserve d’essence :25l
Cedric Buche (ENIB) POO 28 janvier 2014 47 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Etat : evolution
1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def i n i t ( s e l f , v1=”nomarque” , v2=” noco lo r ” , v3 =0):
4 s e l f . marque = v1
5 s e l f . cou l eur = v2
6 s e l f . r e s e rveEs sence = v3
7
8 def demarrer ( s e l f ) :
9 i f s e l f . r e s e rveEs sence > 0 :
10 print ” j e demarre”
11 else :
12 print ” j e ne peux pas demarrer ”
13
14 def r o u l e r ( s e l f ,nbKm) :
15 s e l f . r e s e rveEs sence = s e l f . r e s e rveEs sence − 5*nbKm/100;
16
17
18 ####
19 homer mobile = Voiture ( )
20 homer mobile . r e s e rveEs sence = 30
21 homer mobile . demarrer ( )
22 homer mobile . r o u l e r (100)
23 print homer mobile . r e s e rveEs sence
Cedric Buche (ENIB) POO 28 janvier 2014 48 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Identite
L’identite
est propre a l’objet et le caracterise
permet de distinguer tout objet independamment de son etat
Voiture.1
Voiture.2
Cedric Buche (ENIB) POO 28 janvier 2014 49 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Identite
L’identite
est propre a l’objet et le caracterise
permet de distinguer tout objet independamment de son etat
Voiture.1
Voiture.2
Cedric Buche (ENIB) POO 28 janvier 2014 49 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Identite
→ nommer chaque objet(ex. attribut ”name”)print homer mobile.name
→ leur referenceprint homer mobile
Voiture.10xb7d4e0ec
Voiture.20xb7d53eec
Cedric Buche (ENIB) POO 28 janvier 2014 50 / 137
Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?
Le chaos des objets
Attention, ne pas oublier ! !
Soient 3 objets :
meme structures de donnees (attributs)meme comportement (methodes)
→ Il faut les decrire de facon abstraite : une classe
Cedric Buche (ENIB) POO 28 janvier 2014 51 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Construction
A la declaration d’un objet, les attributs ne sont pas initialises.
Cette phase d’initialisation des attributs est effectuee par unemethode particuliere : le constructeur.
Le constructeur est appele lors de la construction de l’objet.
Une classe peut definir son(ses) constructeur(s) avec desparametres differents
Cedric Buche (ENIB) POO 28 janvier 2014 52 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Construction
A la declaration d’un objet, les attributs ne sont pas initialises.
Cette phase d’initialisation des attributs est effectuee par unemethode particuliere : le constructeur.
Le constructeur est appele lors de la construction de l’objet.
Une classe peut definir son(ses) constructeur(s) avec desparametres differents
Cedric Buche (ENIB) POO 28 janvier 2014 52 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Construction
A la declaration d’un objet, les attributs ne sont pas initialises.
Cette phase d’initialisation des attributs est effectuee par unemethode particuliere : le constructeur.
Le constructeur est appele lors de la construction de l’objet.
Une classe peut definir son(ses) constructeur(s) avec desparametres differents
Cedric Buche (ENIB) POO 28 janvier 2014 52 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Construction
A la declaration d’un objet, les attributs ne sont pas initialises.
Cette phase d’initialisation des attributs est effectuee par unemethode particuliere : le constructeur.
Le constructeur est appele lors de la construction de l’objet.
Une classe peut definir son(ses) constructeur(s) avec desparametres differents
Cedric Buche (ENIB) POO 28 janvier 2014 52 / 137
Concepts fondateurs (1 UC) Vie d’un objet
En pratique ...
1
2 class Complexe :
3 def i n i t ( s e l f , r =0.0 , i =0 .0) :
4 s e l f . r e e l = r
5 s e l f . img = i
6
7
8
9 ####### Programme p r i n c i p a l ########
10 c1 = Complexe ( )
11 c2 = Complexe ( 0 . 5 )
12 c3 = Complexe ( 0 . 5 , 0 . 2 )
13 c4 = Complexe ( i =0.2)
Cedric Buche (ENIB) POO 28 janvier 2014 53 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Destruction
Methode speciale appelee lors de la suppression d’une instance : ledestructeur de la classe
Objectif : detruire tous les objets crees par l’objet courant aucours de son existence
En python,→ la definition d’un destructeur n’est pas obli-gatoire
Cedric Buche (ENIB) POO 28 janvier 2014 54 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Destruction
Methode speciale appelee lors de la suppression d’une instance : ledestructeur de la classe
Objectif : detruire tous les objets crees par l’objet courant aucours de son existence
En python,→ la definition d’un destructeur n’est pas obli-gatoire
Cedric Buche (ENIB) POO 28 janvier 2014 54 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Destruction
Methode speciale appelee lors de la suppression d’une instance : ledestructeur de la classe
Objectif : detruire tous les objets crees par l’objet courant aucours de son existence
En python,→ la definition d’un destructeur n’est pas obli-gatoire
Cedric Buche (ENIB) POO 28 janvier 2014 54 / 137
Concepts fondateurs (1 UC) Vie d’un objet
En pratique ...
1
2 class Complexe :
3 def d e l ( s e l f ) :
4 print ” I 'm dying ! ”
En python,→ del appelee implicitement a la destruction d’unobjet
Cedric Buche (ENIB) POO 28 janvier 2014 55 / 137
Concepts fondateurs (1 UC) Vie d’un objet
Garbage collector
Appel du destructeur ?
dans certains langages, un programme s’execute en tache de fondafin de supprimer la memoire associee a un objet
→ le ramasse miettes ou ”garbage collector”
Cedric Buche (ENIB) POO 28 janvier 2014 56 / 137
Concepts fondateurs (1 UC) Vie d’un objet
En pratique ...
1 class Test :
2 def d e l ( s e l f ) :
3 print ” I am dying ”
4
5
6
7 >>> t1 = Test ( ) # une i n s t a n c e de T e s t e s t c r e e
8 >>> t1 = None # t1 ne p e rme t p l u s d ' a c c e d e r a l ' i n s t a n c e
9 I am dying # e l l e e s t s u s c e p t i b l e d ' e t r e d e t r u i t e c e q u i
10 >>> # a r r i v e i n s t a n t a n em e n t i c i ma i s n ' e s t p a s g a r a n t i
Cedric Buche (ENIB) POO 28 janvier 2014 57 / 137
Encapsulation (1 UC)
Plan de la presentation
1 Justification du modele objet (1 UC)
2 Concepts fondateurs (1 UC)
3 Encapsulation (1 UC)
4 Hierarchie (1 UC)
5 Collaborations entre objets (1 UC)
6 Pour aller plus loin
Cedric Buche (ENIB) POO 28 janvier 2014 58 / 137
Encapsulation (1 UC)
Cours 3 / Labo 3
Objectifs
Encapsulation
Regles d’encapsulation
Cedric Buche (ENIB) POO 28 janvier 2014 59 / 137
Encapsulation (1 UC) Principes
L’encapsulation occulte les details de l’implementation d’un objet
[Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 60 / 137
Encapsulation (1 UC) Principes
Controle d’acces : illustration
Gestion de compte en banque
classe Compte
avec un attribut solde
1 class Compte :
2 def i n i t ( s e l f ) :
3 s e l f . s o ld e = 0 # s o l d e n u l
4
5 def a f f i c h e ( s e l f ) :
6 print ”Le so lde de votre compte e s t de ” s e l f . s o lde
7
8
9 ######## Programme p r i n c i p a l #######
10 c = Compte ( )
11 c . a f f i c h e ( ) # p o u r q u o i p a s
12 c . s o lde = 1000000 # ben t i e n s !
Cedric Buche (ENIB) POO 28 janvier 2014 61 / 137
Encapsulation (1 UC) Principes
Controle d’acces
Lors de la definition d’une classe il est possible de restreindre voired’interdire l’acces (aux objets des autres classes) a des attributs oumethodes des instances de cette classe.
Cedric Buche (ENIB) POO 28 janvier 2014 62 / 137
Encapsulation (1 UC) Principes
Controle d’acces
Modificateurs d’acces lors de la declaration d’attributs oumethodes :
privee accessible uniquement depuis des instances de la classepublic accessible par tout le monde(ie. tous ceux qui possedent une reference sur l’objet)
→ Rendre solde prive
Cedric Buche (ENIB) POO 28 janvier 2014 63 / 137
Encapsulation (1 UC) Principes
En pratique ...
1 class Test :
2
3 def i n i t ( s e l f , laValeurPubl ic , l aVa leurPr ivee ) :
4 s e l f . va l eurPub l i c = laVa leurPub l i c
5 s e l f . v a l e u r P r i v e e = laVa leurPr ivee
6
7
8 def f 1 ( s e l f ) :
9 . . .
10 def f 2 ( s e l f ) :
11 . . .
12
13
14 ######## Programme p r i n c i p a l ########
15 t1 = Test ( )
16
17 print t1 . va l eurPub l i c # OK
18 print t1 . v a l e u r P r i v e e # ERREUR
19
20 t1 . f 1 ( ) # OK
21 t1 . f 2 ( ) # ERREUR
Cedric Buche (ENIB) POO 28 janvier 2014 64 / 137
Encapsulation (1 UC) Principes
Controle d’acces
Le programmeur createur peut modifier le comportement sans impact :
controle lors de la modification
1 def deb i t ( s e l f , l aValeur ) :
2
3 i f s e l f . s o l d e − l aValeur > 0 :
4 s e l f . s o l d e = s e l f . s o l d e − l aValeur
5 else :
6 print ( ”Compte bloque ! ! ! ” )
En python,→ le prefixe ” ” rend prive un attribut ou unemethode
Cedric Buche (ENIB) POO 28 janvier 2014 65 / 137
Encapsulation (1 UC) Principes
Controle d’acces : interet
1 proteger
→ ne pas permettre l’acces a tout des que l’on a une reference del’objet
2 masquer l’implementation
→ toute la decomposition du probleme n’a besoin d’etre connuedu programmeur client
3 evolutivite
→ possibilite de modifier tout ce qui n’est pas public sans impactpour le programmeur client
Cedric Buche (ENIB) POO 28 janvier 2014 66 / 137
Encapsulation (1 UC) Principes
Controle d’acces : interet
1 proteger
→ ne pas permettre l’acces a tout des que l’on a une reference del’objet
2 masquer l’implementation
→ toute la decomposition du probleme n’a besoin d’etre connuedu programmeur client
3 evolutivite
→ possibilite de modifier tout ce qui n’est pas public sans impactpour le programmeur client
Cedric Buche (ENIB) POO 28 janvier 2014 66 / 137
Encapsulation (1 UC) Principes
Controle d’acces : interet
1 proteger
→ ne pas permettre l’acces a tout des que l’on a une reference del’objet
2 masquer l’implementation
→ toute la decomposition du probleme n’a besoin d’etre connuedu programmeur client
3 evolutivite
→ possibilite de modifier tout ce qui n’est pas public sans impactpour le programmeur client
Cedric Buche (ENIB) POO 28 janvier 2014 66 / 137
Encapsulation (1 UC) Regles d’encapsulation
Regles
Regles a respecter
1 Rendre prives les attributs caracterisant l’etat de l’objet2 Fournir des methodes publiques permettant de acceder/modifier
l’attribut
accesseursmutateurs
Cedric Buche (ENIB) POO 28 janvier 2014 67 / 137
Encapsulation (1 UC) Mise en application
1 - Definir les classes
1 ################################
2 # Programme Python #
3 # Aut eu r : . . . . . #
4 # Date c r e a t i o n : . . . #
5 ################################
6
7 class X:
8
9 # −−− Do cumen t a t i o n −−−10
11
12 # −−− C o n s t r u c t e u r e t d e s t r u c t e u r −−−13
14 # −−− Methode s p u b l i q u e s : A c c e s aux a t t r i b u t s −−−15 # a c c e s s e u r s
16 # mu t a t e u r s
17
18 # −−− Methode s p u b l i q u e s : O p e r a t i o n s −−−19
20 # −−− Methode s p r i v e e s −−−
Cedric Buche (ENIB) POO 28 janvier 2014 68 / 137
Encapsulation (1 UC) Mise en application
1 - Definir les classes
Documentation
Conception :
decrire la classe et ses fonctionnalites
Debuggage :
debrayer des parties de code, marquer des points douteux, signer uncorrectif
Maintenance :
decrire les corrections/ajouts/retraits et les signer
→ Indispensable dans un code
description, pas des ”faut que j’aille prendre un cafe” . . .
Cedric Buche (ENIB) POO 28 janvier 2014 69 / 137
Encapsulation (1 UC) Mise en application
1 - Definir les classes
Constructeur et destructeur
Constructeur
Definir l’etat initial de l’objet
→ Initialisation des attributs definis dans la classe
Creer les objets dont l’existence est liee a celle de l’objetTypes de constructeur
par defaut, par recopie . . .
Destructeur
Detruire tous les objets crees par l’objet courant au cours de sonexistence
Cedric Buche (ENIB) POO 28 janvier 2014 70 / 137
Encapsulation (1 UC) Mise en application
1 - Definir les classes
Acces aux attributs : getAttrName et setAttrName
Objectifs
Maintien de l’integriteLimitation des effets de bord
Comment ?
Attribut : toujours un membre privegetAttrName et setAttrName : en fonction des contraintesd’integrite
Exemples
Taille d’une Liste
Dimensions d’un Rectangle et d’un Carre
Cedric Buche (ENIB) POO 28 janvier 2014 71 / 137
Encapsulation (1 UC) Mise en application
1 - Definir les classes
1 class Temperature :
2 ”””
3 La c l a s s e T emp e r a t u r e r e p r e s e n t e une g r a n d e u r p h y s i q u e l i e e
4 a l a n o t i o n immed i a t e de chaud e t f r o i d
5 ”””
6 # −−− C o n s t r u c t e u r e t d e s t r u c t e u r
7 def i n i t ( s e l f , l aValeur = 0 ) :
8 s e l f . v a l e u r = laValeur
9
10 def d e l ( s e l f ) :
11 print ” de s t ru c t i on ”
12
13 # −−− Methode s p u b l i q u e s : A c c e s aux a t t r i b u t s
14 # a c c e s s e u r s
15 def getValeur ( s e l f ) :
16 return s e l f . v a l e u r
17 # mu t a t e u r s
18 def se tVa leur ( s e l f , va lue ) :
19 s e l f . v a l e u r = value
20
21 # −−− Methode s p u b l i q u e s : O p e r a t i o n s
22 def getValeurC ( s e l f ) :
23 return s e l f . v a l e u r − 273.16
24
25 def getValeurF ( s e l f ) :
26 return 1 .8 * s e l f . getValeurC ( ) + 32
Cedric Buche (ENIB) POO 28 janvier 2014 72 / 137
Encapsulation (1 UC) Mise en application
2 - Instancier des objets et les utiliser
1 # Exemple d ' u t i l i s a t i o n de c e t t e c l a s s e
2
3 eauChaude = Temperature (310)
4 print eauChaude . getValeurC ( )
5 print eauChaude . getValeurF ( )
6
7 eauFroide = Temperature (5)
8 print eauFroide . getValeurC ( )
9 print eauFroide . getValeurF ( )
Cedric Buche (ENIB) POO 28 janvier 2014 73 / 137
Encapsulation (1 UC) Interet
Interet
1 class Voiture :
2 ”””
3 La c l a s s e V o i t u r e d e f i n i e p a r s a l a r g e u r
4 ”””
5 # −−− C o n s t r u c t e u r e t d e s t r u c t e u r
6 def i n i t ( s e l f , l aValeur = 0 ) :
7 s e l f . l a r g e u r = laValeur
8
9 # −−− Methode s p u b l i q u e s : A c c e s aux a t t r i b u t s
10 # a c c e s s e u r s
11 def getLargeur ( s e l f ) :
12 return s e l f . l a r g e u r
13 # mu t a t e u r s
14 def se tLargeur ( s e l f , va lue ) :
15 s e l f . l a r g e u r = value
16
17 # −−− Methode s p u b l i q u e s : O p e r a t i o n s
18 def mettreAJour ( s e l f ) :
19 . . .
20
21 ####### Ob j e t ########
22 veh i cu l e1 = Voiture ( ) ;
23 veh i cu l e1 . se tLargeur (100) # La r g e u r de l a v o i t u r e
24 veh i cu l e1 . mettreAJour ( ) # Met t o n s a j o u r l ' a f f i c h a g e
25 veh i cu l e1 . se tLargeur (150) # Chang e on s l a l a r g e u r de l a v o i t u r e
26 veh i cu l e1 . mettreAJour ( ) # Met t o n s a j o u r l ' a f f i c h a g e
Cedric Buche (ENIB) POO 28 janvier 2014 74 / 137
Encapsulation (1 UC) Interet
Interet
1 def se tLargeur ( s e l f , va lue ) :
2 s e l f . l a r g e u r = value
3 s e l f . mettreAJour ( )
4
5 ####### Ob j e t ###################
6 veh i cu l e1 = Voiture ( ) ;
7 veh i cu l e1 . se tLargeur (100) # La r g e u r de l a v o i t u r e
8 # L ' a f f i c h a g e de l a v o i t u r e e s t a u t oma t i q u em e n t m i s a j o u r d an s l ' a c c e s s e u r
9 veh i cu l e1 . se tLargeur (150) # Chang e on s l a l a r g e u r de l a v o i t u r e
10 # Enc o r e une f o i s , i l n ' y a r i e n d ' a u t r e a f a i r e !
Cedric Buche (ENIB) POO 28 janvier 2014 75 / 137
Encapsulation (1 UC) Interet
Interet
1 veh i cu l e1 = Voiture ( ) ;
2 veh i cu l e1 . se tLargeur (100) # La r g e u r de l a v o i t u r e
3 # On v e r i f i e que l a l a r g e u r e s t d an s l e s l i m i t e s
4 i f veh i cu l e1 . getLargeur ( ) < 100 : veh i cu l e1 . se tLargeur (100)
5 else i f veh i cu l e1 . getLargeur ( ) > 200 : veh i cu l e1 . se tLargeur (200)
6 print veh i cu l e1 . getLargeur ( ) # A f f i c h e : 1 00
7
8 veh i cu l e1 . se tLargeur (250) # Chang e on s l a l a r g e u r de l a v o i t u r e
9 i f veh i cu l e1 . getLargeur ( ) < 100 : veh i cu l e1 . se tLargeur (100)
10 else i f veh i cu l e1 . getLargeur ( ) > 200 : veh i cu l e1 . se tLargeur (200)
11 print veh i cu l e1 . getLargeur ( ) # A f f i c h e : 2 00
Cedric Buche (ENIB) POO 28 janvier 2014 76 / 137
Encapsulation (1 UC) Interet
Interet
1 def se tLargeur ( s e l f , va lue ) :
2 s e l f . l a r g e u r = value
3
4 # l a r g e u r d o i t e t r e c om p r i s e e n t r e 100 e t 200
5 i f ( s e l f . getLargeur ( ) < 100) : s e l f . l a r g e u r = 100
6 else i f ( s e l f . getLargeur ( ) > 200) : s e l f . l a r g e u r = 200
7
8 s e l f . mettreAJour ( )
9
10 ### Ob j e t
11 veh i cu l e1 = Voiture ( ) ;
12 veh i cu l e1 . se tLargeur (100) # La r g e u r de l a v o i t u r e
13 # P l u s b e s o i n de v e r i f i e r que l a l a r g e u r e s t d an s l e s l i m i t e s , l ' a c c e s s e u r l e f a i t p ou r nou s !
14 print veh i cu l e1 . getLargeur ( ) # A f f i c h e : 1 00
15
16 veh i cu l e1 . se tLargeur ( 2 5 0 ) ; # Chang e on s l a l a r g e u r de l a v o i t u r e
17 print veh i cu l e1 . getLargeur ( ) # A f f i c h e : 2 00
Cedric Buche (ENIB) POO 28 janvier 2014 77 / 137
Hierarchie (1 UC)
Plan de la presentation
1 Justification du modele objet (1 UC)
2 Concepts fondateurs (1 UC)
3 Encapsulation (1 UC)
4 Hierarchie (1 UC)
5 Collaborations entre objets (1 UC)
6 Pour aller plus loin
Cedric Buche (ENIB) POO 28 janvier 2014 78 / 137
Hierarchie (1 UC) Hierarchie
Les entites constituent une hierarchie [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 79 / 137
Hierarchie (1 UC) Hierarchie
Heritage
Une sous-classe peut heriter de la structure et du comportement de sa
superclasse (classe mere) [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 80 / 137
Hierarchie (1 UC) Hierarchie
Heritage
Exemple : Fichier
Il existe plusieurs sortes de fichier :
fichier binaire → FichierBinaire
fichier ASCII → FichierASCII
→ Certaines proprietes sont generales a toutes les classes
→ nom, taille
→ Certaines sont specifiques a une classe ou un groupe de classesspecialisees
→ executer, imprimer
Cedric Buche (ENIB) POO 28 janvier 2014 81 / 137
Hierarchie (1 UC) Hierarchie
Heritage
La relation d’heritage
Principe
les caracteristiques des classes superieures sont heritees par lesclasses inferieures.
Mise en œuvre
les connaissances les plus generales sont mises en commun dans desclasses qui sont ensuite specialisees par definitions de sous–classessuccessives contenant des connaissances de plus en plus specifiques.
Cedric Buche (ENIB) POO 28 janvier 2014 82 / 137
Hierarchie (1 UC) Hierarchie
Specialisation
La specialisation d’une classe peut etre realisee selon deux techniques :
1 l’enrichissement : la sous–classe est dotee de nouvelle(s)methode(s) et/ou de nouveau(x) attribut(s) ;
2 la surcharge : une (ou plusieurs) methode et/ou un attribut heriteest redefini.
Cedric Buche (ENIB) POO 28 janvier 2014 83 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
Enrichissement (ajout d’une methode)
1 ###################################
2 ######### c l a s s F i c h i e r ##########
3
4 class F i ch i e r :
5 ””” D e f i n i t i o n c l a s s e F i c h i e r ””” # Do cumen t a t i o n
6
7 def i n i t ( s e l f ) : # C o n s t r u c t e u r
8 print ” c r e a t i on d 'un f i c h i e r ”
9
10
11 ##########################################
12 ######### c l a s s F i c h i e r B i n a i r e ##########
13
14 class F i c h i e r B i n a i r e ( F i ch i e r ) :
15 ””” D e f i n i t i o n c l a s s e F i c h i e r B i n a i r e ””” # Do cumen t a t i o n
16
17 def i n i t ( s e l f ) : # C o n s t r u c t e u r
18 F i ch i e r . i n i t ( s e l f )
19
20 def imprimer ( s e l f ) # E n r i c h i s s e m e n t
Cedric Buche (ENIB) POO 28 janvier 2014 84 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
Enrichissement (ajout d’un attribut)
1 ###################################
2 ######### c l a s s F i c h i e r ##########
3
4 class F i ch i e r :
5 ””” D e f i n i t i o n c l a s s e F i c h i e r ””” # Do cumen t a t i o n
6
7 def i n i t ( s e l f ) : # C o n s t r u c t e u r
8 print ” c r e a t i on d 'un f i c h i e r ”
9
10
11 ##########################################
12 ######### c l a s s F i c h i e r B i n a i r e ##########
13
14 class F i c h i e r B i n a i r e ( F i ch i e r ) :
15 ””” D e f i n i t i o n c l a s s e F i c h i e r B i n a i r e ””” # Do cumen t a t i o n
16
17 def i n i t ( s e l f ) : # C o n s t r u c t e u r
18 F i ch i e r . i n i t ( s e l f )
19 s e l f . codage=32 # E n r i c h i s s e m e n t
Cedric Buche (ENIB) POO 28 janvier 2014 85 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
Surcharge d’un attribut
1 ###################################
2 ######### c l a s s F i c h i e r ##########
3
4 class F i ch i e r :
5 def i n i t ( s e l f ) : # C o n s t r u c t e u r
6 s e l f . nom = ” f i ch i e r s an s nom ”
7
8
9 ##########################################
10 ######### c l a s s F i c h i e r B i n a i r e ##########
11
12 class F i c h i e r B i n a i r e ( F i ch i e r ) :
13
14 def i n i t ( s e l f ) : # C o n s t r u c t e u r
15 F i ch i e r . i n i t ( s e l f )
16 s e l f . nom = ” f i c h i e r B i n a i r e s a n s n o m ” # Su r c h a r g e de l ' a t t r i b u t ”nom”
Cedric Buche (ENIB) POO 28 janvier 2014 86 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
Surcharge d’une methode
1 ###################################
2 ######### c l a s s F i c h i e r ##########
3 class F i ch i e r :
4
5 def i n i t ( s e l f ) : # C o n s t r u c t e u r
6 print ” c r e a t i on d 'un f i c h i e r ”
7
8 def ouvr i r ( s e l f ) :
9 print ” ouvr i r f i c h i e r ”
10
11
12 ##########################################
13 ######### c l a s s F i c h i e r B i n a i r e ##########
14 class F i c h i e r B i n a i r e ( F i ch i e r ) :
15
16 def i n i t ( s e l f ) : # C o n s t r u c t e u r
17 F i ch i e r . i n i t ( s e l f )
18
19 def ouvr i r ( s e l f ) : # Su r c h a r g e de l a methode
20 print ” ouvr i r f i c h i e r B ina i r e ” # ” o u v r i r ”
Cedric Buche (ENIB) POO 28 janvier 2014 87 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1 class Engin :
2 def i n i t ( s e l f , braquage =90):
3 s e l f . v i t e s s e = 0
4 s e l f . braquage = braquage
5
6 def v i rage ( s e l f ) :
7 return s e l f . v i t e s s e / s e l f . braquage
8
9 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−10 class Sous marin alpha ( Engin ) :
11 def i n i t ( s e l f , braquage ) :
12 Engin . i n i t ( s e l f , braquage )
13
14 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−15 class T o r p i l l e ( Engin ) :
16 def i n i t ( s e l f , braquage ) :
17 Engin . i n i t ( s e l f , braquage )
18
19 def exp lo se ( s e l f ) :
20 print ” Explos ion ! ! ! ! ! ! ”
Cedric Buche (ENIB) POO 28 janvier 2014 88 / 137
Hierarchie (1 UC) Hierarchie
L’heritage multiple
faire heriter une classe de plusieurs superclasses.
regrouper au sein d’une seule et meme classe les attributs etmethodes de plusieurs classes.
Cedric Buche (ENIB) POO 28 janvier 2014 89 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1
2 class Herbivore :
3 . . .
4 def mangerHerbe ( s e l f ) :
5 print ” j e mange de l ' herbe ”
6
7 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−8 class Carnivore :
9 . . . .
10 def mangerViande ( s e l f ) :
11 print ” j e mange de l a viande ”
12 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−13 class Omnivore ( Herbivore , Carnivore ) : # H e r i t a g e m u l t i p l e
14 . . . .
15 def manger ( s e l f ) :
16 i f rand (10)%2 == 0 :
17 s e l f . mangerHerbe ( )
18 else :
19 s e l f . mangerViande ( )
Cedric Buche (ENIB) POO 28 janvier 2014 90 / 137
Hierarchie (1 UC) Hierarchie
Polymorphisme
A un meme service peut correspondre, dans les classes derivees,des methodes differentes
Chaque classe derivee definit le forme ( -morphe) sous laquelle elleremplit le service (methode)
Cette forme peut donc etre multiple (differente d’une classe al’autre) ( poly-)
Cedric Buche (ENIB) POO 28 janvier 2014 91 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1 class Shape : # c l a s s e ” a b s t r a i t e ” s p e c i f i a n t une i n t e r f a c e
2 def i n i t ( s e l f ) :
3 print ” j e s u i s une shape”
4
5 def area ( s e l f ) :
6 return ” shape area ”
7
8 class Rectangle ( Shape ) :
9 def i n i t ( s e l f ) :
10 Shape . i n i t ( s e l f )
11 print ” j e s u i s un Rectangle ”
12
13
14 def area ( s e l f ) :
15 return ” r e c t ang l e area ”
16
17 class C i r c l e ( Shape ) :
18 def i n i t ( s e l f ) :
19 Shape . i n i t ( s e l f )
20 print ” j e s u i s un c e r c l e ”
21 def area ( s e l f ) :
22 return ” c i r l e area ”
23
24 #### programme p r i n c i p a l
25 shapes = [ ]
26 shapes . append ( Rectangle ( ) )
27 shapes . append ( C i r c l e ( ) )
28 for i in shapes :
29 print i . area ( ) # a p p e l p o l ymo r ph eCedric Buche (ENIB) POO 28 janvier 2014 92 / 137
Hierarchie (1 UC) Hierarchie
Retour sur l’encapsulation
Encapsulation : controle d’acces
publiques
privees
protegees : les attributs ne sont visibles que des sous-classes
Cedric Buche (ENIB) POO 28 janvier 2014 93 / 137
Hierarchie (1 UC) Hierarchie
Retour sur l’encapsulation
Encapsulation : regles d’ecriture
publiques : attr1, attr2
privees : attr1, attr2
protegees : attr1, attr2
En python,→ Les attributs et methodes protegees sont accessiblesnormalement, le prefixe a pour seul objectif d’informersur leur nature
Cedric Buche (ENIB) POO 28 janvier 2014 94 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1 class Telephone :
2 def i n i t ( s e l f ) :
3 # do n n e e s p r i v e s
4 s e l f . numero s e r i e = ' 126312156 '
5
6 # do n n e e s p r o t e g e e s
7 s e l f . c ode p in = ' 1234 '
8
9 # do n n e e s p u b l i q u e s
10 s e l f . modele = ' nokia 6800 '
11 s e l f . numero = ' 06 06 06 06 06 '
Cedric Buche (ENIB) POO 28 janvier 2014 95 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1 # me th od e s p r i v e e s
2
3 # me th od e s p r o t e g e e s
4 def chercherReseau ( s e l f ) :
5 print ' Reseau FSR, bienvenue dans un monde me i l l e u r . . . '
6
7 def recupMessage ( s e l f ) :
8 print 'Pas de message '
9
10 # me th od e s p u b l i q u e s
11 def al lumer ( s e l f , codePin ) :
12 print s e l f . modele
13 i f s e l f . c ode p in == codePin :
14 print 'Code pin OK '
15 s e l f . chercherReseau ( )
16 s e l f . recupMessage ( )
17 else :
18 print ' mauvais code pin '
Cedric Buche (ENIB) POO 28 janvier 2014 96 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1
2 # programme p r i n c i p a l
3 nokia = Telephone ( )
4 nokia . a l lumer ( ' 1524 ' )
5 nokia . a l lumer ( ' 1234 ' )
Cedric Buche (ENIB) POO 28 janvier 2014 97 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1 class TelephonePhoto ( Telephone ) :
2 def i n i t ( s e l f ) :
3 Telephone . i n i t ( s e l f )
4 print ' te l ephone + mieux '
5
6 # me th od e s p u b l i q u e s
7 def prendre photo ( s e l f ) :
8 print ' c l i k−c lak '
9
10 # Te s t
11 def f o n c t i o n t e s t ( s e l f ) :
12 print s e l f . numero s e r i e # ERREUR
13 print s e l f . c ode p in # OK sou s−c l a s s e de T e l e p h o n e
14
15
16 # programme p r i n c i p a l
17 nokia = TelephonePhoto ( )
18 nokia . a l lumer ( ' 1234 ' )
19 nokia . prendre photo ( )
Cedric Buche (ENIB) POO 28 janvier 2014 98 / 137
Hierarchie (1 UC) Hierarchie
En pratique ...
1 te l sagem = Telephone ( )
2 print te l sagem . numero s e r i e # ERREUR
3 print te l sagem . code p in # NON ! !
Cedric Buche (ENIB) POO 28 janvier 2014 99 / 137
Collaborations entre objets (1 UC) Relation multiple
En pratique ...
1 # R e l a t i o n m u l t i p l e
2
3 class Fi l l eMars :
4 def i n i t ( s e l f , prenom ) :
5 s e l f . prenom = prenom
6
7 def af f ichePrenom ( s e l f ) :
8 print s e l f . prenom
9 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−10 class PapaMars :
11 def i n i t ( s e l f ) :
12 s e l f . f i l l e s = [ ]
13 s e l f . f i l l e s . append ( Fi l l eMars ( 'Pamela ' ) )
14 s e l f . f i l l e s . append ( Fi l l eMars ( ' Tina ' ) )
15 s e l f . f i l l e s . append ( Fi l l eMars ( ' Rebecca ' ) )
16 s e l f . f i l l e s . append ( Fi l l eMars ( 'Amanda ' ) )
17
18 def c r i a t a b l e ( s e l f ) :
19 for c h i l d in s e l f . f i l l e s :
20 c h i l d . af f ichePrenom ()
21 print ( ' a tab l e ! ! ! ' )
Cedric Buche (ENIB) POO 28 janvier 2014 100 / 137
Collaborations entre objets (1 UC) Relation multiple
Attention aux pieges
Heritage vs associations
classe Automobile a partir des classes Carrosserie, Siege, Roue etMoteur.
l’heritage multiple == ERREUR
Cedric Buche (ENIB) POO 28 janvier 2014 101 / 137
Collaborations entre objets (1 UC) Relation multiple
En pratique ...
1 # R e l a t i o n s i m p l e
2 class Calcu la teur ( ) :
3 ””” c l a s s e de c a l c u l s ” ””
4 def somme( s e l f , a rgs = [ ] )
5 r e s u l t a t = 0
6 for arg in args :
7 r e s u l t a t += arg
8 return r e s u l t a t
9 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−10 class Af f i cheu r ( ) :
11 ””” c l a s s e de g e s t i o n de l ' i n t e r f a c e ”””
12 def i n i t ( s e l f ) :
13 s e l f . c a l c u l a t e u r = Calcu la teur ( )
14
15 def somme( s e l f , a rgs = [ ] ) :
16 r e s u l t a t = s e l f . c a l c u l a t e u r . somme( args )
17 print ' l e r e s u l t a t e s t %d ' % r e s u l t a t
Cedric Buche (ENIB) POO 28 janvier 2014 102 / 137
Collaborations entre objets (1 UC) Relation multiple
Association simple
Un objet peut faire appel aux competences d’un autre objet
Objet
flic Wiggum
arreter−−−−−→
Objet homer mobile
Cedric Buche (ENIB) POO 28 janvier 2014 103 / 137
Collaborations entre objets (1 UC) Relation multiple
Association simple
Un objet peut faire appel aux competences d’un autre objet
Objet
flic Wiggum
arreter−−−−−→
Objet homer mobile
Cedric Buche (ENIB) POO 28 janvier 2014 103 / 137
Collaborations entre objets (1 UC) Relation multiple
Comportement ... En pratique
1 #### d e f i n i t i o n c l a s s e ######
2 class F l i c :
3 def i n i t ( s e l f ) :
4 s e l f . nom
5
6 def donnerOrdreStop ( s e l f , v eh i cu l e ) : ## i n s t a n c e de V o i t u r e
7 print ” a r r e t e t o i ! ! ”
8 veh i cu l e . a r r e t e r ( )
9
10 ### Ob j e t #####
11 homer mobile = Voiture ( )
12 f l ic Wiggum = F l i c ( )
13 f l ic Wiggum . donnerOrdreStop ( homer mobile )
Cedric Buche (ENIB) POO 28 janvier 2014 104 / 137
Collaborations entre objets (1 UC) Destruction dans le cadre d’association
En pratique ...
1 class Roue :
2 def i n i t ( s e l f ) :
3 print ”Me v o i c i ! ”
4
5 def d e l ( s e l f ) :
6 print ”Je meurs ! ”
7
8
9 class Voiture :
10 def i n i t ( s e l f ) :
11 s e l f . roue1 = Roue ( )
12 s e l f . roue2 = Roue ( )
13 s e l f . roue3 = Roue ( )
14 s e l f . roue4 = Roue ( )
15
16 def d e l ( s e l f ) :
17 print ” I 'm dying ! ”
18 de l s e l f . roue1
19 de l s e l f . roue2
20 de l s e l f . roue3
21 de l s e l f . roue4
Cedric Buche (ENIB) POO 28 janvier 2014 105 / 137
Collaborations entre objets (1 UC) Destruction dans le cadre d’association
En pratique ...
1 class Humain :
2 def i n i t ( s e l f , nom ) :
3 s e l f . nom = nom
4
5 class Roue :
6 def i n i t ( s e l f ) :
7 print ”Me v o i c i ! ”
8
9 def d e l ( s e l f ) :
10 print ”Je meurs ! ”
11
12 class Voiture :
13 def i n i t ( s e l f , p ropr io ) :
14 s e l f . r oue1 = Roue ( )
15 s e l f . r oue2 = Roue ( )
16 s e l f . r oue3 = Roue ( )
17 s e l f . r oue4 = Roue ( )
18 s e l f . conducteur = propr io ( ”” )
19
20 def d e l ( s e l f ) :
21 print ” I 'm dying ! ”
22 de l s e l f . r oue1
23 de l s e l f . r oue2
24 de l s e l f . r oue3
25 de l s e l f . r oue4
Cedric Buche (ENIB) POO 28 janvier 2014 106 / 137
Pour aller plus loin
Plan de la presentation
1 Justification du modele objet (1 UC)
2 Concepts fondateurs (1 UC)
3 Encapsulation (1 UC)
4 Hierarchie (1 UC)
5 Collaborations entre objets (1 UC)
6 Pour aller plus loin
Cedric Buche (ENIB) POO 28 janvier 2014 107 / 137
Pour aller plus loin
Cours 5 - Programmation objet avancee
Objectifs
Abstraction
Classification
Modularite
Typage
Simultaneite
Persistance
Cedric Buche (ENIB) POO 28 janvier 2014 108 / 137
Pour aller plus loin Abstraction
L’abstraction se concentre sur les caracteristiques essentielles d’un
objet, selon le point de vue de l’observateur [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 109 / 137
Pour aller plus loin Abstraction
Abstraction
Un service peut etre declare sans qu’une methode y soit associee :service abstrait
La methode associee au service est definie dans une ou plusieursclasses derivees
On ne peut pas instancier d’objets d’une classe possedant unservice abstrait : classe abstraite
En python, attention, on peut instancier uneclasse abstraite
Cedric Buche (ENIB) POO 28 janvier 2014 110 / 137
Pour aller plus loin Abstraction
En pratique ...
1
2 class AbstractClass :
3
4 . . .
5
6 # Fo r c e l a c l a s s e f i l l e a d e f i n i r c e t t e methode
7 def getValue ( s e l f ) :
8 r a i s e NotImplementedError ( )
9
10 # methode commune
11 def printOut ( s e l f ) :
12 print s e l f . getValue ( ) ;
Cedric Buche (ENIB) POO 28 janvier 2014 111 / 137
Pour aller plus loin Abstraction
En pratique ...
1 class ConcreteClass1 ( AbstractClass ) :
2
3 . . .
4
5 def getValue ( s e l f ) :
6 return ” ConcreteClass1 ”
7
8 class ConcreteClass2 ( AbstractClass ) :
9
10 . . .
11
12 def getValue ( s e l f ) :
13 return ” ConcreteClass2 ”
14
15 #### Programme p r i n c i p a l #####
16 c l a s s 1 = ConcreteClass1 ( )
17 c l a s s 1 . printOut ( )
18
19 c l a s s 2 = ConcreteClass2 ( )
20 c l a s s 2 . printOut ( )
Cedric Buche (ENIB) POO 28 janvier 2014 112 / 137
Pour aller plus loin Abstraction
Les classes et les objets doivent etre au juste niveau d’abstraction : ni
trop haut ni trop bas [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 113 / 137
Pour aller plus loin Classification
La classification est le moyen par lequel nous ordonnons nos
connaissances [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 114 / 137
Pour aller plus loin Classification
Des obervateurs differents classent le meme objet de differentes facons
[Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 115 / 137
Pour aller plus loin Classification
Identification des mecanismes
Les mecanismes sont le moyen par lequel les objets collaborent pour
procurer un certain comportement de plus haut niveau [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 116 / 137
Pour aller plus loin Modularite
La modularite regroupe les entites en unites discretes [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 117 / 137
Pour aller plus loin Modularite
En pratique ...
Paquet en python
repertoire avec un fichier init .py qui definit les modules qu’ilcontient (exemple : /usr/lib/python/xml/)
from paquetage
Cedric Buche (ENIB) POO 28 janvier 2014 118 / 137
Pour aller plus loin Modularite
En pratique ...
Module en python
un fichier regroupant variables, classes et fonctions
extension ”.py”
from paquetage import Module
attention la liste path de sys
sys.path.append(Module)
Cedric Buche (ENIB) POO 28 janvier 2014 119 / 137
Pour aller plus loin Modularite
En pratique ...
Classe dans un module en python
Une classe
from paquetage import Class
from turtle import Penp1 = Pen()
Cedric Buche (ENIB) POO 28 janvier 2014 120 / 137
Pour aller plus loin Typage
Typage
Chaque objet peut etre type
Le type definit
la syntaxe (comment l’appeler ?)
la semantique (qu’est ce qu’il fait ?)
Cedric Buche (ENIB) POO 28 janvier 2014 121 / 137
Pour aller plus loin Typage
Un typage fort empeche le melange des entites [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 122 / 137
Pour aller plus loin Typage
En pratique ...
1 def e s tPa i r ( nombre ) :
2 i f not i s i n s t a n c e ( nombre , i n t ) :
3 return None
4 return ( nombre % 2) == 0
En python, isinstance(X,type) permet deverifier le type d’un element
Cedric Buche (ENIB) POO 28 janvier 2014 123 / 137
Pour aller plus loin Simultaneite
La simultaneite permet a des objets differents d’agir en meme temps
[Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 124 / 137
Pour aller plus loin Simultaneite
cycleVie()
cycleVie()
cycleVie()
Ordonnanceur d’activites : class MyTimer
Cedric Buche (ENIB) POO 28 janvier 2014 125 / 137
Pour aller plus loin Simultaneite
En pratique . . .
1 import thread ing
2 import time
3
4 class MyTimer :
5 def i n i t ( s e l f , tempo , t a r g e t s = [ ] ) :
6 s e l f . t a r g e t s = t a r g e t s
7 s e l f . tempo = tempo
8
9 def s t a r t ( s e l f ) :
10 s e l f . t ime r = thread ing . Timer ( s e l f . tempo , s e l f . run )
11 s e l f . t ime r . s t a r t ( )
12
13 def stop ( s e l f ) :
14 s e l f . t ime r . cance l ( )
15
16 def run ( s e l f ) :
17 for i in s e l f . t a r g e t s :
18 i . cyc l eV ie ( )
Cedric Buche (ENIB) POO 28 janvier 2014 126 / 137
Pour aller plus loin Simultaneite
En pratique . . .
1 ################################
2 # Programme p r i n c i p a l #
3 ################################
4
5 bots . append ( Animat2D ( ) )
6 bots . append ( Animat2D ( ) )
7
8 a = MyTimer (1 , bots )
9 a . s t a r t ( )
Cedric Buche (ENIB) POO 28 janvier 2014 127 / 137
Pour aller plus loin Persistance
La persistance preserve l’etat et la classe d’un objet a travers le temps
et l’espace [Booch, 1992]
Cedric Buche (ENIB) POO 28 janvier 2014 128 / 137
Pour aller plus loin Persistance
Persistance par serialisation
Sauvegarde de l’etat d’un objet
sauvegarder la valeur des attributs de chaque objet
a partir de ces valeurs, on peut reconstruire l’objet
En python, dict permet de recuperer les va-leurs des attributs d’un objet
Cedric Buche (ENIB) POO 28 janvier 2014 129 / 137
Pour aller plus loin Persistance
En pratique ...
1 class Dummy:
2 def i n i t ( s e l f ) :
3 s e l f . member1=”abcd”
4 s e l f . member2=0
5 s e l f . member3=[ ' a ' , ' e ' , ' i ' , ' o ' , 'u ' ]
6
7
8 d1 = Dummy()
9 print d1 . d i c t
10
11
12
13 ######### Te s t ##############
14 >>> python te s tD i c . py
15 { 'member1 ' : ' abcd ' , 'member3 ' : [ ' a ' , ' e ' , ' i ' , ' o ' , 'u ' ] , 'member2 ' : 0}
Cedric Buche (ENIB) POO 28 janvier 2014 130 / 137
Pour aller plus loin Persistance
En pratique ...
Persistance de toutes les instances de classes derivees d’une classe mere.
1 import she lve
2 import a t e x i t
3 import sys
4
5 donnees = None
6 i n s t anc e s = [ ]
7
8 def c h a r g e o b j e t s ( ) :
9 print ' chargement . . . '
10 g l oba l donnees
11 donnees = she lve . open ( ' ob j e t s . bin ' )
12
13 def sauvegarde ( ) :
14 print ' sauvegarde . . . '
15 g l oba l donnees
16 for i n s tance in i n s t anc e s :
17 donnees [ i n s tance . get Id ( ) ] = in s tance . d i c t
18 i f donnees i s not None :
19 donnees . c l o s e ( )
Cedric Buche (ENIB) POO 28 janvier 2014 131 / 137
Pour aller plus loin Persistance
En pratique ...
1 # ch a r g em e n t d e s o b j e t s
2 c h a r g e o b j e t s ( )
3
4 # s a u v e g a r d e s e r a a p p e l e e a l a f e r m e t u r e du programme
5 a t e x i t . r e g i s t e r ( sauvegarde )
Cedric Buche (ENIB) POO 28 janvier 2014 132 / 137
Pour aller plus loin Persistance
En pratique ...
1 class P e r s i s t e n t :
2
3 def i n i t ( s e l f , id ) :
4 g l oba l donnees
5 i f id in donnees :
6 s e l f . d i c t = donnees [ id ]
7 else :
8 s e l f . i d = id
9 i n s t anc e s . append ( s e l f )
10
11 def get Id ( s e l f ) :
12 return s e l f . i d
13
14
15 class MaClasse ( P e r s i s t e n t ) :
16
17 def i n i t ( s e l f , id , datas = None ) :
18 P e r s i s t e n t . i n i t ( s e l f , id )
19 i f datas i s not None :
20 s e l f . datas = datas
Cedric Buche (ENIB) POO 28 janvier 2014 133 / 137
Pour aller plus loin Persistance
En pratique ...
Utilisation
1
2 # programme p r i n c i p a l
3 in s t ance de = MaClasse ( ' 1 ' )
4 while True :
5 try :
6 i f hasa t t r ( in s tance de , ' datas ' ) :
7 i n s t ance de . datas = raw input ( ' va l eur ( a c t u e l l e :%s ) : ' % ins tance de . datas )
8 else :
9 i n s t ance de . datas = raw input ( ' nouve l l e va l eur : ' )
10
11 except KeyboardInterrupt : # pa r e x emp l e ” C o n t r o l−C”
12 print ' f i n '
13 sys . e x i t (0 )
Cedric Buche (ENIB) POO 28 janvier 2014 134 / 137
Pour aller plus loin Persistance
En pratique ...
Execution
1 >>> python t e s t P e r s i s t a n c e . py
2 chargement . . .
3 nouve l l e va l eur : homer
4 va l eur ( a c t u e l l e : homer ) : f i n
5 sauvegarde . . .
6
7 >>> python t e s t P e r s i s t a n c e . py
8 chargement . . .
9 va l eur ( a c t u e l l e : homer ) : bart
10 va l eur ( a c t u e l l e : bart ) : f i n
11 sauvegarde . . .
12
13
14 >>> python t e s t P e r s i s t a n c e . py
15 chargement . . .
16 va l eur ( a c t u e l l e : bart ) : l i s a
17 va l eur ( a c t u e l l e : l i s a ) : f i n
18 sauvegarde . . .
Cedric Buche (ENIB) POO 28 janvier 2014 135 / 137
Correction : GAIA
References
Booch, G. (1992).
Conception orientee objets et applications.
Addison-Wesley.
Brooks, F. (1987).
No silver bullet - essence and accidents of software engineering.
IEEE Computer, 20(4) :10–19.
Peter, L. (1986).
The peter pyramid.
New York, NY :William Morrow.
Cedric Buche (ENIB) POO 28 janvier 2014 136 / 137
Correction : GAIA
Informatique S4
Programmation Orientee Objet— Concepts —
Cedric Buche
[email protected] www.enib.fr/˜buche
Ecole Nationale d’Ingenieurs de Brest (ENIB)
28 janvier 2014
Cedric Buche (ENIB) POO 28 janvier 2014 137 / 137