501 votes

Quelle est la différence entre association, agrégation et composition ?

Quelle est la différence entre association, agrégation et composition ? Veuillez expliquer en termes d'implémentation.

531voto

Jeff Foster Points 22175

Pour deux objets, Foo y Bar les relations peuvent être définies

Association - J'ai une relation avec un objet. Foo utilise Bar

public class Foo {         
    private Bar bar;
};

NB : Voir La définition de Fowler - la clé est que Bar est sémantiquement lié à Foo plutôt qu'une simple dépendance (comme un int o string ).

Composition - Je suis propriétaire d'un objet et je suis responsable de sa durée de vie. Lorsque Foo meurt, ainsi que Bar

public class Foo {
    private Bar bar = new Bar(); 
}

Agrégation - J'ai un objet que j'ai emprunté à quelqu'un d'autre. Quand Foo meurt, Bar peut continuer à vivre.

public class Foo { 
    private Bar bar; 
    Foo(Bar bar) { 
       this.bar = bar; 
    }
}

172voto

Aniket Thakur Points 10135

Je sais que cette question est étiquetée C# mais les concepts sont assez génériques. des questions comme celle-ci rediriger ici. Je vais donc donner mon point de vue ici (un peu biaisé du point de vue de la Java où je suis plus à l'aise).

Lorsque nous pensons à la nature orientée objet, nous pensons toujours aux objets, aux classes (plans d'objets) et à la relation entre eux. Les objets sont liés et interagissent les uns avec les autres via des méthodes. En d'autres termes, l'objet d'une classe peut utiliser les services/méthodes fournis par l'objet d'une autre classe. Ce type de relation est appelé association. .

L'agrégation et la composition sont des sous-ensembles de l'association. ce qui signifie qu'il s'agit de cas spécifiques d'association.

enter image description here

  • Tant dans l'agrégation que dans la composition l'objet d'une classe "possède" l'objet d'une autre classe .
  • Mais il y a une différence subtile. Sur Composition l'objet de la classe qui est possédé par l'objet de la classe qui le possède. ne peut pas vivre seul (également appelé "relation de mort"). Il vivra toujours en tant que partie de l'objet qui le possède, alors que dans le cas d'une relation de mort, la relation de mort n'existe pas. Agrégation l'objet dépendant est autonome et peut exister même si l'objet de la classe propriétaire est mort.
  • Ainsi, dans la composition, si l'objet propriétaire est ramassé, l'objet propriétaire le sera aussi, ce qui n'est pas le cas dans l'agrégation.

Confus ?

Exemple de composition : Prenons l'exemple d'une Voiture et d'un moteur qui est très spécifique à cette voiture (ce qui signifie qu'il ne peut être utilisé dans aucune autre voiture). Ce type de relation entre Voiture y Moteur spécifique est appelée "composition". Un objet de la classe Car ne peut exister sans un objet de la classe SpecificEngine et l'objet de SpecificEngine n'a aucune signification sans la classe Car. En d'autres termes, la classe Car est la seule à "posséder" la classe SpecificEngine.

Exemple d'agrégation : Considérons maintenant la classe Voiture et la classe Roue . La voiture a besoin d'un objet Roue pour fonctionner. Cela signifie que l'objet Voiture possède l'objet Roue mais nous ne pouvons pas dire que l'objet Roue n'a aucune signification sans l'objet Voiture. Il peut très bien être utilisé dans un vélo, un camion ou un autre objet voiture.

Pour résumer -

En résumé, l'association est un terme très générique utilisé pour représenter le cas où une classe utilise les fonctionnalités fournies par une autre classe. Nous disons qu'il y a composition si un objet de classe parent possède un autre objet de classe enfant et que cet objet de classe enfant ne peut pas exister de manière significative sans l'objet de classe parent. Si c'est le cas, on parle d'agrégation.

Plus de détails ici. Je suis l'auteur de http://opensourceforgeeks.blogspot.in et j'ai ajouté un lien ci-dessus vers l'article concerné pour plus de contexte.

141voto

premraj Points 120

Association est un concept généralisé de relations. Il comprend à la fois la composition et l'agrégation.

Composition ( mélange ) est un moyen d'envelopper des objets ou des types de données simples dans un fichier de type unité simple . Les compositions sont un élément essentiel de nombreuses structures de données de base.

Agrégation ( La formation d'un certain nombre d'éléments en un groupe. ) diffère de la composition ordinaire en ce qu'elle n'implique pas la propriété. Dans la composition, lorsque l'objet propriétaire est détruit, les objets contenus le sont aussi. Dans l'agrégation, ce n'est pas nécessairement le cas.

Une astuce pour se souvenir de la différence :

  • "A A " : A ggregation
  • " P art- O f" : c O m P ositoin
  • " I s-a" : I nheritance

contexto

Agrégation

Composition

Durée de vie

les objets ont leur propre durée de vie et il n'y a pas de propriétaire

contrôlé par l'ensemble ou la société mère qui le possède

Portée

les objets parents et les objets enfants sont indépendants

l'objet parent signifie aussi la mort de ses enfants.

Relationship

A un

Partie de

Force

relation faible

une relation forte.

Exemple concret

Car and Driver

Voiture et roues

Observons maintenant l'image suivante

relations

enter image description here

Analogie :

Composition : L'image suivante est une composition d'image, c'est-à-dire l'utilisation d'images individuelles pour en faire une seule.
enter image description here

Agrégation collection d'images en un seul endroit

enter image description here

Par exemple, Une université possède plusieurs départements, et chaque département a un certain nombre de professeurs. Si l'université ferme, les départements n'existeront plus, mais les professeurs de ces départements continueront d'exister. Par conséquent, une université peut être considérée comme une composition de départements, tandis que les départements sont une agrégation de professeurs. En outre, un professeur peut travailler dans plus d'un département, mais un département ne peut faire partie de plus d'une université.

106voto

Dépendance (références)
Cela signifie qu'il n'y a pas de lien conceptuel entre deux objets. Par exemple, l'objet EnrollmentService fait référence aux objets Student et Course (comme paramètres de méthode ou types de retour).

public class EnrollmentService {
    public void enroll(Student s, Course c){}
}

Association (has-a)
Cela signifie qu'il existe presque toujours un lien entre les objets (ils sont associés). Objet de l'ordre a un Objet client

public class Order {
    private Customer customer
}

Agrégation (has-a + whole-part)
Type particulier d'association dans lequel il existe une relation de type "tout-partie" entre deux objets. Ils pourraient cependant vivre l'un sans l'autre.

public class PlayList {
    private List<Song> songs;
}

OU

public class Computer {
    private Monitor monitor;
}

Note : la partie la plus délicate est de distinguer l'agrégation de l'association normale. Honnêtement, je pense que c'est ouvert à différentes interprétations.

Composition (has-a + whole-part + propriété)
Un type particulier d'agrégation. Un site Apartment est composé de quelques Room s. A Room ne peut exister sans un Apartment . lorsqu'un appartement est supprimé, toutes les pièces associées sont également supprimées.

public class Apartment{
    private Room bedroom;
    public Apartment() {
       bedroom = new Room();
    }
}

54voto

Varun Gupta Points 767

Association est une relation où tous les objets ont leur propre cycle de vie et où il n'y a pas de propriétaire. Prenons l'exemple d'un professeur et d'un étudiant. Plusieurs étudiants peuvent s'associer à un seul professeur et un seul étudiant peut s'associer à plusieurs professeurs, mais il n'y a pas de propriétaire entre les objets et tous deux ont leur propre cycle de vie. Ils peuvent tous deux être créés et supprimés indépendamment.

Agrégation est une forme spécialisée d'association où tous les objets ont leur propre cycle de vie, mais il y a une propriété et les objets enfants ne peuvent pas appartenir à un autre objet parent. Prenons l'exemple du département et du professeur. Un seul professeur ne peut pas appartenir à plusieurs départements, mais si nous supprimons le département, l'objet professeur sera pas être détruit. On peut y voir une relation de type "has-a".

Composition est une autre forme spécialisée d'agrégation et nous pouvons l'appeler une relation de "mort". Il s'agit d'un type d'agrégation fort. L'objet enfant n'a pas son propre cycle de vie et si l'objet parent est supprimé, tous les objets enfants le seront également. Prenons à nouveau l'exemple de la relation entre Maison et Pièces. Une maison peut contenir plusieurs pièces - il n'y a pas de vie indépendante de la pièce et une pièce ne peut pas appartenir à deux maisons différentes. Si nous supprimons la maison, la chambre sera automatiquement supprimée. Prenons un autre exemple : la relation entre Questions et Options. Une seule question peut avoir plusieurs options et une option ne peut pas appartenir à plusieurs questions. Si nous supprimons des questions, les options seront automatiquement supprimées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X