{{tag>uml agregation composition}} ====== Différencier agrégation / composition ====== En **UML**, l'**agrégation** et la **composition** sont deux types de relations entre des objets de classes différentes. ===== Composition ===== Dans le diagramme de classes ci dessous, une relation de composition a été crée entre les classes A et B. {{dev:uml:composition.png}} L' objet de classe B est un attribut d'un objet de classe A. Si l'objet (ou entité) de type A est détruit, l'objet de type B lié par la relation de composition est également détruit. Pour ce modèle, l'objet de type B n'a pas lieu d'être sans l'objet de type A car il est considéré comme un élément intrinsèquement lié. B est inclus dans A. Par exemple pour un logiciel de gestion de véhicule on peut faire le choix de concevoir une classe Vehicule et un classe Moteur puis de les lier par une relation de composition: Un Vehicule est composé d'un Moteur. Pour ce modèle, si l'utilisateur décide de supprimer une instance de type Vehicule l'instance de type Moteur qui était associée est également supprimée. ===== Agrégation ===== Dans le diagramme de classes ci dessous, les classes A et B ont été liées cette fois par une relation d'agrégation: {{dev:uml:agregation.png}} Un objet de type A possède une référence sur l'objet de type B mais leur existence en mémoire est indépendante. Si A est détruit B n'est pas affecté. B n'est pas inclus dans A. Par exemple pour un logiciel de gestion de contacts, on peut faire le choix de créer une classe Carnet et une classe Contact puis définir une relation d'agrégation: Un carnet est un agrégat de Contact. Pour ce modèle, la destruction d'un objet de type Carnet n’entraînera pas la destruction de tous les objets de type Contact lui étant associés. Ils continueront d'exister et pourront être ré-associés a un autre objet de type Carnet. ===== Références ===== * https://fr.wikipedia.org/wiki/Agr%C3%A9gation_%28programmation%29