UML agrégation vs association

Me voici, avec une autre question sur l'agrégation et l'association. Je voulais apprendre quelques bases de UML, alors j'ai commencé à lire "UML distillée" par Martin Fowler. J'ai lu les deux chapitres sur les classes, et il y a une chose que je ne peux pas saisir totalement, je pense, c'est l'agrégation vs l'association. Dans le livre, il y a cette citation:

dans les jours pré-UML, les gens étaient généralement assez vague sur ce qui était agrégation et ce qui était Association. Qu'elles soient vagues ou non, elles étaient toujours incompatibles avec tout le monde. La suite, de nombreux modélisateurs pensent que l'agrégation est importante, mais pour des raisons différentes. Donc le UML agrégation incluse (Figure 5.3), mais avec peu de sémantique. Comme Jim Rumbaugh dit, "Penser as a modeling placebo " [Rumbaugh, référence UML].

comme je comprends de cette citation et des sujets que j'ai lu sur le débordement de pile, il n'a pas d'importance laquelle de ces deux relations j'utilise, elles signifient essentiellement la même chose, ou y a-t-il une situation où l'usage de l'agrégation au lieu de l'association serait justifié et/ou Je ne pourrais pas changer l'une à l'autre sans changer le "sens" d'un diagramme de classe?

je demande ceci, beacuse ce livre est de 2003, et certaines choses pourraient changer pendant ces quelques années.

47
demandé sur Tadeck 2012-03-10 00:55:58

8 réponses

la déclaration de Rumbaugh est la plus révélatrice et le bon conseil d'oncle Bob. Comme je l'ai dit ailleurs , L'agrégation est sémantiquement si faible qu'elle n'offre pratiquement rien de bénéfique. Il n'a qu'un seul cas de coin valable (acyclicity des relations récursives) cependant peu de gens savent et comprennent cela. Si vous finissez par avoir à signaler dans les commentaires de toute façon.

Je ne l'utilise pas. Et n'ai jamais ressenti aucune perte. Coller avec binaire simple les associations et de se concentrer sur ce qui compte vraiment - obtenir la cardinalité et le droit d'appellation. Vous obtiendrez beaucoup plus de cela que d'essayer de décider de l'association indécidable vs. agrégation.

hth.

26
répondu sfinnie 2017-05-23 12:17:41

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

la différence est une question d'implication. L'agrégation indique tout/partie relations alors que les associations ne sont pas. Cependant, il n'est pas susceptibles d'être beaucoup de différence dans la façon dont les deux relations sont mettre. Qui est, il serait très difficile de regarder le code et de déterminer si une relation particulière devrait être l'agrégation ou la 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ù tous les objets ont leur propre cycle de vie et il n'est pas propriétaire. Prenons un exemple de professeur et Étudiant. Plusieurs élèves peuvent s'associer avec un enseignant et de seul étudiant peut associé avec plusieurs enseignants, mais il n'y a pas de la propriété entre les objets et les deux ont leur propre cycle de vie. Les deux peut créer et supprimer indépendamment.

b) L'agrégation est une forme spécialisée d'Association où tous les objets ont leur propre cycle de vie, mais il y a la propriété et l'enfant l'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 ministères, mais si nous supprimons le ministère, l'enseignant de l'objet ne sera pas détruit. On peut penser à une relation "has-a".

[Maesh | GeeksWithBlogs]

29
répondu ChapMic 2012-11-23 08:43:59

j'ai tendance à utiliser L'agrégation pour montrer une relation qui est la même Qu'une Composition avec une grande distinction: la classe contenant n'est pas responsable du cycle de vie de l'objet contenu. Typiquement, un pointeur (non-null) ou une référence à l'objet-à-contenir est passé au constructeur de la classe containing. Objet contenant, pour la durée de son cycle de vie, dépend du contenu de l'objet existant. Objet contenant ne peut pas faire son travail (entièrement) sans le contenu de l'objet. C'est mon interprétation de la relation "partie/ensemble" qu'implique L'agrégation.

3
répondu M.McKenzie 2013-05-31 17:49:26

dans l'agrégation UML est sous-défini et puisqu'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" par Eric Evans.

E. g. une voiture a quatre roues. Vous pourriez vouloir calculer la quantité totale de mètres que chaque roue a conduit, pour chaque voiture. Ce calcul est fait par la voiture-entité, puisqu'elle sait quelles roues elle a et vous ne vous souciez pas quelles roues appartient à quelle voiture.

la voiture est la racine d'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, juste la racine.

donc fondamentalement une agrégation encapsule un ensemble de classes qui appartiennent à l'autre.

0
répondu Jan Gräfen 2012-03-10 13:09:10

de mise en Œuvre de sage, il y a pas beaucoup de différence mais, conceptuellement, il y a une grande différence: agrégats sont utilisés pour exprimer une hiérarchie . Lorsque vous travaillez avec une hiérarchie de composants, il y a certains types d'opérations que vous devez avoir dans l'interface racine:

  • trouver des sous-composants dans la hiérarchie
  • Ajouter / Supprimer des sous-composants à / de la hiérarchie
  • changement fréquent attributs de tous les composants
  • traverser la hiérarchie récursivement (motif visiteur)
  • reconfigurer la hiérarchie et les liens (associations) entre les composants

la plupart de ces opérations ne sont pas nécessaires lorsque l'on traite avec des associations.

0
répondu arpadf 2016-08-08 09:14:36

Ce terme est souvent confondu.

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

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

Classe: A (personne) et Classe: B (voiture) a relation d'association , si Classe: a une Classe:B déclaration, et aussi Classe:B(voiture) objet non essentielles pour créer un de la Classe:Un(personne) objet.

Classe:A (voiture) et Classe: B (pneumatique) a relation d'agrégation , si Classe: a une Classe:B déclaration, et aussi Classe:B(pneu) objet essentiel pour créer un de la Classe:Un(voiture) objet.

santé!

0
répondu dheeran 2017-03-01 10:17:49

pour ajouter, je suggérerais simplement de télécharger la spécification UML à partir du site OMG : meilleure référence Et Voir p. 110.

aucune N'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 la zone d'application et le modélisateur.

composite indique que la propriété est agrégée de façon composite, c'est-à-dire que la propriété est composite. objet a la responsabilité de l'existence et le stockage des objets composés (voir la définition des parties en 11.2.3).

0
répondu granier 2017-03-01 17:21:33

ils ne veulent pas dire la même chose! Je peux le dire de cette façon:

Association relationship : une classe renvoie à une autre classe. En fait, il montre qu'une classe est liée à une autre classe, mais ils n'ont pas nécessairement les attributs pour montrer cette relation... e.g Les classes "enseignant" et "étudiant", bien que la classe "enseignant" n'ait pas attribut qui se réfèrent aux étudiants, mais nous savons qu'en réalité un le professeur a des élèves... Et aussi la classe "École" a des "professeurs" et 'propriétés des étudiants' qui font maintenant ces deux classes liées à chaque autre.

relation D'agrégation : une classe contient une autre classe. Mais si le conteneur(salle de classe) est détruit, le contenu (chaise) ne l'est pas. En fait, la chaise appartient à la classe. L'agrégation est un plus relation que la relation D'Association.

voici aussi un tutoriel et tout L'UML2.0 ce qui explique tout facile et simple, vous pouvez le trouver utile: https://github.com/imalitavakoli/learn-uml2

conseil : permettez-moi également de mentionner que parce que le relation D'Association existe entre les classes la plupart du temps, nous ne le tirons pas parfois pour éviter la complexité inutile.

-1
répondu Ali 2016-08-06 19:28:30