web-dev-qa-db-fra.com

Agrégation UML vs association

Me voici, avec une autre question sur l'agrégation et l'association. Je voulais apprendre quelques notions de base sur UML. J'ai donc commencé à lire "UML distillé" de Martin Fowler. J'ai lu les deux chapitres sur les classes et il y a une chose que je ne comprends pas bien, je pense, c'est l'agrégation contre l'association. Dans le livre, il y a cette citation:

Dans les jours précédant l'UML, les gens étaient généralement assez vagues sur ce qui constituait l'agrégation et ce qui était association. Qu'elles soient vagues ou non, elles étaient toujours incompatibles avec les autres. Par conséquent, de nombreux modélisateurs pensent que l'agrégation est importante, bien que pour des raisons différentes. Donc, le UML agrégation incluse (Figure 5.3) mais avec pratiquement aucune sémantique. Comme le dit Jim Rumbaugh, "Pensez-y Comme un placebo pour la modélisation" [Rumbaugh, Référence UML].

Si je comprends bien cette citation et les sujets que j'ai lus sur Stack Overflow, peu importe laquelle de ces deux relations que j'utilise, elles ont le même sens grave, ou existe-t-il une situation dans laquelle le recours à l'agrégation au lieu de l'association serait justifié et/ou je ne pouvais pas changer l'un pour l'autre sans changer le "sens" d'un diagramme de classes? 

Je pose la question suivante, car ce livre date de 2003 et certaines choses pourraient changer pendant ces quelques années.

47
Andna

La déclaration de Rumbaugh est la plus révélatrice et le bon conseil de Oncle Bob. Comme je l'ai dit ailleurs , l'agrégation est sémantiquement si faible qu'elle n'offre aucun avantage pratique. Il n'a qu'un seul cas valable (acyclicité des relations récursives), bien que peu de personnes le sachent et le comprennent. Donc, vous finissez par avoir à signaler dans les commentaires de toute façon.

Je ne l'utilise tout simplement pas. Et je n'ai jamais ressenti de perte. Tenez-vous en à des associations binaires simples et concentrez-vous sur ce qui compte vraiment: obtenir la cardinalité et nommer correctement. Vous obtiendrez beaucoup plus que cela en essayant de décider l'association indécidable ou l'agrégation.

hth.

26
sfinnie

Cela peut peut-être vous aider, mais je ne pense pas que vous trouverez l'explication parfaite:

La différence est une implication. L'agrégation désigne tout/partie les relations alors que les associations ne le font pas. Cependant, il n'y a pas sera probablement beaucoup de différence dans la façon dont les deux relations sont mis en œuvre. C'est-à-dire qu'il serait très difficile d'examiner le code et déterminer si une relation particulière devrait être agrégation ou association. Pour cette raison, il est assez sûr de ignorer complètement la relation d'agrégation. 
[Robert C. Martin | UML]

Et un exemple pour chaque situation:

a) L'association est une relation où chaque objet a son propre cycle de vie et il n'y a pas de propriétaire. Prenons un exemple de Maître et Étudiant. Plusieurs étudiants peuvent s'associer à un seul enseignant et à un seul étudiant peut s'associer à plusieurs enseignants, mais il n'y a pas de la propriété entre les objets et les deux ont leur propre cycle de vie. Tous les deux peut créer et supprimer indépendamment.

b) L'agrégation est une forme d'association spécialisée dans laquelle chaque objet a son propre cycle de vie mais où il y a propriété et enfant objet ne peut pas appartenir à un autre objet parent. Prenons un exemple de département et enseignant. Un seul enseignant ne peut pas appartenir à plusieurs départements, mais si nous supprimons le département, l'objet enseignant ne sera pas détruit. Nous pouvons penser à une relation "a-a".
[Maesh | GeeksWithBlogs]

29
ChapMic

J'ai tendance à utiliser Agrégation pour montrer une relation identique à une composition avec une grande distinction: la classe contenante n'est PAS responsable du cycle de vie de l'objet contenu. En règle générale, un pointeur (non nul) ou une référence à l'objet à contenir est transmis au constructeur de la classe qui le contient. L'objet contenant, pour la durée de son cycle de vie, dépend de l'objet contenu existant. L'objet contenant ne peut pas faire son travail (entièrement) sans l'objet contenu. C’est mon interprétation de la relation "Part/Whole" impliquée par l’agrégation.

3
M.McKenzie

Ce terme devient souvent confus. 

L'agrégation et la composition sont quelques-uns des types d'association. Il y a guère de différence entre agrégations et associations pendant mise en œuvre, et beaucoup vont ignorer les relations d'agrégation dans leurs diagrammes avec relation d'association.

Vous pouvez avoir l'idée de cette analogie.

Classe: A (personne) et Classe: B (voiture) a relation d'association , si Class: A a une déclaration Class: B, ainsi que Class: B (voiture) l'objet est n'est pas indispensable pour créer un Class: A (personne) objet.

Classe: A (voiture) et Classe: B (pneu) a relation d'agrégation , si Classe: A a une déclaration Classe: B, ainsi que Classe: B (pneu) objet est essentiel pour créer un Classe: A (voiture) objet.

À votre santé!

0
dheeran

En UML, l'agrégation est sous-définie et, comme ils n'ont pas de sémantique clairement définie, . Un cas d'utilisation valide d'une agrégation est l'encapsulation de plusieurs classes, comme indiqué dans "Domain Driven Design" de Eric Evans.

Par exemple. une voiture a quatre roues… Vous pouvez calculer le nombre total de mètres que chaque roue a parcourus, pour chaque voiture… .. Ce calcul est effectué par la voiture, car elle sait quelles roues elle a et vous. ne vous souciez pas des roues qui appartiennent à quelle voiture.

La voiture est la racine de l'agrégation pour toutes ses pièces, comme les roues, et vous ne pouvez pas accéder aux pièces d'une voiture de l'extérieur de l'agrégation, mais uniquement de la racine.

Donc, fondamentalement, une agrégation encapsule un ensemble de classes qui appartiennent les unes aux autres.

0
Jan Gräfen

Du point de vue de la mise en œuvre, il n’ya pas beaucoup de différence, mais conceptuellement, il y a une grande différence: les agrégations sont utilisées pour exprimer une hiérarchie . Lorsque vous travaillez avec une hiérarchie de composants, vous devez avoir certains types d'opérations dans l'interface racine:

  • rechercher des sous-composants dans la hiérarchie
  • ajouter/supprimer des sous-composants à/de la hiérarchie
  • changer les attributs communs de tous les composants
  • parcourir la hiérarchie de manière récursive (modèle de visiteur)
  • reconfigurer la hiérarchie et les liens (associations) entre les composants

La plupart de ces opérations ne sont pas nécessaires lorsqu'il s'agit d'associations.

0
arpadf

Pour ajouter, je suggérerais simplement de télécharger la spécification UML depuis le site OMG: meilleure référence, voir p. 110.

none Indique que la propriété n'a pas de sémantique d'agrégation.

shared Indique que la propriété a une sémantique d'agrégation partagée. La sémantique précise de l'agrégation partagée varie selon le domaine d'application et le modélisateur.

composite Indique que la propriété est agrégée de manière composite, c'est-à-dire que l'objet composite est responsable de l'existence et du stockage des objets composés (voir la définition des pièces au 11.2.3).

0
granier