Quelle est la différence entre association, agrégation et composition ? Veuillez expliquer en termes d'implémentation.
Réponses
Trop de publicités?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;
}
}
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.
- 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.
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
Analogie :
Composition : L'image suivante est une composition d'image, c'est-à-dire l'utilisation d'images individuelles pour en faire une seule.
Agrégation collection d'images en un seul endroit
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é.
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();
}
}
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.
- Réponses précédentes
- Plus de réponses