Dans la programmation orientée objet, un objet est lié à un autre pour utiliser la fonctionnalité et le service fourni par cet objet. Cette relation entre deux objets est connue sous le nom d’association dans la conception logicielle générale orientée objet et représentée par une flèche dans le langage de modélisation unifié ou UML. La composition et l’agrégation sont toutes deux des formes d’association entre deux objets, mais il existe une différence subtile entre la composition et l’agrégation, qui se reflète également dans leur notation UML. Nous désignons l’association entre deux objets par le terme de composition, lorsqu’une classe possède d’autres classes et que ces dernières ne peuvent pas exister de manière significative, lorsque son propriétaire est détruit. Par exemple, la classe humaine est une composition de plusieurs parties du corps, notamment la main, la jambe et le cœur. Lorsque l’objet humain meurt, toutes ses parties du corps ont cessé d’exister de manière significative, c’est un exemple de Composition.
Les programmeurs confondent souvent entre Association, Composition et Agrégation dans les discussions de conception orientée objet, cette confusion fait également de la différence entre Association, Composition et Agrégation l’une des questions populaires dans les entretiens Java, seulement après la différence entre classe abstraite et interface.
Un autre exemple de Composition est Voiture et sa partie par exemple les moteurs, les roues, etc. Les parties individuelles de la voiture ne peuvent pas fonctionner lorsqu’une voiture est détruite. Alors que dans le cas de l’agrégation, y compris l’objet qui peut exister sans faire partie de l’objet principal comme un joueur qui fait partie d’une équipe, peut exister sans une équipe et peut devenir une partie d’autres équipes aussi.
Un autre exemple d’agrégation est l’étudiant dans la classe de l’école lorsque l’école a fermé, l’étudiant existe toujours et peut ensuite rejoindre une autre école ou ainsi. Dans la notation UML, une composition est dénotée par un losange rempli, tandis que l’agrégation est dénotée par un losange vide, ce qui montre leur différence évidente en termes de force de la relation.
La composition est plus forte que l’agrégation. En bref, une relation entre deux objets est appelée association, et une association est connue sous le nom de composition lorsqu’un objet en possède un autre tandis qu’une association est connue sous le nom d’agrégation lorsqu’un objet utilise un autre objet.
Dans ce tutoriel OOPS, nous verrons quelques exemples supplémentaires pour mieux comprendre la différence entre l’association, la composition et l’agrégation.
Btw, si vous êtes nouveau dans le monde de la programmation et de la conception orientée objet, alors je vous suggère également de passer par un cours pratique comme UML et les fondations de la conception orientée objet par Karloy Neisztor sur Udemy. C’est un excellent cours pour comprendre le processus complet d’analyse et de conception orientée objet pour créer des logiciels de qualité.
Un exemple d’association, de composition et d’agrégation en Java
Voici un exemple de composition et d’agrégation, en termes de code Java. En regardant ce code, vous pouvez mesurer les différences entre les deux. En passant, la composition est également très préférée dans la conception orientée objet par rapport à l’héritage, même Joshua Bloch a déclaré son importance dans le livre classique, Effective Java.
1. Composition :
Si le moteur est une partie de la voiture, la relation entre eux est la composition. Voici comment ils sont mis en œuvre entre les classes Java.
public class Car {
2. Agrégation :
Puisque Organisation a Personne comme employés, la relation entre eux est Agrégation. Voici à quoi ils ressemblent en termes de classes Java
public class Organization { private List employees;}
public class Person { private String name ; }
DiagrammeUML de l’association, de la composition et de l’agrégation
UML a différentes notations pour dénoter l’agrégation, la composition et l’association. L’association est dénotée par la flèche simple tandis que l’agrégation est dénotée par la flèche en losange vide et la composition est dénotée par une flèche en losange remplie.
Lorsque vous dessinez un diagramme UML pour deux classes liées A et B, où A est associé à B alors son dénoté par A -> B. Une manière similaire est utilisée pour montrer l’agrégation et la composition entre deux classes.
Voici les notations UML pour un type différent de dépendance entre deux classes.
Comme je l’ai dit, toutes les trois dénotent une relation entre un objet et ne diffèrent que par leur force, vous pouvez aussi les voir comme ci-dessous, où la composition représente la forme la plus forte de relation et l’association étant la forme la plus générale.
![](https://3.bp.blogspot.com/-4KAOtX0S5NU/UvJN_w4TCZI/AAAAAAAABCo/SKPKYaci8s0/s280/association+vs+composition+vs+aggregation.jpg)
Association vs Composition vs Agrégation
Voici la liste des différences entre la composition et l’agrégation sous forme de points, pour un examen rapide. Comme je l’ai dit la différence clé entre eux vient du point que dans le cas de la Composition, Un objet est PROPRIÉTAIRE d’un autre objet, tandis que dans le cas de l’agrégation, un objet est juste un UTILISATEUR ou un autre objet.
1) Si A et B deux classes sont liées l’une à l’autre de telle sorte que, B a cessé d’exister, lorsque A est détruit, alors l’association entre deux objets est connue comme Composition. Un exemple est celui de la voiture et du moteur. Alors que si A et B sont associés l’un à l’autre, de telle sorte que B peut exister sans être associé à A, alors cette association en connu comme Agrégation.
Voir Head First Object-Oriented Analysis and Design pour plus d’exemples de composition et d’association dans OOP.
2) Dans le cas de la composition, A possède B par exemple, la personne est propriétaire de sa main, de son esprit et de son cœur, alors que dans le cas de l’agrégation, A utilise B par exemple, l’organisation utilise les personnes comme employés.
3) Dans le diagramme UML, l’Association est dénotée par une tête de flèche normale, tandis que la Composition est représentée par une tête de flèche en losange remplie, et l’Agrégation est représentée par une tête de flèche en losange vide, Comme indiqué dans le diagramme ci-dessous et ci-joint dans le troisième paragraphe.
Association A—->B
Composition A—–<rempli>B
Agrégation A-.—-<>B
4) L’agrégation est une forme allégée de la composition, où un objet sous-partie peut utilement exister sans objets principaux.
5) En Java, vous pouvez utiliser le mot-clé final pour représenter la Composition. Puisque dans la composition, l’objet propriétaire s’attend à ce qu’un objet partie soit disponible et fonctionne, en le rendant final, vous fournissez la garantie que, lorsque l’objet propriétaire sera créé, cet objet partie existera. C’est en fait un idiome Java pour représenter une forme forte d’association c’est-à-dire la composition entre deux objets.
6) Un autre mot intéressant, qui vient à portée de main pour comprendre la différence entre la composition et l’agrégation dans la conception de logiciels est « part-of » et « has ». Si un objet fait partie d’un autre objet, par exemple, le moteur fait partie de la voiture, alors l’association ou la relation entre eux est la composition. D’autre part, si un objet a juste un autre objet e.g. La voiture a le conducteur alors c’est l’Agrégation.
C’est tout sur la différence entre Association, Composition et Agrégation dans UML, Java et la conception orientée objet. Depuis l’analyse orientée objet est plus sur la définition de la relation entre l’objet, il est important de savoir quel type de relation existe entre eux, la composition et l’agrégation est une deux façons de représenter la relation entre deux objets.
Apprentissage complémentaire
Principes de conception orientée objet
Introduction absolue à la programmation orientée objet en Java
Java – Programmation orientée objet
Plusieurs articles pour améliorer vos compétences en matière de programmation et de conception orientées objet
.orientée objet et les compétences de conception
Top 10 Object Oriented Design Principles Java programmer Should Know
Why Prefer Composition over Inheritance in Java
Différence entre overloading et overriding en Java
Top 10 Interview Questions on Abstract class and Interface
20 questions sur le design pattern Java et la conception logicielle
.