web-dev-qa-db-fra.com

Association vs. Agrégation

J'ai passé en revue beaucoup d'informations sur ces choses, mais je ne comprends pas quelle est la différence entre elles. Dans FML, UML Distilled indique qu'aggréger n'a aucun sens, l'auteur recommande donc de ne pas l'utiliser dans les diagrammes ..__ Expliquez, s'il vous plaît, quand je devrais utiliser chacun d'eux et comment cela va influencer le code Java.

30
maks

C'est une question très discutable. Comme Martin explique dans la réponse , la commande regroupe le produit. Et cela peut être considéré comme vrai. Grady Booch, dans son "Analyse et conception orientées objet", propose un exemple similaire d'association: une vente est associée à des produits de cette vente, et inversement. Et une vente ne regroupe pas de produits. Tous les exemples doivent donc être spécifiques à un domaine, car d’un autre point de vue, l’association peut devenir plus spécifique. Un autre exemple est la composition de documents utilisant des paragraphes.

Donc, tout dans ce domaine dépend fortement du contexte. C'est la POO.

Vous pouvez essayer d'appliquer vos connaissances à un projet particulier que vous allez concevoir. Je vous recommanderais de lire le livre de Grady Booch, si vous ne l'avez pas encore fait. Beaucoup de livres ont été écrits depuis, mais c'est toujours la Bible de OO *.

10
khachik

Il existe quatre types de relations de classe

  1. Association: utilise un
    Ex: une classe Man utilise une classe Pen (le stylo est toujours là quand l'homme meurt)
  2. Agrégation: a un
    Ex: une classe Man a une classe Car (la voiture est Toujours là quand l'homme meurt)
  3. Composition: possède un
    Ex: une classe Man possède une classe Heart (Quand Man Meurt, coeur meurt)
  4. Héritage: est un
    Ex: une classe Man est une classe Human (l'homme est un humain)

Une relation entre les classes d'objets 

Héritage> Composition> Agrégation> Association

146
pohchen

Association signifie que deux classes ont une sorte de relation, pourrait être quelque chose de vraiment.

La composition et l'agrégation sont deux types d'associations. Le moyen le plus simple de les distinguer consiste à réfléchir à la "sévérité" de la relation. Pensez à ce qui se passe lorsque vous supprimez l'objet propriétaire.

Agrégation, l'objet agrégé continue à vivre. (Pensez à commander <-> le produit, le produit continue à vivre).

Composition, l'objet agrégé meurt avec le propriétaire. (Pensez paragraphes <-> document, les paragraphes meurent avec le document).

Une agrégation peut être considérée comme dépourvue de sens puisqu'il n'y a pas vraiment grande différence entre tracer une ligne avec une flèche non remplie (association) et une ligne avec un diamant non rempli (agrégation). Les relations sont très similaires. La ligne avec le diamant garni (composition) est cependant très différente.

24
Martin Algesten

La composition UML, l'agrégation et l'association simple sont des concepts sémantiques, pas des concepts de programmation. Leur signification peut être comprise comme suit:

  • Composition : A est constitué de B; B fait partie de A et ne peut donc exister sans A
  • Agrégation : A possède B, B appartient à A
  • Association : A utilise B, A est lié à B d'une manière donnée

(La composition et l'agrégation sont des types particuliers d'associations.)

En Java, vous pouvez tous les implémenter de la même manière. C'est une différence conceptuelle.

3
Kos

L'association est une relation entre des classes où les instances d'une classe ont une référence de champ à une instance d'une autre classe.

La composition est une relation "plus forte", ce qui signifie qu'une instance (parent) "en possède" une autre (enfant).

L'agrégation n'a pas d'autre sémantique que celle d'être une association.

Voir plus ici: http://martinfowler.com/bliki/AggregationAndComposition.html

EDIT: Vous pouvez ajouter une sémantique spéciale au symbole d’agrégation, telle que "Peut appartenir à un seul parent à la fois, mais peut changer de père ou être orphelin." Cependant, ces extensions sont les vôtres et ne sont pas définies en langage UML, à ma connaissance.

2
Goran Jovic

Il semble y avoir un débat sur la définition de Word.

Cela concerne les relations parent-enfant entre les objets et ce qui arrive aux enfants lorsque vous supprimez le parent.

Un scénario dit que les enfants n'ont pas de vie en dehors de celle de leurs parents, ils devraient donc être supprimés lorsque le parent est supprimé. Pensez "SUPPRIMER CASCADE" dans les clés étrangères et les bases de données relationnelles.

L'autre scénario dit que les enfants devraient persister au-delà de leurs parents, ils ne devraient donc pas être supprimés lorsque leur parent est supprimé.

Je laisserai aux autres le soin de déterminer quel mot décrit chaque situation.

0
duffymo