Les classes peuvent être reliées structurellement par 3 types de relations: l'association. l’agrégation et la Composition.
Ce cours vous permet de comprendre ces trois types de relations, et apprendre leur mise en oeuvre en langage C++.
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
Poo en c++ les relations entre classes
1. Université des Frères Mentouri – Constantine - 1
Faculté des ST - Département d'Electronique
Dr. Amina HAMEURLAINE
am.hameurlaine@gmail.com
amina.hameurlaine@umc.edu.dz
2019/2020
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Les relations entre classes
3. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Association
Agrégation
Composition
Les classes peuvent être reliées structurellement par 3 types de relations:
Association
Composition
Agrégation
Une relation précise que les objets d’une classe sont reliés aux objets d’une
autre classe.
Une relation est représentée par un attribut.
L'agrégation et la composition sont deux cas
particuliers de l’association.
5. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Exemple:
Un client peut passer une (1) ou plusieurs (*) commandes,
Une commande peut contenir une (1) ou plusieurs (*) lignes,
Une ligne de commande contient un seul article.
6. Une association représente une relation sémantique entre deux classes.
Examples: Representation en UML.
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Relation unidirectionnelle
Relation bidirectionnelle
Multiplicité (ou cardinalité) : représente le nombre
d’instances (objets) d’une classe qui peuvent être liées
aux instances d’une autre classe.
7. Si la classe A est associée a la classe B :
La classe A va utiliser les objets de type B comme attribut (pointeur).
La ligne de vie des objets de la classeA et de la classe B ne sont pas
associés étroitement : un objet peut être détruit sans que l’autre le soit
nécessairement.
La création et la destruction des objets est indépendante.
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
8. Représentation en C++:
Exemple 1:
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
La mise en place de l’association se fait à laide de:
Un attribut pointeur de type objet,
Une méthode qui va pointer sur un objet
//associer l’objet p à l’objet prs
//associer l’objet prs à l’objet p
/*indiquer au compilateur que Pays est de type class
afin d'éviter le message d'erreur : ’Pays’ has not been declared */
//Un pointeur de type Pays qui pointe sur un
objet de type Pays
//initialisation du pointeur pays
/*mise en place de l'association
via une méthode */
Chaque objet d’une classe utilise un pointeur
qui pointe sur un objet de l’autre classe.
//Un pointeur de type President
/* mise en place de l'association via
une méthode */
President
-*pays: Pays
+President()
+set_pays(Pays *P): void
Pays
- *president : President
+Pays()
+set_presid(President *P): void
9. Représentation en C++:
Exemple 1:
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
La mise en place de l’association se fait à laide de:
Un attribut pointeur de type objet,
Une méthode qui utilise un paramètre de type pointeur.
//associer l’objet p à l’objet prs
//associer l’objet prs à l’objet p
*pays =&p
prs
*president= &prs
p
L’objet p utilise le pointeur president pour pointer
sur l’objet prs via la méthode set_presid.
L’objet prs utilise le pointeur pays pour pointer sur
l’objet p via la méthode set_pays.
10. Représentation en C++:
Exemple 2: avec un vecteur de pointeurs.
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
La mise en place de l’association se fait à laide de:
Un vecteur de pointeurs de type objet
Une méthode qui utilise un paramètre de type pointeur .
// inclure la bibliothèque vector
/* un vecteur de pointeurs de type
Commande*/
// mise en place de l’association
//associer l’objet c1 à l’objet cmd1
//associer l’objet c1 à l’objet cmd2
Chaque objet de la classe Client utilise un
vecteur de pointeurs cmd [*] pour pointer sur
des objets de la classe Commande via la
méthode set_commande.
Commande
+Commande()
Client
- cmd [*] : Commande
+Client()
+set_commande(Commande *C):
void
11. Représentation en C++:
Exemple 2: avec un vecteur de pointeurs.
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
La mise en place de l’association se fait à laide de:
Un vecteur de pointeurs de type objet
Une méthode qui utilise un paramètre de type pointeur .
//associer l’objet c1 à l’objet cmd1
//associer l’objet c1 à l’objet cmd2
cmd [ *] = {&cmd1, &cmd2}
c1
L’objet c1 utilise le vecteur de pointeurs cmd[*]
pour pointer sur les objets cmd1 et cmd2 via
la méthode set_commande.
cmd2
cmd1
13. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
L’agrégation est un cas particuliers de l’association exprimant une relation de
contenance.
Elle représente une relation d’assemblage de type "ensemble / élément" .
Une classe agrégée (l’élément) fait partie d’une autre classe agrégat
(l’ensemble).
Le cycle de vie de l’agrégat et de ses éléments agrégés peuvent être
indépendants.=> chaque objet a sa propre durée de vie.
Examples: Representation en UML
14. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Si un objet A fait partie d'un objet B, alors:
L’objet B ne fait pas partie de l’objet A
L’objet A peut exister indépendamment de l’objet B
=> La suppression de l’objet B n’entraîne pas forcement la suppression de
l’objet A: chaque objet peut avoir sa propre durée de vie.
L’objet A peut faire partie de plusieurs objets.
Si un objet A fait partie d'un objet B, et que B fait partie d'un objet C, alors A doit
faire partie d'un objet C. Sinon cela signifie que les champs sémantiques des
objets sont mal définis.
15. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation en C++:
Exemple 1: avec un pointeur.
La mise en place de l’agrégation se fait à laide de:
Un pointeur qui pointe sur l’objet agrégé déjà créé en
dehors de l'objet conteneur.
Ou une référence qui fait référence à l'objet agrégé.
/* créer l’objet L et faire la liaison avec
l’objet art */
// ou
//une allocation dynamique*article =&art
L art
Article
+Article()
Ligne
-*article: Article
+Ligne( Article *a)
16. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation en C++:
Exemple 2: avec une référence.
La mise en place de l’agrégation se fait à laide de:
Un pointeur ou une référence qui pointe sur l’objet
déjà créé en dehors de l'objet conteneur.
Ou une référence qui fait référence à l'objet agrégé.
&article =art
L art /* créer l’objet L et faire la liaison avec
l’objet art */
// une référence
Article
+Article()
Ligne
-&article: Article
+Ligne( Article &a)
17. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation en C++:
Exemple 3: avec un tableau de pointeurs.
/*un tableau de pointeur de 8 cases
mémoires*/
/* créer l’objet E et faire la liaison avec le tableau p via
le pointeur pp*/
*personne [8] =
{&p[0], …,&p[7] }
E Personne p[8]
0 1 2 3 4 5 6 7
Personne
+Personne()
Equipe
-*personne[8]: Personne
+Equipe( Personne *a)
19. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Une composition est une agrégation plus forte signifiant « est composée d’un».
Le cycle de vie de l’agrégat et de ses éléments agrégés sont liés.
L’agrégat (composite) est responsable du cycle de vie de ses éléments.
La destruction de l’agrégat entraîne la destruction de toutes ses éléments.
Un élément ne peut appartenir qu’à un seul composite: agrégation non
partagée.
Si un objet A (conteneur ou composite) est composé d’un objet B (composant) ,
alors:
L’objet B n’appartient qu’a l’objet A et ne peut pas être partagé avec un autre
objet.
L’objet A est responsable de la construction et la destruction de de l’objet B
21. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation en C++:
Exemple 1: avec un attribut normal.
La mise en place de la composition se fait au moment de
l’instantiotion de l'objet composite a l’aide de:
Un attribut normal de type objet.
Ou un pointeur pour une allocation dynamique.
v
moteur
// un attribut objet de type Moteur
/* créer l’objet V qui va créer
automatiquement l’objet moteur */
Moteur
+Moteur()
Voiture
-moteur: Moteur
+Voiture( )
22. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation en C++:
Exemple 2: avec un pointeur.
La mise en place de la composition se fait au moment de
l’instantiotion de l'objet composite a l’aide de:
Un attribut normal de type objet.
Ou un pointeur pour une allocation dynamique.
// un pointeur de type Moteur
/*créer un objet de type moteur
(allocation dynamique)*/
/* créer l’objet V qui va créer l’objet
moteur par l’operateur new */
/* la destruction de V va entraîner la destruction de l’objet
moteur */
Moteur
+Moteur()
+~Moteur()
Voiture
-*moteur: Moteur
+Voiture( )
+~Voiture()
23. Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Représentation en C++:
Exemple 3: avec un tableau dynamique.
/*créer un tableau de
taille nbr_ligne */
Ligne
+Ligne()
+~Ligne()
Commande
-*ligne: Ligne
+Commande( )
+~Commande()
24. «Cours POO UML/C++ : les relations entre classes» ,ThierryVaira.
« Algorithmique et Programmation 2 : Agrégation et Composition», Romain BOURQUI.
« Apprendre le C++ », M. Hamemerchmidt.
« Apprendre le C++ », C. Delonnoy.
« Programmation en Langage C++ : Cours etTravaux Pratiques », B. Boukhezzar.
https://fr.slideshare.net/LiliaSfaxi/chp6-de-uml-vers-c
https://fr.slideshare.net/MireilleBF/uml-classes-par-les-exemples
http://www.cplusplus.com/doc/tutorial/
https://openclassrooms.com/courses/programmez-avec-le-langage-c/qu-est-ce-
que-le-c-2
https://fr.coursera.org/learn/cpp-poo
http://carl.seleborg.free.fr/cpp/cours/index_cours.html
Cours Programmation Orientée Objet en C++ Dr. A.HAMEURLAINE