Vous êtes sur la page 1sur 164

Informatique S4-POO

Programmation Orientée Objet


— Concepts —

Cédric Buche

École Nationale d’Ingénieurs de Brest (ENIB)

28 janvier 2014

Cédric Buche (ENIB) POO 28 janvier 2014 1 / 137


Avant-propos Objectifs

Objectifs thématiques de POO

Que va m’apprendre POO ?


Le modèle objet :
Objet
Classe
Encapsulation
Collaboration
Héritage
(Abstraction)
(Modularité)
(Persistance)
Modéliser objet
La partie statique du langage UML :
Diag. de cas d’utilisation
Diag. de classes
Modèle d’interaction (Diag. séquence + communication)

Cédric Buche (ENIB) POO 28 janvier 2014 2 / 137


Avant-propos Objectifs

Et la suite ... ?
Cycle Ingénieur ENIB - Tronc commun

Semestre Thème Volume


S5 Prog. par objets (Java) 45h
S6 Prog. par objets (C++) 45h
S6 Modèles pour l’ingénierie des systèmes (UML) 45h
S6 Base de données 22h
S7 Réseaux 90h
S8 Stage en entreprise 45h
S10 Stage en entreprise 45h

Cédric Buche (ENIB) POO 28 janvier 2014 3 / 137


Avant-propos Organisation

Équipe pédagogique 2013

Enseignants-chercheurs
Bosser Anne-Gwen Cours + Labo bosser@enib.fr
Desmeulles Gireg Cours + Labo desmeulles@enib.fr

Cédric Buche (ENIB) POO 28 janvier 2014 4 / 137


Avant-propos Organisation

Planning
Module : Programmation Orientée Objet — POO 2013

Responsable : Cédric Buche (CERV, bureau 30, tel : 02 98 05 89 66, email : buche@enib.fr) S4

Intervenants : C. Buche (cb)

Semaine LABO CTD

37 POO — Justification modèle objet


ctd cb
Semaine LABO CTD
37 POO — Concepts fondateurs
ctd cb 45 UML — Classes
POO — Rappels python
labo cb
38
labo cb 45 UML — Classes
POO — Concepts fondateurs
labo cb
38
labo cb 46 UML — Use Case (diag.)
39 POO — Encapsulation ctd cb
ctd cb 46 UML — Use Case (scénarios)
39 POO — Collaboration et hiérarchie ctd cb
ctd cb
47 UML — Use Case (diag.)
40 POO — Encapsulation labo cb
labo cb
UML — Use Case (scénarios)
47
40 POO — Collaboration et héritage labo cb
labo cb
48 UML — Interactions (com)
41 UML — Généralités ctd cb
ctd cb
48 UML — Interactions (seq)
41 UML — Classes ctd cb
ctd cb
49 UML — Interactions (com)
42 UML — Classes labo cb
labo cb
49 UML — Interactions (seq)
42 UML — Classes labo cb
labo cb 50

UML — Classes 50
43
ctd cb 51
51
43 UML — Classes
ctd cb

44 Vacances
Toussaint

Cédric Buche (ENIB) POO 28 janvier 2014 5 / 137


Avant-propos Évaluation

Types de contrôle

Contrôle d’attention
Contrôle de l’attention sur un cours particulier - QCM
Durée 5-10’
En fin de cours

Contrôle des connaissances


Contrôle des connaissances acquis sur un thème - QCM
Durée 5-10’
En début de labo
Contrôle d’attention + Contrôle des connaissances
→ Note de travail

Cédric Buche (ENIB) POO 28 janvier 2014 6 / 137


Avant-propos Évaluation

Types de contrôle

Contrôle d’attention
Contrôle de l’attention sur un cours particulier - QCM
Durée 5-10’
En fin de cours

Contrôle des connaissances


Contrôle des connaissances acquis sur un thème - QCM
Durée 5-10’
En début de labo
Contrôle d’attention + Contrôle des connaissances
→ Note de travail

Cédric Buche (ENIB) POO 28 janvier 2014 6 / 137


Avant-propos Évaluation

Types de contrôle

Contrôle d’attention
Contrôle de l’attention sur un cours particulier - QCM
Durée 5-10’
En fin de cours

Contrôle des connaissances


Contrôle des connaissances acquis sur un thème - QCM
Durée 5-10’
En début de labo
Contrôle d’attention + Contrôle des connaissances
→ Note de travail

Cédric Buche (ENIB) POO 28 janvier 2014 6 / 137


Avant-propos Évaluation

Exemple de QCM

Informatique Contrôle Continu


Nom/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

Cédric Buche (ENIB) POO 28 janvier 2014 7 / 137


Avant-propos Évaluation

Notation QCM

Note : distance au but

0 : dans le mille ! → objectif atteint


1 : pas mal → objectif en vue
2 : tout juste sur la cible → objectif loingtain
3 : même pas touché → objectif pas atteint

Cédric Buche (ENIB) POO 28 janvier 2014 8 / 137


Avant-propos Évaluation

Notation QCM

Note : distance au but

0 : dans le mille ! → objectif atteint


1 : pas mal → objectif en vue
2 : tout juste sur la cible → objectif loingtain
3 : même pas touché → objectif pas atteint

Cédric Buche (ENIB) POO 28 janvier 2014 8 / 137


Avant-propos Évaluation

DS

Contrôle de synthèse
Contrôle des compétences acquises sur un demi-semestre
Durée 1h20
Concepts objet
UML

Cédric Buche (ENIB) POO 28 janvier 2014 9 / 137


Avant-propos Évaluation

Évaluation des apprentissages

Et si je suis absent ?
à un ”Contrôle d’attention”
→ Je justifie mon abscence (certificat médical)

à un ”Contrôle des connaissances”


→ Je justifie mon abscence (certificat médical)

à un ”Contrôle de synthèse”
→ Je justifie mon abscence (certificat médical)
Rattrapage

Cédric Buche (ENIB) POO 28 janvier 2014 10 / 137


Justification du modèle objet (1 UC)

Plan de la présentation

1 Justification du modèle objet (1 UC)

2 Concepts fondateurs (1 UC)

3 Encapsulation (1 UC)

4 Hiérarchie (1 UC)

5 Collaborations entre objets (1 UC)

6 Pour aller plus loin

Cédric Buche (ENIB) POO 28 janvier 2014 11 / 137


Justification du modèle objet (1 UC)

1 Justification du modèle objet (1 UC)

2 Concepts fondateurs (1 UC)

3 Encapsulation (1 UC)

4 Hiérarchie (1 UC)

5 Collaborations entre objets (1 UC)

6 Pour aller plus loin

Cédric Buche (ENIB) POO 28 janvier 2014 12 / 137


Justification du modèle objet (1 UC)

Cours 1 / Labo 2

Objectifs
Justifier le modèle objet

Notion de classe :
définition
constructeur

Notion d’objet :
instanciation
manipulation

Cédric Buche (ENIB) POO 28 janvier 2014 13 / 137


Justification du modèle objet (1 UC) Complexité

Complexité des problèmes

 La complexité des logiciels est une caractéristique innée et


non propriété accidentelle  [Brooks, 1987]

Cédric Buche (ENIB) POO 28 janvier 2014 14 / 137


Justification du modèle objet (1 UC) Complexité

Difficulté du contrôle du processus de développement

La tâche de l’équipe de développement de logiciel est de donner


l’illusion de la simplicité [Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 15 / 137


Justification du modèle objet (1 UC) Complexité

Conséquences d’une complexité sans limites

 Plus un système est complexe, plus il est susceptible


d’effondrement  [Peter, 1986]

Est ce qu’un entrepreneur songe à ajouter une nouvelle assise à un


immeuble de 100 étages existant ? Ce genre de considérations est
pourtant demandé par certains utilisateurs de logiciels

Cédric Buche (ENIB) POO 28 janvier 2014 16 / 137


Justification du modèle objet (1 UC) Complexité

Qualité du logiciel

Extensibilité :
faculté d’adaptation d’un logiciel aux changements de spécification.
simplicité de la conception
décentralisation

Réutilisabilité :
aptitude d’un logiciel à être réutilisé en tout ou en partie pour de
nouvelles applications.

Ne pas réinventer la roue !

Programmer moins pour programmer mieux !

Cédric Buche (ENIB) POO 28 janvier 2014 17 / 137


Justification du modèle objet (1 UC) Complexité

Qualité du logiciel

Extensibilité :
faculté d’adaptation d’un logiciel aux changements de spécification.
simplicité de la conception
décentralisation

Réutilisabilité :
aptitude d’un logiciel à être réutilisé en tout ou en partie pour de
nouvelles applications.

Ne pas réinventer la roue !

Programmer moins pour programmer mieux !

Cédric Buche (ENIB) POO 28 janvier 2014 17 / 137


Justification du modèle objet (1 UC) Complexité

Qualité du logiciel

Extensibilité :
faculté d’adaptation d’un logiciel aux changements de spécification.
simplicité de la conception
décentralisation

Réutilisabilité :
aptitude d’un logiciel à être réutilisé en tout ou en partie pour de
nouvelles applications.

Ne pas réinventer la roue !

Programmer moins pour programmer mieux !

Cédric Buche (ENIB) POO 28 janvier 2014 17 / 137


Justification du modèle objet (1 UC) Programmation procédurale

Paradigme de programmation procédurale

Programmation procédurale
séparation entre code et données.

Variables (globales)
contiennent vos données
sont utilisées par des fonctions/procédures.

Fonctions
peuvent modifier une variable
peuvent passer cette variable à une autre fonction/procédure.

Cédric Buche (ENIB) POO 28 janvier 2014 18 / 137


Justification du modèle objet (1 UC) Programmation procédurale

Paradigme de programmation procédurale

Programmation procédurale
séparation entre code et données.

Variables (globales)
contiennent vos données
sont utilisées par des fonctions/procédures.

Fonctions
peuvent modifier une variable
peuvent passer cette variable à une autre fonction/procédure.

Cédric Buche (ENIB) POO 28 janvier 2014 18 / 137


Justification du modèle objet (1 UC) Programmation procédurale

Paradigme de programmation procédurale

Programmation procédurale
séparation entre code et données.

Variables (globales)
contiennent vos données
sont utilisées par des fonctions/procédures.

Fonctions
peuvent modifier une variable
peuvent passer cette variable à une autre fonction/procédure.

Cédric Buche (ENIB) POO 28 janvier 2014 18 / 137


Justification du modèle objet (1 UC) Programmation procédurale

Exemple

Dans une entreprise située à Biarritz,


Robert (num de secu 10573123456),
est employé sur un poste de technicien

1 ###########################################
2 # Version 1
3 # variables globales
4 ###########################################
5
6 num secu robert = 10573123456
7 nom robert = ” Robert ”
8 qualification robert = ” Technicien ”
9 lieu de travail robert = ” Biarritz ”

Cédric Buche (ENIB) POO 28 janvier 2014 19 / 137


Justification du modèle objet (1 UC) Programmation procédurale

Limites de la programmation procédurale : Exemple

Ajout d’un employé bernard

1 # robert
2 num secu robert = 10573123456
3 nom robert = ” Robert ”
4 qualification robert = ” Technicien ”
5 lieu de travail robert = ” Biarritz ”
6
7 # bernard
8 num secu bernard = 2881111001
9 nom be rnard = ” Bernard ”
10 qualification bernard = ” Ingenieur ”
11 lieu de travail bernard = ” Biarritz ”
12
13 # ...

Cédric Buche (ENIB) POO 28 janvier 2014 20 / 137


Justification du modèle objet (1 UC) Programmation procédurale

Limites de la programmation procédurale

1 ###########################################
2 # Version 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 t a b r o b e r t =[10573123456 ,
7 ” robert ” ,
8 ” Technicien ” ,
9 ” Biarritz ” ]
10 tab mickey =[14456464443 ,
11 ” mickey ” ,
12 ” Ingenieur ” ,
13 ” Brest ” ]
14 tab = [ ]
15 t a b . append ( t a b r o b e r t )
16 t a b . append ( t a b m i c k e y )
17 print tab [ 0 ] [ 0 ] # num s e c u robert

Cédric Buche (ENIB) POO 28 janvier 2014 21 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet

Définition de la structure de donnée par la notion de classe

1 ###########################################
2 # Version 3
3 # s t r u c t u r a t i o n des donnees
4 ###########################################
5
6 c l a s s Employe :
7 num secu
8 nom
9 qualification
10 Lieu de travail

Cédric Buche (ENIB) POO 28 janvier 2014 22 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet : classe

Classe
déclare les propriétés communes d’un ensemble d’objets

Exemple
La classe Voiture possède les propriétés suivantes (les attributs) :
couleur
puissance

Cédric Buche (ENIB) POO 28 janvier 2014 23 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet : classe

Classe
déclare les propriétés communes d’un ensemble d’objets

Exemple
La classe Voiture possède les propriétés suivantes (les attributs) :
couleur
puissance

Cédric Buche (ENIB) POO 28 janvier 2014 23 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet : objets

Classe → Objets
usine à partir de laquelle il est possible de créer 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

Cédric Buche (ENIB) POO 28 janvier 2014 24 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet : objets

Classe → Objets
usine à partir de laquelle il est possible de créer 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

Cédric Buche (ENIB) POO 28 janvier 2014 24 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

En pratique ...

Mise en place d’objets concrets (instances de classe)

1 # robert
2 e 1=Employe ( ) # o b j e t e1 : i n s t a n c e de la classe Employe
3 e 1 . num secu = 10573123456
4 e 1 . nom = ” Robert ”
5 e1 . q u a l i f i c a t i o n = ” Technicien ”
6 e1 . L i e u d e t r a v a i l = ” Biarritz ”
7
8 print ( e 1 . num secu ,
9 e 1 . 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 # mickey
14 e 2=Employe ( ) # o b j e t e2 : i n s t a n c e de la classe Employe
15 e 2 . num secu = 14456464443
16 e 2 . 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 ”

Cédric Buche (ENIB) POO 28 janvier 2014 25 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

En pratique ...

1 # norbert
2 e 3=Employe ( )
3
4 print ( e 3 . num secu , # ERREUR
5 e 3 . 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 )

Cédric Buche (ENIB) POO 28 janvier 2014 26 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet : Le constructeur

Constructeur
les attributs doivent êtres initialisées avec une valeur  par
défaut 
appel à une fonction particulière : le constructeur

Cédric Buche (ENIB) POO 28 janvier 2014 27 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

En pratique ...

1
2 c l a s s Employe :
3 def init ( self ): # Constructeur de la classe Employe
4 s e l f . num secu = 000000000
5 s e l f . nom = ” no name ”
6 self . qualification = ” novice ”
7 self . Lieu de travail = ” Paris ”

En python, le premier argument du constructeur


est toujours self

Cédric Buche (ENIB) POO 28 janvier 2014 28 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

En pratique ...

1 # norbert
2 e 3=Employe ( ) # creation de e3 : appel implicite de init de Employe
3
4 print ( e 3 . num secu , # OK !!!
5 e 3 . 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 )

Cédric Buche (ENIB) POO 28 janvier 2014 29 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

En pratique ...

1
2 c l a s s Employe :
3 def init ( self ,
4 le num secu ,
5 le nom ,
6 la qualification ,
7 le Lieu de travail ):
8
9 self . num secu = le num secu
10 self . nom = le nom
11 self . qualification = la qualification
12 self . Lieu de travail = le Lieu de travail

Cédric Buche (ENIB) POO 28 janvier 2014 30 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

En pratique ...

En python,
→ init appelée implicitement à la création d’un
objet
→ le constructeur peut posséder plusieurs arguments
(en plus de self )

Cédric Buche (ENIB) POO 28 janvier 2014 31 / 137


Justification du modèle objet (1 UC) Vers la Programmation Orientée Objet (POO)

Vers la programmation orientée objet : Le constructeur

1
2 c l a s s Employe :
3 def init ( self ,
4 le num secu = 000000000 ,
5 le nom = ” no name ” ,
6 la qualification = ” novice ” ,
7 le Lieu de travail = ” Paris ” ) :
8
9 self . num secu = le num secu
10 self . nom = le nom
11 self . qualification = la qualification
12 self . Lieu de travail = le Lieu de travail
13
14
15 ############## P r o g r a m m e P r i n c i p a l #############
16
17 e 1 = Employe ( l e L i e u d e t r a v a i l = ” Brest ” )

Cédric Buche (ENIB) POO 28 janvier 2014 32 / 137


Concepts fondateurs (1 UC)

Plan de la présentation

1 Justification du modèle objet (1 UC)

2 Concepts fondateurs (1 UC)

3 Encapsulation (1 UC)

4 Hiérarchie (1 UC)

5 Collaborations entre objets (1 UC)

6 Pour aller plus loin

Cédric Buche (ENIB) POO 28 janvier 2014 33 / 137


Concepts fondateurs (1 UC)

Cours 2 / Labo 2

Objectifs
Classe :
Attributs
Méthodes
Constructeur / destructeur
Objet :
État
Comportement
Identité

Cédric Buche (ENIB) POO 28 janvier 2014 34 / 137


Concepts fondateurs (1 UC)

Cours 2 / Labo 2

Objectifs
Classe :
Attributs
Méthodes
Constructeur / destructeur
Objet :
État
Comportement
Identité

Cédric 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 à créer des objets,
pourquoi créer une classe ?
pour créer un objet, il faut d’abord créer une classe !
exemple : pour construire une maison,
besoin d’un plan d’architecte
→ classe = plan,
→ l’objet = maison.
→ ”Créer une classe”, c’est dessiner les plans de l’objet.

Cédric Buche (ENIB) POO 28 janvier 2014 35 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?

Une classe représente un ensemble d’objets qui partagent une structure


commmune et un comportement commun [Booch, 1992]
Cédric 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 la


même structure et les mêmes comportements.

Une classe est une sorte de moule à partir duquel sont générés les
objets.

génération
Une classe −−−−−−−−→ des objets

Cédric 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 la


même structure et les mêmes comportements.

Une classe est une sorte de moule à partir duquel sont générés les
objets.

génération
Une classe −−−−−−−−→ des objets

Cédric Buche (ENIB) POO 28 janvier 2014 37 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?

Les classes

Une classe est constituée :


1 d’un ensemble de variables (ou attributs) qui décrivent la structure
des objets ;
2 d’un ensemble de fonctions (ou méthodes)
qui sont applicables aux objets, et qui décrivent leur comportement.

attributs : variables contenues dans la classe,


on parle aussi de ”variables membres”

méthodes : fonctions contenues dans la classe,


on parle aussi de ”fonctions membres”
ou de compétences
ou de services

Cédric Buche (ENIB) POO 28 janvier 2014 38 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’une classe ?

Les classes

Une classe est constituée :


1 d’un ensemble de variables (ou attributs) qui décrivent la structure
des objets ;
2 d’un ensemble de fonctions (ou méthodes)
qui sont applicables aux objets, et qui décrivent leur comportement.

attributs : variables contenues dans la classe,


on parle aussi de ”variables membres”

méthodes : fonctions contenues dans la classe,


on parle aussi de ”fonctions membres”
ou de compétences
ou de services

Cédric Buche (ENIB) POO 28 janvier 2014 38 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Classe — Objets

1 Classe
Abstraction
Définit une infinité d’objets instances

2 Objet = état + comportement + identité


Attributs
Méthodes
Identité

On dit qu’un objet est une instance d’une classe

Cédric Buche (ENIB) POO 28 janvier 2014 39 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Classe — Objets

1 Classe
Abstraction
Définit une infinité d’objets instances

2 Objet = état + comportement + identité


Attributs
Méthodes
Identité

On dit qu’un objet est une instance d’une classe

Cédric Buche (ENIB) POO 28 janvier 2014 39 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Classe — Objets

1 Classe
Abstraction
Définit une infinité d’objets instances

2 Objet = état + comportement + identité


Attributs
Méthodes
Identité

On dit qu’un objet est une instance d’une classe

Cédric Buche (ENIB) POO 28 janvier 2014 39 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

État

État d’un objet


regroupe les valeurs instantanées de tous ses attributs
évolue au cours du temps
est la conséquence de ses comportements passés

Cédric Buche (ENIB) POO 28 janvier 2014 40 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

État ... En pratique

1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def init ( s e l f , v1=” nomarque ” , v2=” n o c o l o r ” , v3 = 0 ) :
4 s e l f . marque = v1
5 s e l f . c o u l e u r = v2
6 s e l f . r e s e r v e E s s e n c e = v3
7
8 ### O b j e t #####
9 homer mobile = Voiture ( )
10
11 ## E t a t
12 h o m e r m o b i l e . marque = ” pipo ”
13 homer mobile . c o u l e u r = ” rose ”
14 h o m e r m o b i l e . r e s e r v e E s s e n c e = 30

Cédric Buche (ENIB) POO 28 janvier 2014 41 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Attributs et variables

les attributs caractérisent l’état des instances d’une classe. Ils


participent à la modélisation du problème.
les variables sont des mémoires locales à des méthodes. Elles sont
là pour faciliter la gestion du traitement.
l’accès aux variables est limité au bloc où elles sont déclarées :
règle de portée

Cédric Buche (ENIB) POO 28 janvier 2014 42 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Attributs et variables

les attributs caractérisent l’état des instances d’une classe. Ils


participent à la modélisation du problème.
les variables sont des mémoires locales à des méthodes. Elles sont
là pour faciliter la gestion du traitement.
l’accès aux variables est limité au bloc où elles sont déclarées :
règle de portée

Cédric Buche (ENIB) POO 28 janvier 2014 42 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Attributs et variables

les attributs caractérisent l’état des instances d’une classe. Ils


participent à la modélisation du problème.
les variables sont des mémoires locales à des méthodes. Elles sont
là pour faciliter la gestion du traitement.
l’accès aux variables est limité au bloc où elles sont déclarées :
règle de portée

Cédric 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 compétences
décrit les actions et les réactions d’un objet
→ se représente sous la forme de méthodes
(appelées parfois fonctions membres)

Pour un objet ”homer mobile”

démarrer
arrêter
freiner
...

Cédric 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 compétences
décrit les actions et les réactions d’un objet
→ se représente sous la forme de méthodes
(appelées parfois fonctions membres)

Pour un objet ”homer mobile”

démarrer
arrêter
freiner
...

Cédric 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 init ( s e l f , v1=” nomarque ” , v2=” n o c o l o r ” , v3 = 0 ) :
4 s e l f . marque = v1
5 s e l f . c o u l e u r = v2
6 s e l f . r e s e r v e E s s e n c e = v3
7
8 def d e m a r r e r ( s e l f ) :
9 p r i n t ” 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 ### O b j e t #####
14 homer mobile = Voiture ( )
15
16 ## C o m p o r t e m e n t
17 homer mobile . demarrer ( )
18 homer mobile . a r r e t e r ( )

Cédric Buche (ENIB) POO 28 janvier 2014 44 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Comportement — État

L’état et le comportement sont liés

homer mobile.démarrer()

ne marchera pas si

homer mobile.reserveEssence
== 0

Cédric Buche (ENIB) POO 28 janvier 2014 45 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Comportement — État

1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def init ( s e l f , v1=” nomarque ” , v2=” n o c o l o r ” , v3 = 0 ) :
4 s e l f . marque = v1
5 s e l f . c o u l e u r = v2
6 s e l f . r e s e r v e E s s e n c e = v3
7
8 def d e m a r r e r ( s e l f ) :
9 i f s e l f . reserveEssence > 0 :
10 p r i n t ” j e demarre ”
11 else :
12 p r i n t ” j e ne peux p a s d e m a r r e r ”

Cédric Buche (ENIB) POO 28 janvier 2014 46 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

État : évolution

Pour l’objet ”homer mobile”

marque : pipo
couleur : rose
réserve d’essence :
30l

Après 100 kms . . .

marque : pipo
couleur : rose
réserve d’essence :
25l

Cédric Buche (ENIB) POO 28 janvier 2014 47 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

État : évolution

Pour l’objet ”homer mobile”

marque : pipo
couleur : rose
réserve d’essence :
30l

Après 100 kms . . .

marque : pipo
couleur : rose
réserve d’essence :
25l

Cédric Buche (ENIB) POO 28 janvier 2014 47 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

État : évolution

1 #### d e f i n i t i o n c l a s s e ######
2 class Voiture :
3 def init ( s e l f , v1=” nomarque ” , v2=” n o c o l o r ” , v3 = 0 ) :
4 s e l f . marque = v1
5 s e l f . c o u l e u r = v2
6 s e l f . r e s e r v e E s s e n c e = v3
7
8 def d e m a r r e r ( s e l f ) :
9 i f s e l f . reserveEssence > 0 :
10 p r i n t ” j e demarre ”
11 else :
12 p r i n t ” j e ne peux p a s d e m a r r e r ”
13
14 def r o u l e r ( s e l f , nbKm ) :
15 s e l f . r e s e r v e E s s e n c e = s e l f . r e s e r v e E s s e n c e − 5 *nbKm/ 1 0 0 ;
16
17
18 ####
19 homer mobile = Voiture ( )
20 homer m o b i l e . r e s e r v e E s s e n c e = 30
21 homer mobile . demarrer ( )
22 homer mobile . r o u l e r (100)
23 print homer mobile . r e s e r v e E s s e n c e

Cédric Buche (ENIB) POO 28 janvier 2014 48 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Identité

L’identité
est propre à l’objet et le caractérise
permet de distinguer tout objet indépendamment de son état

Voiture.1

Voiture.2

Cédric Buche (ENIB) POO 28 janvier 2014 49 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Identité

L’identité
est propre à l’objet et le caractérise
permet de distinguer tout objet indépendamment de son état

Voiture.1

Voiture.2

Cédric Buche (ENIB) POO 28 janvier 2014 49 / 137


Concepts fondateurs (1 UC) Qu’est ce qu’un objet ?

Identité

→ nommer chaque objet


(ex. attribut ”name”)
print homer mobile.name

Voiture.1
0xb7d4e0ec
→ leur référence
print homer mobile
Voiture.2
0xb7d53eec

Cédric 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 :
même structures de données (attributs)
même comportement (méthodes)
→ Il faut les décrire de façon abstraite : une classe

Cédric Buche (ENIB) POO 28 janvier 2014 51 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Construction

A la déclaration d’un objet, les attributs ne sont pas initialisés.


Cette phase d’initialisation des attributs est effectuée par une
méthode particuliére : le constructeur.
Le constructeur est appelé lors de la construction de l’objet.
Une classe peut définir son(ses) constructeur(s) avec des
paramétres différents

Cédric Buche (ENIB) POO 28 janvier 2014 52 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Construction

A la déclaration d’un objet, les attributs ne sont pas initialisés.


Cette phase d’initialisation des attributs est effectuée par une
méthode particuliére : le constructeur.
Le constructeur est appelé lors de la construction de l’objet.
Une classe peut définir son(ses) constructeur(s) avec des
paramétres différents

Cédric Buche (ENIB) POO 28 janvier 2014 52 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Construction

A la déclaration d’un objet, les attributs ne sont pas initialisés.


Cette phase d’initialisation des attributs est effectuée par une
méthode particuliére : le constructeur.
Le constructeur est appelé lors de la construction de l’objet.
Une classe peut définir son(ses) constructeur(s) avec des
paramétres différents

Cédric Buche (ENIB) POO 28 janvier 2014 52 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Construction

A la déclaration d’un objet, les attributs ne sont pas initialisés.


Cette phase d’initialisation des attributs est effectuée par une
méthode particuliére : le constructeur.
Le constructeur est appelé lors de la construction de l’objet.
Une classe peut définir son(ses) constructeur(s) avec des
paramétres différents

Cédric Buche (ENIB) POO 28 janvier 2014 52 / 137


Concepts fondateurs (1 UC) Vie d’un objet

En pratique ...

1
2 c l a s s Complexe :
3 def init ( s e l f , r =0.0 , i =0.0):
4 self . reel = r
5 s e l f . img = i
6
7
8
9 ####### P r o g r a m m e p r i n c i p a l ########
10 c 1 = Complexe ( )
11 c 2 = Complexe ( 0 . 5 )
12 c 3 = Complexe ( 0 . 5 , 0 . 2 )
13 c 4 = Complexe ( i = 0 . 2 )

Cédric Buche (ENIB) POO 28 janvier 2014 53 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Destruction

Méthode spéciale appelée lors de la suppression d’une instance : le


destructeur de la classe
Objectif : détruire tous les objets crées par l’objet courant au
cours de son existence

En python,
→ la définition d’un destructeur n’est pas obli-
gatoire

Cédric Buche (ENIB) POO 28 janvier 2014 54 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Destruction

Méthode spéciale appelée lors de la suppression d’une instance : le


destructeur de la classe
Objectif : détruire tous les objets crées par l’objet courant au
cours de son existence

En python,
→ la définition d’un destructeur n’est pas obli-
gatoire

Cédric Buche (ENIB) POO 28 janvier 2014 54 / 137


Concepts fondateurs (1 UC) Vie d’un objet

Destruction

Méthode spéciale appelée lors de la suppression d’une instance : le


destructeur de la classe
Objectif : détruire tous les objets crées par l’objet courant au
cours de son existence

En python,
→ la définition d’un destructeur n’est pas obli-
gatoire

Cédric Buche (ENIB) POO 28 janvier 2014 54 / 137


Concepts fondateurs (1 UC) Vie d’un objet

En pratique ...

1
2 c l a s s Complexe :
3 def del ( self ):
4 p r i n t ” I 'm d y i n g ! ”

En python,
→ del appelée implicitement à la destruction d’un
objet

Cédric 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’exécute en tâche de fond
afin de supprimer la mémoire associée à un objet
→ le ramasse miettes ou ”garbage collector”

Cédric Buche (ENIB) POO 28 janvier 2014 56 / 137


Concepts fondateurs (1 UC) Vie d’un objet

En pratique ...

1 c l a s s Test :
2 def del ( self ):
3 p r i n t ” I am d y i n g ”
4
5
6
7 >>> t 1 = T e s t ( ) # une i n s t a n c e de Test e s t c r e e
8 >>> t 1 = None # t1 ne permet 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 d y i n g # e l l e est s u s c e p t i b l e d ' e t r e d e t r u i t e ce qui
10 >>> # a r r i v e instantanement i c i mais n ' e s t pas g a r a n t i

Cédric Buche (ENIB) POO 28 janvier 2014 57 / 137


Encapsulation (1 UC)

Plan de la présentation

1 Justification du modèle objet (1 UC)

2 Concepts fondateurs (1 UC)

3 Encapsulation (1 UC)

4 Hiérarchie (1 UC)

5 Collaborations entre objets (1 UC)

6 Pour aller plus loin

Cédric Buche (ENIB) POO 28 janvier 2014 58 / 137


Encapsulation (1 UC)

Cours 3 / Labo 3

Objectifs
Encapsulation
Régles d’encapsulation

Cédric Buche (ENIB) POO 28 janvier 2014 59 / 137


Encapsulation (1 UC) Principes

L’encapsulation occulte les détails de l’implémentation d’un objet


[Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 60 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés : illustration

Gestion de compte en banque


classe Compte
avec un attribut solde

1 c l a s s Compte :
2 def init ( self ):
3 s e l f . solde = 0 # solde nul
4
5 def affiche ( self ):
6 p r i n t ” Le s o l d e de v o t r e compte e s t de ” s e l f . solde
7
8
9 ######## P r o g r a m m e p r i n c i p a l #######
10 c = Compte ( )
11 c . affiche () # pourquoi pas
12 c . s o l d e = 1000000 # ben t i e n s !

Cédric Buche (ENIB) POO 28 janvier 2014 61 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés

Lors de la définition d’une classe il est possible de restreindre voire


d’interdire l’accès (aux objets des autres classes) à des attributs ou
méthodes des instances de cette classe.

Cédric Buche (ENIB) POO 28 janvier 2014 62 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés

Modificateurs d’accès lors de la déclaration d’attributs ou


méthodes :
privée accessible uniquement depuis des instances de la classe
public accessible par tout le monde
(ie. tous ceux qui possèdent une référence sur l’objet)

→ Rendre solde privé

Cédric Buche (ENIB) POO 28 janvier 2014 63 / 137


Encapsulation (1 UC) Principes

En pratique ...

1 c l a s s Test :
2
3 def init ( s e l f , laValeurPublic , laValeurPrivee ) :
4 s e l f . valeurPublic = laValeurPublic
5 self . valeurPrivee = laValeurPrivee
6
7
8 def f 1 ( s e l f ) :
9 ...
10 def f2 ( self ):
11 ...
12
13
14 ######## P r o g r a m m e p r i n c i p a l ########
15 t1 = Test ( )
16
17 print t1 . v a l e u r P u b l i c # OK
18 print t1 . valeurPrivee # ERREUR
19
20 t1 . f1 ( ) # OK
21 t1 . f2 () # ERREUR

Cédric Buche (ENIB) POO 28 janvier 2014 64 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés

Le programmeur créateur peut modifier le comportement sans impact :


contrôle lors de la modification

1 def d e b i t ( s e l f , laValeur ) :
2
3 if self . s o l d e − laValeur > 0 :
4 self . solde = self . s o l d e − laValeur
5 else :
6 p r i n t ( ”Compte b l o q u e ! ! ! ”)

En python,
→ le préfixe ” ” rend privé un attribut ou une
méthode

Cédric Buche (ENIB) POO 28 janvier 2014 65 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés : intérêt

1 protéger
→ ne pas permettre l’accès à tout dès que l’on a une référence de
l’objet

2 masquer l’implémentation
→ toute la décomposition du problème n’a besoin d’être connue
du programmeur client

3 évolutivité
→ possibilité de modifier tout ce qui n’est pas public sans impact
pour le programmeur client

Cédric Buche (ENIB) POO 28 janvier 2014 66 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés : intérêt

1 protéger
→ ne pas permettre l’accès à tout dès que l’on a une référence de
l’objet

2 masquer l’implémentation
→ toute la décomposition du problème n’a besoin d’être connue
du programmeur client

3 évolutivité
→ possibilité de modifier tout ce qui n’est pas public sans impact
pour le programmeur client

Cédric Buche (ENIB) POO 28 janvier 2014 66 / 137


Encapsulation (1 UC) Principes

Contrôle d’accés : intérêt

1 protéger
→ ne pas permettre l’accès à tout dès que l’on a une référence de
l’objet

2 masquer l’implémentation
→ toute la décomposition du problème n’a besoin d’être connue
du programmeur client

3 évolutivité
→ possibilité de modifier tout ce qui n’est pas public sans impact
pour le programmeur client

Cédric Buche (ENIB) POO 28 janvier 2014 66 / 137


Encapsulation (1 UC) Régles d’encapsulation

Régles

Régles à respecter
1 Rendre privés les attributs caractérisant l’état de l’objet

2 Fournir des méthodes publiques permettant de accéder/modifier

l’attribut
accesseurs
mutateurs

Cédric Buche (ENIB) POO 28 janvier 2014 67 / 137


Encapsulation (1 UC) Mise en application

1 - Définir les classes

1 ################################
2 # Programme Python #
3 # Auteur : . . . . . #
4 # Date c r e a t i o n : . . . #
5 ################################
6
7 c l a s s X:
8
9 # −−− D o c u m e n t a t i o n −−−
10
11
12 # −−− C o n s t r u c t e u r et d e s t r u c t e u r −−−
13
14 # −−− M e t h o d e s p u b l i q u e s : Acces aux a t t r i b u t s −−−
15 # accesseurs
16 # mutateurs
17
18 # −−− M e t h o d e s publiques : O p e r a t i o n s −−−
19
20 # −−− M e t h o d e s p r i v e e s −−−

Cédric Buche (ENIB) POO 28 janvier 2014 68 / 137


Encapsulation (1 UC) Mise en application

1 - Définir les classes

Documentation
Conception :
décrire la classe et ses fonctionnalités
Debuggage :
debrayer des parties de code, marquer des points douteux, signer un
correctif
Maintenance :
décrire les corrections/ajouts/retraits et les signer
→ Indispensable dans un code
description, pas des ”faut que j’aille prendre un café” . . .

Cédric Buche (ENIB) POO 28 janvier 2014 69 / 137


Encapsulation (1 UC) Mise en application

1 - Définir les classes

Constructeur et destructeur
Constructeur
Définir l’état initial de l’objet
→ Initialisation des attributs définis dans la classe
Créer les objets dont l’existence est liée à celle de l’objet
Types de constructeur
par défaut, par recopie . . .

Destructeur
Détruire tous les objets créés par l’objet courant au cours de son
existence

Cédric Buche (ENIB) POO 28 janvier 2014 70 / 137


Encapsulation (1 UC) Mise en application

1 - Définir les classes

Accés aux attributs : getAttrName et setAttrName


Objectifs
Maintien de l’intégrité
Limitation des effets de bord
Comment ?
Attribut : toujours un membre privé
getAttrName et setAttrName : en fonction des contraintes
d’intégrité
Exemples
Taille d’une Liste
Dimensions d’un Rectangle et d’un Carré

Cédric Buche (ENIB) POO 28 janvier 2014 71 / 137


Encapsulation (1 UC) Mise en application

1 - Définir les classes


1 c l a s s Temperature :
2 ”””
3 La c l a s s e T e m p e r a t u r e r e p r e s e n t e u n e g r a n d e u r physique liee
4 a l a n o t i o n i m m e d i at 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 init ( s el f , laValeur = 0):
8 self . valeur = laValeur
9
10 def del ( self ):
11 print ” d e s t r u c t i o n ”
12
13 # −−− M e t h o d e s p u b l i q u e s : A c c e s aux attributs
14 # accesseurs
15 def g e t V a l e u r ( s e l f ) :
16 return s e l f . valeur
17 # mutateurs
18 def s e t V a l e u r ( s e l f , v a l u e ) :
19 self . v a l e u r = value
20
21 # −−− M e t h o d e s p u b l i q u e s : O p e r a t i o n s
22 def g e t V a l e u r C ( s e l f ) :
23 return s e l f . v a l e u r − 273.16
24
25 def g e t V a l e u r F ( s e l f ) :
26 return 1 . 8 * s e l f . g e t V a l e u r C ( ) + 32

Cédric Buche (ENIB) POO 28 janvier 2014 72 / 137


Encapsulation (1 UC) Mise en application

2 - Instancier des objets et les utiliser

1 # Exemple d ' utilisation de cette classe


2
3 eauChaude = Temperature ( 3 1 0 )
4 p r i n t eauChaude . g e t V a l e u r C ( )
5 p r i n t eauChaude . g e t V a l e u r F ( )
6
7 e a u F r o i d e = Temperature ( 5 )
8 print eauFroide . getValeurC ( )
9 print eauFroide . getValeurF ( )

Cédric Buche (ENIB) POO 28 janvier 2014 73 / 137


Encapsulation (1 UC) Intérêt

Intérêt
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 init ( s el f , laValeur = 0):
7 self . l a r g e u r = laValeur
8
9 # −−− M e t h o d e s p u b l i q u e s : A c c e s aux attributs
10 # accesseurs
11 def g e t L a r g e u r ( s e l f ) :
12 return s e l f . largeur
13 # mutateurs
14 def s e t L a r g e u r ( s e l f , v a l u e ) :
15 self . l a r g e u r = value
16
17 # −−− M e t h o d e s p u b l i q u e s : Operations
18 def m e t t r e A J o u r ( s e l f ) :
19 ...
20
21 ####### O b j e t ########
22 vehicule1 = Voiture ( ) ;
23 vehicule1 . setLargeur (100) # L a r g e u r de l a v o i t u r e
24 v e h i c u l e 1 . mettreAJour ( ) # Mettons a jo u r l ' a f f i c h a g e
25 vehicule1 . setLargeur (150) # Changeons l a l a r g e u r de l a voiture
26 v e h i c u l e 1 . mettreAJour ( ) # Mettons a jo u r l ' a f f i c h a g e

Cédric Buche (ENIB) POO 28 janvier 2014 74 / 137


Encapsulation (1 UC) Intérêt

Intérêt

1 def s e t L a r g e u r ( s e l f , v a l u e ) :
2 self . l a r g e u r = value
3 s e l f . mettreAJour ( )
4
5 ####### O b j e t ###################
6 vehicule1 = Voiture ( ) ;
7 vehicule1 . setLargeur (100) # L a 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 automatiquement mis a j o u r dans l ' accesseur
9 vehicule1 . setLargeur (150) # Changeons l a l a r g e u r de l a voiture
10 # Encore 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 !

Cédric Buche (ENIB) POO 28 janvier 2014 75 / 137


Encapsulation (1 UC) Intérêt

Intérêt

1 vehicule1 = Voiture ( ) ;
2 vehicule1 . setLargeur (100) # L a r g e u r de l a v o i t u r e
3 # On v e r i f i e q u e l a l a r g e u r e s t d a n s l e s l i m i t e s
4 i f v e h i c u l e 1 . g e t L a r g e u r ( ) < 100 : vehicule1 . setLargeur (100)
5 e l s e i f v e h i c u l e 1 . g e t L a r g e u r ( ) > 200 : v e h i c u l e 1 . s e t L a r g e u r ( 2 0 0 )
6 print v e h i c u l e 1 . g e t L a r g e u r ( ) # A f f i c h e : 1 0 0
7
8 vehicule1 . setLargeur (250) # Changeons l a l a r g e u r de l a v o i t u r e
9 i f v e h i c u l e 1 . g e t L a r g e u r ( ) < 100 : vehicule1 . setLargeur (100)
10 e l s e i f v e h i c u l e 1 . g e t L a r g e u r ( ) > 200 : v e h i c u l e 1 . s e t L a r g e u r ( 2 0 0 )
11 print v e h i c u l e 1 . g e t L a r g e u r ( ) # A f f i c h e : 2 0 0

Cédric Buche (ENIB) POO 28 janvier 2014 76 / 137


Encapsulation (1 UC) Intérêt

Intérêt

1 def s e t L a r g e u r ( s e l f , v a l u e ) :
2 self . 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 o m p r i s e e n t r e 100 et 200
5 i f ( s e l f . getLargeur ( ) < 100) : self . 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 ### O b j e t
11 vehicule1 = Voiture ( ) ;
12 vehicule1 . setLargeur (100) # L a 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 dans les limites , l ' accesseur le
14 print v e h i c u l e 1 . g e t L a r g e u r ( ) # A f f i c h e : 100
15
16 vehicule1 . setLargeur (250); # Changeons l a l a r g e u r de la voiture
17 print v e h i c u l e 1 . g e t L a r g e u r ( ) # A f f i c h e : 200

Cédric Buche (ENIB) POO 28 janvier 2014 77 / 137


Hiérarchie (1 UC)

Plan de la présentation

1 Justification du modèle objet (1 UC)

2 Concepts fondateurs (1 UC)

3 Encapsulation (1 UC)

4 Hiérarchie (1 UC)

5 Collaborations entre objets (1 UC)

6 Pour aller plus loin

Cédric Buche (ENIB) POO 28 janvier 2014 78 / 137


Hiérarchie (1 UC) Hiérarchie

Les entités constituent une hiérarchie [Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 79 / 137


Hiérarchie (1 UC) Hiérarchie

Héritage

Une sous-classe peut hériter de la structure et du comportement de sa


superclasse (classe mère) [Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 80 / 137


Hiérarchie (1 UC) Hiérarchie

Héritage

Exemple : Fichier
Il existe plusieurs sortes de fichier :
fichier binaire → FichierBinaire
fichier ASCII → FichierASCII

→ Certaines propriétés sont générales à toutes les classes


→ nom, taille
→ Certaines sont spécifiques à une classe ou un groupe de classes
spécialisées
→ executer, imprimer

Cédric Buche (ENIB) POO 28 janvier 2014 81 / 137


Hiérarchie (1 UC) Hiérarchie

Héritage

La relation d’héritage
Principe
les caractéristiques des classes supérieures sont héritées par les
classes inférieures.

Mise en œuvre
les connaissances les plus générales sont mises en commun dans des
classes qui sont ensuite spécialisées par définitions de sous–classes
successives contenant des connaissances de plus en plus spécifiques.

Cédric Buche (ENIB) POO 28 janvier 2014 82 / 137


Hiérarchie (1 UC) Hiérarchie

Spécialisation
La spécialisation d’une classe peut être réalisée selon deux techniques :
1 l’enrichissement : la sous–classe est dotée de nouvelle(s)
méthode(s) et/ou de nouveau(x) attribut(s) ;
2 la surcharge : une (ou plusieurs) méthode et/ou un attribut hérité
est redéfini.

Cédric Buche (ENIB) POO 28 janvier 2014 83 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

Enrichissement (ajout d’une méthode)


1 ###################################
2 ######### c l a s s F i c h i e r ##########
3
4 class Fichier :
5 ””” D e f i n i t i o n classe F i c h i e r ””” # Documentation
6
7 def init ( self ): # Constructeur
8 p r i n t ” c r e a t i o n 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 FichierBinaire ( Fichier ):
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 ””” # Documentation
16
17 def init ( self ): # Constructeur
18 Fichier . init ( self )
19
20 def i m p r i m e r ( s e l f ) # Enrichissement

Cédric Buche (ENIB) POO 28 janvier 2014 84 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

Enrichissement (ajout d’un attribut)


1 ###################################
2 ######### c l a s s F i c h i e r ##########
3
4 class Fichier :
5 ””” D e f i n i t i o n classe F i c h i e r ””” # Documentation
6
7 def init ( self ): # Constructeur
8 p r i n t ” c r e a t i o n 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 FichierBinaire ( Fichier ):
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 ””” # Documentation
16
17 def init ( self ): # Constructeur
18 Fichier . init ( self )
19 self . c o d a g e =32 # Enrichissement

Cédric Buche (ENIB) POO 28 janvier 2014 85 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

Surcharge d’un attribut


1 ###################################
2 ######### c l a s s F i c h i e r ##########
3
4 class Fichier :
5 def init ( self ): # Constructeur
6 s e l f . nom = ” f i c h i e r s a n s n o m ”
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 FichierBinaire ( Fichier ):
13
14 def init ( self ): # Constructeur
15 Fichier . init ( self )
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 ” # S u r c h a r g e de l ' attribut ” no

Cédric Buche (ENIB) POO 28 janvier 2014 86 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

Surcharge d’une méthode


1 ###################################
2 ######### c l a s s F i c h i e r ##########
3 class Fichier :
4
5 def init ( self ): # Constructeur
6 p r i n t ” c r e a t i o n d ' un f i c h i e r ”
7
8 def o u v r i r ( s e l f ) :
9 print ” o u v r i r fichier”
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 FichierBinaire ( Fichier ) :
15
16 def init ( self ): # Constructeur
17 Fichier . init ( self )
18
19 def o u v r i r ( s e l f ) : # Surcharge de la methode
20 print ” o u v r i r fichier Binaire ” # ” ouvrir ”

Cédric Buche (ENIB) POO 28 janvier 2014 87 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1 c l a s s Engin :
2 def init ( s e l f , braquage =90):
3 self . vitesse = 0
4 self . bra quage = braquage
5
6 def v i r a g e ( s e l f ) :
7 return s e l f . vitesse / self . braquage
8
9 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
10 c l a s s S o u s m a r i n a l p h a ( Engin ) :
11 def init ( s e l f , braquage ) :
12 Engin . init ( s e l f , braquage )
13
14 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
15 c l a s s T o r p i l l e ( Engin ) :
16 def init ( s e l f , braquage ) :
17 Engin . init ( s e l f , braquage )
18
19 def e x p l o s e ( s e l f ) :
20 print ” E x p l o s i o n !!!!!!”

Cédric Buche (ENIB) POO 28 janvier 2014 88 / 137


Hiérarchie (1 UC) Hiérarchie

L’héritage multiple
faire hériter une classe de plusieurs superclasses.
regrouper au sein d’une seule et même classe les attributs et
méthodes de plusieurs classes.

Cédric Buche (ENIB) POO 28 janvier 2014 89 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1
2 class Herbivore :
3 ...
4 def mangerHerbe ( s e l f ) :
5 p r i n t ” j e mange de l ' herbe ”
6
7 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
8 class Carnivore :
9 ....
10 def mangerViande ( s e l f ) :
11 p r i n t ” j e mange de l a v i a n d e ”
12 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
13 c l a s s Omnivore ( H e r b i v o r e , C a r n i v o r e ) : # Heritage multiple
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 ( )

Cédric Buche (ENIB) POO 28 janvier 2014 90 / 137


Hiérarchie (1 UC) Hiérarchie

Polymorphisme
A un même service peut correspondre, dans les classes dérivées,
des méthodes différentes
Chaque classe dérivée définit le forme ( -morphe) sous laquelle elle
remplit le service (méthode)
Cette forme peut donc être multiple (différente d’une classe à
l’autre) ( poly-)

Cédric Buche (ENIB) POO 28 janvier 2014 91 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...
1 c l a s s Shape : # classe ” abstraite ” specifiant une interface
2 def init ( self ):
3 p r i n t ” j e s u i s une s h a p e ”
4
5 def a r e a ( s e l f ) :
6 return ” s h a p e a r e a ”
7
8 c l a s s R e c t a n g l e ( Shape ) :
9 def init ( self ):
10 Shape . init ( self )
11 p r i n t ” j e s u i s un R e c t a n g l e ”
12
13
14 def a r e a ( s e l f ) :
15 return ” r e c t a n g l e area ”
16
17 c l a s s C i r c l e ( Shape ) :
18 def init ( self ):
19 Shape . init ( self )
20 p r i n t ” j e s u i s un c e r c l e ”
21 def a r e a ( s e l f ) :
22 return ” c i r l e area ”
23
24 #### p r o g r a m m e p r i n c i p a l
25 shapes = [ ]
26 s h a p e s . append ( R e c t a n g l e ( ) )
27 s h a p e s . append ( C i r c l e ( ) )
28 for i in shapes :
29 CédricpBuche
r i n t i(ENIB)
. area () POO
# appel p o l y m o r p h e 28 janvier 2014 92 / 137
Hiérarchie (1 UC) Hiérarchie

Retour sur l’encapsulation

Encapsulation : contrôle d’accés


publiques
privées
protégées : les attributs ne sont visibles que des sous-classes

Cédric Buche (ENIB) POO 28 janvier 2014 93 / 137


Hiérarchie (1 UC) Hiérarchie

Retour sur l’encapsulation

Encapsulation : règles d’écriture


publiques : attr1, attr2
privées : attr1, attr2
protégées : attr1, attr2

En python,
→ Les attributs et méthodes protégées sont accessibles
normalement, le préfixe a pour seul objectif d’informer
sur leur nature

Cédric Buche (ENIB) POO 28 janvier 2014 94 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1 c l a s s Telephone :
2 def init ( self ):
3 # donnees prives
4 self . numero serie = ' 126312156 '
5
6 # donnees protegees
7 s e l f . c o d e p i n = ' 1234 '
8
9 # donnees publiques
10 s e l f . modele = ' n o k i a 6800 '
11 s e l f . numero = ' 06 06 06 06 06 '

Cédric Buche (ENIB) POO 28 janvier 2014 95 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1 # methodes privees
2
3 # methodes p r o t e g e e s
4 def chercherReseau ( s e l f ) :
5 p r i n t ' Reseau FSR , b i e n v e n u e dans un monde m e i l l e u r ... '
6
7 def recupMessage ( s e l f ) :
8 p r i n t ' Pas de m e s s a g e '
9
10 # methodes p u b l i q u e s
11 def a l l u m e r ( s e l f , c o d e P i n ) :
12 p r i n t s e l f . modele
13 i f s e l f . c o d e p i n == c o d e P i n :
14 p r i n t ' Code p i n OK '
15 s e l f . chercherReseau ()
16 s e l f . recupMessage ( )
17 else :
18 p r i n t ' mauvais c o d e p i n '

Cédric Buche (ENIB) POO 28 janvier 2014 96 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1
2 # programme p r i n c i p a l
3 nokia = Telephone ( )
4 n o k i a . a l l u m e r ( ' 1524 ' )
5 n o k i a . a l l u m e r ( ' 1234 ' )

Cédric Buche (ENIB) POO 28 janvier 2014 97 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1 c l a s s TelephonePhoto ( Telephone ) :
2 def init ( self ):
3 Telephone . init ( self )
4 p r i n t ' t e l e p h o n e + mieux '
5
6 # methodes p u b l i q u e s
7 def p r e n d r e p h o t o ( s e l f ) :
8 p r i n t ' c l i k −c l a k '
9
10 # Test
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 serie # ERREUR
13 print s e l f . c o d e p i n # OK s o u s − c l a s s e de Telephone
14
15
16 # programme p r i n c i p a l
17 nokia = TelephonePhoto ( )
18 n o k i a . a l l u m e r ( ' 1234 ' )
19 nokia . prendre photo ( )

Cédric Buche (ENIB) POO 28 janvier 2014 98 / 137


Hiérarchie (1 UC) Hiérarchie

En pratique ...

1 t e l s a g e m = Telephone ( )
2 print tel sagem . numero serie # ERREUR
3 print tel sagem . code pin # NON ! !

Cédric Buche (ENIB) POO 28 janvier 2014 99 / 137


Collaborations entre objets (1 UC) Relation multiple

En pratique ...

1 # Relation multiple
2
3 class FilleMars :
4 def init ( s e l f , prenom ) :
5 self . p r e n o m = prenom
6
7 def a f f i c h e P r e n o m ( s e l f ) :
8 print s e l f . prenom
9 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
10 c l a s s PapaMars :
11 def init ( self ):
12 self . filles = []
13 self . f i l l e s . append ( F i l l e M a r s ( ' Pamela ' ) )
14 self . f i l l e s . append ( F i l l e M a r s ( ' Tina ' ) )
15 self . f i l l e s . append ( F i l l e M a r s ( ' Rebecca ' ) )
16 self . f i l l e s . append ( F i l l e M a r s ( ' Amanda ' ) )
17
18 def cri a table ( self ):
19 for c h i l d in s e l f . filles :
20 c h i l d . affichePrenom ()
21 print ( ' a t a b l e ! ! ! ' )

Cédric Buche (ENIB) POO 28 janvier 2014 100 / 137


Collaborations entre objets (1 UC) Relation multiple

Attention aux pièges

Héritage vs associations
classe Automobile à partir des classes Carrosserie, Siege, Roue et
Moteur.
l’héritage multiple == ERREUR

Cédric Buche (ENIB) POO 28 janvier 2014 101 / 137


Collaborations entre objets (1 UC) Relation multiple

En pratique ...

1 # Relation simple
2 class Calculateur ( ) :
3 ””” c l a s s e de c a l c u l s ”””
4 def somme ( s e l f , a r g s = [ ] )
5 resultat = 0
6 for arg in a r g s :
7 r e s u l t a t += a r g
8 return r e s u l t a t
9 #−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
10 class Afficheur ( ) :
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 init ( self ):
13 s e l f . calculateur = Calculateur ()
14
15 def somme ( s e l f , a r g s = [ ] ) :
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 ( a r g s )
17 p r i n t ' l e r e s u l t a t e s t %d ' % r e s u l t a t

Cédric Buche (ENIB) POO 28 janvier 2014 102 / 137


Collaborations entre objets (1 UC) Relation multiple

Association simple

Un objet peut faire appel aux compétences d’un autre objet

Objet arrêter
flic Wiggum
−−−−−→

Objet homer mobile

Cédric Buche (ENIB) POO 28 janvier 2014 103 / 137


Collaborations entre objets (1 UC) Relation multiple

Association simple

Un objet peut faire appel aux compétences d’un autre objet

Objet arrêter
flic Wiggum
−−−−−→

Objet homer mobile

Cédric 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 Flic :
3 def init ( self ):
4 s e l f . nom
5
6 def d o n n e r O r d r e S t o p ( s e l f , v e h i c u l e ) : ## i n s t a n c e de Voiture
7 print ” a r r e t e t o i ! ! ”
8 vehicule . arreter ()
9
10 ### O b j e t #####
11 homer mobile = Voiture ( )
12 flic Wiggum = F l i c ( )
13 flic Wiggum . donnerOrdreStop ( homer mobile )

Cédric Buche (ENIB) POO 28 janvier 2014 104 / 137


Collaborations entre objets (1 UC) Destruction dans le cadre d’association

En pratique ...

1 c l a s s Roue :
2 def init ( self ):
3 p r i n t ”Me v o i c i !”
4
5 def del ( self ):
6 p r i n t ” Je meurs !”
7
8
9 class Voiture :
10 def init ( self ):
11 self . roue1 = Roue ( )
12 self . roue2 = Roue ( )
13 self . roue3 = Roue ( )
14 self . roue4 = Roue ( )
15
16 def del ( self ):
17 print ” I 'm d y i n g ! ”
18 del s e l f . roue1
19 del s e l f . roue2
20 del s e l f . roue3
21 del s e l f . roue4

Cédric Buche (ENIB) POO 28 janvier 2014 105 / 137


Collaborations entre objets (1 UC) Destruction dans le cadre d’association

En pratique ...

1 c l a s s Humain :
2 def init ( s e l f , nom ) :
3 s e l f . nom = nom
4
5 c l a s s Roue :
6 def init ( self ):
7 p r i n t ”Me v o i c i !”
8
9 def del ( self ):
10 p r i n t ” Je meurs !”
11
12 class Voiture :
13 def init ( self , proprio ) :
14 self . r o u e 1 = Roue ( )
15 self . r o u e 2 = Roue ( )
16 self . r o u e 3 = Roue ( )
17 self . r o u e 4 = Roue ( )
18 self . conducteur = proprio ( ”” )
19
20 def del ( self ):
21 print ” I 'm dying ! ”
22 del s e l f . roue1
23 del s e l f . roue2
24 del s e l f . roue3
25 del s e l f . roue4

Cédric Buche (ENIB) POO 28 janvier 2014 106 / 137


Pour aller plus loin

Plan de la présentation

1 Justification du modèle objet (1 UC)

2 Concepts fondateurs (1 UC)

3 Encapsulation (1 UC)

4 Hiérarchie (1 UC)

5 Collaborations entre objets (1 UC)

6 Pour aller plus loin

Cédric Buche (ENIB) POO 28 janvier 2014 107 / 137


Pour aller plus loin

Cours 5 - Programmation objet avancée

Objectifs
Abstraction
Classification
Modularité
Typage
Simultanéité
Persistance

Cédric Buche (ENIB) POO 28 janvier 2014 108 / 137


Pour aller plus loin Abstraction

L’abstraction se concentre sur les caractéristiques essentielles d’un


objet, selon le point de vue de l’observateur [Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 109 / 137


Pour aller plus loin Abstraction

Abstraction
Un service peut être déclaré sans qu’une méthode y soit associée :
service abstrait
La méthode associée au service est définie dans une ou plusieurs
classes dérivées
On ne peut pas instancier d’objets d’une classe possédant un
service abstrait : classe abstraite

En python, attention, on peut instancier une


classe abstraite

Cédric Buche (ENIB) POO 28 janvier 2014 110 / 137


Pour aller plus loin Abstraction

En pratique ...

1
2 class AbstractClass :
3
4 ...
5
6 # Force la c l a s s e f i l l e a d e f i n i r cette methode
7 def g e t V a l u e ( s e l f ) :
8 r a i s e NotImplementedError ( )
9
10 # m e t h o d e commune
11 def p r i n t O u t ( s e l f ) :
12 print s e l f . getValue ( ) ;

Cédric Buche (ENIB) POO 28 janvier 2014 111 / 137


Pour aller plus loin Abstraction

En pratique ...

1 class ConcreteClass1 ( AbstractClass ) :


2
3 ...
4
5 def g e t V a l u e ( s e l f ) :
6 return ” C o n c r e t e C l a s s 1 ”
7
8 class ConcreteClass2 ( AbstractClass ) :
9
10 ...
11
12 def g e t V a l u e ( s e l f ) :
13 return ” C o n c r e t e C l a s s 2 ”
14
15 #### P r o g r a m m e 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 ( )

Cédric Buche (ENIB) POO 28 janvier 2014 112 / 137


Pour aller plus loin Abstraction

Les classes et les objets doivent être au juste niveau d’abstraction : ni


trop haut ni trop bas [Booch, 1992]

Cédric 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]
Cédric Buche (ENIB) POO 28 janvier 2014 114 / 137
Pour aller plus loin Classification

Des obervateurs différents classent le même objet de différentes façons


[Booch, 1992]
Cédric Buche (ENIB) POO 28 janvier 2014 115 / 137
Pour aller plus loin Classification

Identification des mécanismes

Les mécanismes sont le moyen par lequel les objets collaborent pour
procurer un certain comportement de plus haut niveau [Booch, 1992]
Cédric Buche (ENIB) POO 28 janvier 2014 116 / 137
Pour aller plus loin Modularité

La modularité regroupe les entités en unités discrètes [Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 117 / 137


Pour aller plus loin Modularité

En pratique ...
Paquet en python
répertoire avec un fichier init .py qui définit les modules qu’il
contient (exemple : /usr/lib/python/xml/)
from paquetage

Cédric Buche (ENIB) POO 28 janvier 2014 118 / 137


Pour aller plus loin Modularité

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)

Cédric Buche (ENIB) POO 28 janvier 2014 119 / 137


Pour aller plus loin Modularité

En pratique ...

Classe dans un module en python


Une classe
from paquetage import Class

from turtle import Pen


p1 = Pen()

Cédric Buche (ENIB) POO 28 janvier 2014 120 / 137


Pour aller plus loin Typage

Typage

Chaque objet peut être typé


Le type définit
la syntaxe (comment l’appeler ?)
la sémantique (qu’est ce qu’il fait ?)

Cédric Buche (ENIB) POO 28 janvier 2014 121 / 137


Pour aller plus loin Typage

Un typage fort empêche le mélange des entités [Booch, 1992]

Cédric Buche (ENIB) POO 28 janvier 2014 122 / 137


Pour aller plus loin Typage

En pratique ...

1 def e s t P a i r ( nombre ) :
2 i f not i s i n s t a n c e ( nombre , int ):
3 return None
4 return ( nombre % 2 ) == 0

En python, isinstance(X,type) permet de


vérifier le type d’un élément

Cédric Buche (ENIB) POO 28 janvier 2014 123 / 137


Pour aller plus loin Simultanéité

La simultanéité permet à des objets différents d’agir en même temps


[Booch, 1992]
Cédric Buche (ENIB) POO 28 janvier 2014 124 / 137
Pour aller plus loin Simultanéité

cycleVie()

cycleVie()

cycleVie()

Ordonnanceur d’activités : class MyTimer

Cédric Buche (ENIB) POO 28 janvier 2014 125 / 137


Pour aller plus loin Simultanéité

En pratique . . .

1 import t h r e ad i n g
2 import time
3
4 c l a s s MyTimer :
5 def init ( s e l f , tempo , t a r g e t s = [ ] ) :
6 self . targets = targets
7 s e l f . t e m p o = tempo
8
9 def start ( self ):
10 self . t i m e r = t h r e a d i n g . Timer ( s e l f . tempo , self . run )
11 self . timer . start ()
12
13 def s t o p ( s e l f ) :
14 self . timer . cancel ()
15
16 def run ( s e l f ) :
17 for i in s e l f . targets :
18 i . cycleVie ()

Cédric Buche (ENIB) POO 28 janvier 2014 126 / 137


Pour aller plus loin Simultanéité

En pratique . . .

1 ################################
2 # Programme p r i n c i p a l #
3 ################################
4
5 b o t s . append ( Animat2D ( ) )
6 b o t s . append ( Animat2D ( ) )
7
8 a = MyTimer ( 1 , b o t s )
9 a . start ()

Cédric Buche (ENIB) POO 28 janvier 2014 127 / 137


Pour aller plus loin Persistance

La persistance préserve l’état et la classe d’un objet à travers le temps


et l’espace [Booch, 1992]
Cédric Buche (ENIB) POO 28 janvier 2014 128 / 137
Pour aller plus loin Persistance

Persistance par sérialisation

Sauvegarde de l’état d’un objet


sauvegarder la valeur des attributs de chaque objet
à partir de ces valeurs, on peut reconstruire l’objet

En python, dict permet de récupérer les va-


leurs des attributs d’un objet

Cédric Buche (ENIB) POO 28 janvier 2014 129 / 137


Pour aller plus loin Persistance

En pratique ...

1 c l a s s Dummy:
2 def init ( self ):
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 p r i n t d1 . dict
10
11
12
13 ######### T e s t ##############
14 >>> python t e s t D i c . py
15 { ' member1 ' : ' abcd ' , ' member3 ' : [ 'a ' , ' e ' , ' i ' , 'o ' , 'u ' ], ' member2 ' : 0}

Cédric Buche (ENIB) POO 28 janvier 2014 130 / 137


Pour aller plus loin Persistance

En pratique ...

Persistance de toutes les instances de classes dérivées d’une classe mère.


1 import s h e l v e
2 import a t e x i t
3 import sys
4
5 donnees = None
6 instances = [ ]
7
8 def charge objets ():
9 print ' chargement . . . '
10 g l o b a l donnees
11 d o n n e e s = s h e l v e . open ( ' o b j e t s . bin ' )
12
13 def sauvegarde ( ) :
14 print ' sauvegarde . . . '
15 g l o b a l donnees
16 for i n s t a n c e in i n s t a n c e s :
17 donnees [ i n s t a n c e . g e t I d ( ) ] = i n s t a n c e . dict
18 i f d o n n e e s i s not None :
19 donnees . c l o s e ( )

Cédric Buche (ENIB) POO 28 janvier 2014 131 / 137


Pour aller plus loin Persistance

En pratique ...

1 # chargement des objets


2 charge objets ()
3
4 # sauvegarde sera appelee a la fermeture du p r o g r a m m e
5 atexit . r e g i s t e r ( sauvegarde )

Cédric Buche (ENIB) POO 28 janvier 2014 132 / 137


Pour aller plus loin Persistance

En pratique ...

1 class Persistent :
2
3 def init ( s e l f , id ) :
4 g l o b a l donnees
5 i f i d in donnees :
6 self . dict = donnees [ id ]
7 else :
8 s e l f . id = id
9 i n s t a n c e s . append ( s e l f )
10
11 def g e t I d ( s e l f ) :
12 return s e l f . i d
13
14
15 c l a s s MaClasse ( P e r s i s t e n t ) :
16
17 def init ( s e l f , i d , d a t a s = None ) :
18 Persistent . init ( s e l f , id )
19 i f d a t a s i s not None :
20 s e l f . datas = datas

Cédric 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 i n s t a n c e d e = MaClasse ( ' 1 ' )
4 while True :
5 try :
6 i f hasattr ( instance de , ' datas ' ) :
7 instance de . datas = raw input ( ' valeur ( a c t u e l l e :% s ) : ' % instance de
8 else :
9 instance de . datas = raw input ( ' nouvelle valeur : ' )
10
11 except KeyboardInterrupt : # par exemple ” C o n t r o l −C”
12 print ' f i n '
13 sys . exit (0)

Cédric 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 n o u v e l l e v a l e u r : homer
4 v a l e u r ( 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 v a l e u r ( a c t u e l l e : homer ) : b a r t
10 valeur ( 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 valeur ( a c t u e l l e : bart ) : l i s a
17 valeur ( actuelle : l i s a ) : fin
18 sauvegarde . . .

Cédric Buche (ENIB) POO 28 janvier 2014 135 / 137


Correction : GAIA

Références

Booch, G. (1992).
Conception orientée 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.

Cédric Buche (ENIB) POO 28 janvier 2014 136 / 137


Correction : GAIA

Informatique S4

Programmation Orientée Objet


— Concepts —

Cédric Buche
buche@enib.fr www.enib.fr/˜buche

École Nationale d’Ingénieurs de Brest (ENIB)

28 janvier 2014

Cédric Buche (ENIB) POO 28 janvier 2014 137 / 137