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
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
Association
Agrégation
Composition
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.
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
1. L’association
2. L’agrégation
3. La composition
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.
 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.
 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
 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
 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.
 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
 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
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
1. L’association
2. L’agrégation
3. La composition
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
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.
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)
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)
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)
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
1. L’association
2. L’agrégation
3. La composition
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
Cours Programmation Orientée Objet en C++ Dr. A.HAMEUR LAINE
 Representation en UML.
Examples:
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( )
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()
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()
 «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

Poo en c++ les relations entre classes

  • 1.
    Université des FrèresMentouri – 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
  • 2.
    Cours Programmation OrientéeObjet en C++ Dr. A.HAMEUR LAINE Association Agrégation Composition
  • 3.
    Cours Programmation OrientéeObjet 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.
  • 4.
    Cours Programmation OrientéeObjet en C++ Dr. A.HAMEUR LAINE 1. L’association 2. L’agrégation 3. La composition
  • 5.
    Cours Programmation OrientéeObjet 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 associationrepré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 laclasse 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 enC++:  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 enC++:  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 enC++:  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 enC++:  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
  • 12.
    Cours Programmation OrientéeObjet en C++ Dr. A.HAMEUR LAINE 1. L’association 2. L’agrégation 3. La composition
  • 13.
    Cours Programmation OrientéeObjet 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éeObjet 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éeObjet 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éeObjet 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éeObjet 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)
  • 18.
    Cours Programmation OrientéeObjet en C++ Dr. A.HAMEUR LAINE 1. L’association 2. L’agrégation 3. La composition
  • 19.
    Cours Programmation OrientéeObjet 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
  • 20.
    Cours Programmation OrientéeObjet en C++ Dr. A.HAMEUR LAINE  Representation en UML. Examples:
  • 21.
    Cours Programmation OrientéeObjet 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éeObjet 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éeObjet 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 POOUML/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