Agrégation entre classes

Agrégation entre classes

L'agrégation est une association non symétrique, qui exprime un couplage fort et une relation de subordination.

Elle représente une relation de type "ensemble / élément".

Nous avons vu avec l'agrégation forte (composition) que la destruction de l'agrégat impliquait la destruction des éléments ou composants.

Ce n'est pas le cas avec la relation d'agrégation. C'est un couplage moins fort.

ExempleDiagramme de classe pour un décrire un mail

Dans le diagramme ci-dessous, notez que la cardinalité côté agrégat peut être différente de 1.

Agrégation entre classes
Agrégation entre classes

Le codage en C++ d'une agrégation est la suivante :

1
class CEnseignant {...};
2
class CDepartement {
3
  ...
4
  private:
5
    CEnseignant *enseignants[5];  // Agrégation
6
    ...
7
};
8
class CUniversite {
9
  ...
10
  private:
11
        CDepartement facultes[20]; // Composition
12
    ...
13
};

L'agrégation se code comme un tableau de pointeur sur des objets déclarés dynamiquement en mémoire.

Soit ces objets ont été créés durant la vie de l'objet agrégat, auquel cas il faudra impérativement prévoir de les effacer (dans le code du destructeur par exemple).

Soit ils ont été créés par un autre objet et pointe donc seulement dessus. Cela signifie qu'à la mort de l'objet, les éléments restent existants.

Dans l'exemple ci-dessus, il est possible que les objets de type Eenseignants restent en mémoire, même si l'objet de type Departement est détruit.

Ce n'est pas le cas de la composition de ce diagramme.

En cas de destruction d'un objet de type CUniversite, les objets facultes sont détruits.