L'exemple que j'ai appris était les doigts à la main. Votre main est composée de doigts. Elle les possède. Si la main meurt, les doigts meurent. Vous ne pouvez pas "agréger" des doigts. Vous ne pouvez pas simplement aller chercher des doigts supplémentaires et les attacher et détacher de votre main à volonté.
La valeur, du point de vue de la conception, est souvent liée à la durée de vie de l'objet, comme l'a dit un autre poster. Disons que vous avez un client et qu'il possède un compte. Ce compte est un objet "composé" du client (du moins, dans la plupart des contextes auxquels je peux penser). Si vous supprimez le client, le compte n'a aucune valeur en soi et sera donc également supprimé. L'inverse est souvent vrai lors de la création d'un objet. Puisqu'un compte n'a de sens que dans le contexte d'un client, la création d'un compte devrait se faire dans le cadre de la création d'un client (ou, si vous le faites paresseusement, dans le cadre d'une transaction avec le client).
Il est utile, lors de la conception, de réfléchir aux objets qui possèdent (composent) d'autres objets par rapport à ceux qui ne font que référencer (agréger) d'autres objets. Cela peut aider à déterminer où se trouve la responsabilité de la création, du nettoyage et de la mise à jour des objets.
Dans le code, c'est souvent difficile à dire. Presque tout dans le code est une référence d'objet, il n'est donc pas toujours évident de savoir si l'objet référencé est composé (possédé) ou agrégé.
0 votes
Voir aussi implementation-difference-between-aggregation-and-composition-in-java
0 votes
Veuillez consulter un exemple basé sur le code à l'adresse suivante stackoverflow.com/questions/731802/
0 votes
UML 2.5 a clarifié la différence. Voir l'encadré à la page 110. Je vote donc pour la réouverture de ce dossier.
0 votes
Non, UML 2.5 n'a pas clarifié la définition de la composition, il est plutôt resté ambigu à ce sujet, puisqu'ils disent aussi "Un objet partie peut être retiré d'un objet composite avant que l'objet composite ne soit supprimé, et donc ne pas être supprimé en tant que partie de l'objet composite." Voir ma réponse ci-dessous ( stackoverflow.com/questions/734891/ ) où j'ai essayé de clarifier le sens de la composition. S'il vous plaît, votez en faveur de ma réponse pour montrer que dans l'OS, la bonne réponse gagne à la fin :-) [ou downvotez toutes les réponses incorrectes]
0 votes
UML est sérieusement cassé, estropié, complètement inapte à être une norme. 1) Toutes les définitions sont vagues. 2) Il ne fournit rien pour composer/décomposer l'ensemble du projet (alors que les méthodes précédentes de modélisation des processus le font). La modularité est complètement perdue. 3) Son agrégation est vague, elle signifie différentes choses pour différentes personnes. 4) Les gens ont besoin de la composition, ce qu'UML ne fournit pas, alors ils abusent de l'agrégation pour en obtenir une fraction. 99) la liste est sans fin.
0 votes
@GerdWagner Re dans SO, la bonne réponse gagne à la fin. . Non. La montagne de preuves cohérentes est, dans l'OS, la réponse la plus populaire gagne, la réponse correcte est enterrée. La notion d'autorité, d'une réponse objectivement correcte, est rejetée. Vous et moi menons une bataille difficile contre le populisme.
1 votes
@PerformanceDBA J'ai bien peur que vous ayez raison, mais continuons à nous battre :-)
0 votes
@GerdWagner Pas moi. J'ai abandonné après le fiasco de l'année dernière. Puis ils ont commencé à censurer mes réponses, ce qui a tué tout intérêt restant. Maintenant, je ne garde que mes anciennes réponses propres.