Quelle est la différence entre l'association, d'agrégation et de composition?
Quelle est la différence entre l'association, d'agrégation et de composition?
Veuillez expliquer en termes de mise en œuvre.
- Cela peut être un peu déroutant pour un débutant, mais prendre une petite promenade à travers UML 2 Superstructure spec: omg.org/docs/formal/09-02-02.pdf Section 7.3.3 pour l'Association
- Je dois aussi ajouter, dans UML 2 il n'y a aucun Élément que l'Agrégation ou de Composition (c'était en UML 1.4 si). En UML 2, agrégation/compositions sont mises en œuvre comme l'Association d'éléments avec la AggregationKind ensemble de propriétés pour qu'il soit Partagé ou Composite.
- Beaucoup de réponses sur la DONC déjà: stackoverflow.com/search?q=aggregation+and+composition
- article utile ici codeproject.com/Articles/22769/...
- Je sais que cela a déjà été répondu à plusieurs reprises, mais je sens la meilleure explication que j'ai jamais lu sur le sujet est celui-ci: holub.com/goodies/uml/#composition
- Lorsque nous avons toute relation entre des objets, que l'on appelle de l'Association. L'agrégation et la Composition sont spécialisés de l'Association. La Composition est à nouveau se spécialisent forme d'Agrégation. javabench.in/2011/08/difference-between-association.html
Vous devez vous connecter pour publier un commentaire.
Pour les deux objets,
Foo
etBar
les relations peuvent être définisAssociation - j'ai une relation avec un objet.
Foo
utiliseBar
Composition - je posséder un objet et je suis responsable de sa durée de vie. Lorsque
Foo
meurt, pour neBar
Agrégation - j'ai un objet qui j'ai emprunté à quelqu'un d'autre. Lorsque
Foo
meurt,Bar
peut vivre.Bar
objet susceptible de vivre.Je sais que cette question est étiqueté comme C#, mais les concepts sont assez génériques des questions de ce genre rediriger ici. Donc, je vais donner mon point de vue ici (un peu biaisée de java point de vue où je suis plus à l'aise).
Quand on pense orientée Objet, la nature on pense toujours à des Objets de la classe (objets bleus) et les relations entre eux. Les objets sont liés et interagissent les uns avec les autres par l'intermédiaire des méthodes. En d'autres termes l'objet d'une classe peut utiliser les services/les méthodes fournies par l'objet d'une autre classe. Ce type de relation est appelée aussi association..
L'agrégation et la Composition sont des sous-ensembles de l'association ce qui signifie qu'ils sont des cas particuliers de l'association.
Confus?
Exemple de Composition : prenons l'exemple d'une Voiture et un moteur qui est très spécifique à la voiture (ce qui signifie qu'il ne peut pas être utilisé dans n'importe quelle autre voiture). Ce type de relation entre Voiture et SpecificEngine classe est appelée Composition. Un objet de la classe Voiture ne peut pas exister sans un objet de SpecificEngine classe et l'objet de la SpecificEngine n'a pas de signification sans classe de Voiture. À mettre en mots simples Voiture de classe uniquement le "propriétaire" du SpecificEngine classe.
Agrégation Exemple : considérons Maintenant la classe Voiture et de la classe Roue. Voiture a besoin d'une Roue de l'objet à la fonction. Sens la Voiture objet possède la Roue de l'objet, mais on ne peut pas dire que la Roue de l'objet n'a pas de signification de la Voiture sans Objet. Il peut très bien être utilisé sur un Vélo, de Camions ou de Voitures différentes de l'Objet.
En résumé -
Pour résumer, l'association est une très terme générique utilisé pour représenter lorsqu'une classe utilise les fonctionnalités fournies par une autre classe. Nous dire que c'est la composition si l'un des parents de la classe de l'objet possède un autre enfant de la classe de l'objet et que les enfants de la classe de l'objet ne peut véritablement exister sans le parent de la classe de l'objet. Si il peut, puis il est appelé Agrégation.
Plus de détails ici.
Je suis l'auteur de http://opensourceforgeeks.blogspot.in et avons ajouté un lien ci-dessus à la poste pour plus de contexte.
death relationship
- effrayant nom mais facile à retenir pour la composition de la relation.Association est concept généralisé des relations. Il comprend à la fois la Composition et de l'Agrégation.
Composition(mélange) est un moyen pour envelopper des objets simples ou des types de données dans un seule unité. Les Compositions sont une composante essentielle de nombreuses structures de données de base
Agrégation(collection) diffère de l'ordinaire de la composition, en ce qu'elle n'implique pas la propriété. Dans la composition, lorsque le propriétaire de l'objet est détruit, ainsi que les objets contenus. Dans l'agrégation, ce n'est pas nécessairement vrai.
Truc pour se souvenir de la différence : a Un -Unggregation et Own - cOmpositoin
Maintenant, laissez-observer l'image suivante
Analogie:
Composition: L'image ci-dessous est la composition de l'image c'est à dire en utilisant des images de faire une image.
Agrégation : collection de l'image dans l'emplacement unique
Par exemple, Une université est propriétaire de divers ministères, et chaque département a un certain nombre de professeurs. Si l'université se ferme, les ministères n'existe plus, mais les professeurs dans les départements continueront à exister. Par conséquent, une Université peut être vu comme une composition de départements, alors que les ministères ont une agrégation des professeurs. En outre, un Professeur peut travailler dans plus d'un département, mais un ministère ne peut pas faire partie de plus d'une université.
Dépendance (références)
Il n'y a pas de lien conceptuel entre deux objets. par exemple, EnrollmentService les références de l'objet d'Étudiants & objets de Cours (comme les paramètres de la méthode ou des types de retour)
Association (a-a)
Il n'y a presque toujours un lien entre les objets (ils sont liés).
Afin d'objet a un Client de l'objet
Agrégation (a-a + tout-partie)
Genre spécial de l'association, où il y a toute la partie de la relation entre les deux objets. ils pourraient vivre l'un sans l'autre si.
Remarque: la partie la plus délicate est à distinguer de l'agrégation de la normale de l'association. Honnêtement, je pense que c'est ouvert à différentes interprétations.
Composition (a-a + pour la pièce entière + de propriété)
Genre spécial de l'agrégation. Un
Apartment
est composé de quelquesRoom
s. UnRoom
ne peut exister sans unApartment
. lorsqu'un appartement est supprimé, tous les associés les chambres sont supprimées.À partir d'un poste par Robert Martin dans comp.objet:
Association représente la capacité d'un exemple pour envoyer un message à une autre instance. C'est généralement mis en œuvre avec un pointeur ou une référence de variable d'instance, bien qu'il puisse également être mis en œuvre comme un argument de méthode, ou la création d'une variable locale.
Agrégation [...] est typique de l'ensemble de la/partie de la relation. C'est exactement le même que l'association avec l'exception que les instances ne peuvent pas avoir cyclique d'agrégation de liens (c'est à dire une partie ne peut pas contenir son ensemble).
Le fait que c'est l'agrégation signifie que les instances de Nœud ne peut pas former un cycle. Donc, c'est un Arbre de Noeuds, et non un graphe de Nœuds.
Composition [...] c'est exactement comme l'Agrégation, sauf que la durée de vie de la partie est contrôlée par la "totalité". Ce contrôle peut être direct ou transitive. C'est, l '"ensemble" peut assumer la responsabilité directe de la création ou de la destruction de la partie, ou il peut accepter un déjà créé une partie, et, plus tard, de le transmettre à un autre ensemble qui en assume la responsabilité.
Comme les autres ont dit, une association est une relation entre des objets, l'agrégation et la composition sont des types d'association.
À partir d'une mise en œuvre d'un point de vue de l'agrégation est obtenue par la présence d'un membre de la classe par référence. Par exemple, si la classe A des agrégats d'un objet de la classe B, vous aurez quelque chose comme ceci (en C++):
La sémantique de l'agrégation, c'est que lorsqu'Un objet est détruit, l'objet B, il est le stockage sera toujours là. Lors de l'utilisation de la composition, vous avez une relation plus forte, généralement en stockant le membre en valeur:
Ici, lorsqu'Un objet est détruit, l'objet B, il contient sera détruite aussi. La façon la plus simple d'y parvenir est par le stockage de la membre de la valeur, mais vous pouvez également utiliser certains pointeur intelligent, ou de supprimer le membre dans le destructeur:
Le point important est que, dans une composition, l'objet conteneur possède le contenu de l'un, tandis que dans l'agrégation, il références il.
Il est incroyable de voir comment beaucoup de confusion existe à propos de la distinction entre les trois relations concepts association, agrégation et composition.
Avis que les termes agrégation et composition ont été utilisés dans le C++ de la communauté, probablement pendant un certain temps avant qu'ils ont été définis comme des cas particuliers de association dans des Diagrammes de Classe UML.
Le principal problème est la pratique généralisée et permanente de l'incompréhension (même parmi les experts des développeurs de logiciels) que le concept de composition implique un cycle de vie de dépendance entre le tout et ses parties, tels que les pièces ne peut pas exister sans l'ensemble, en ignorant le fait qu'il y a aussi des cas de partie-tout-les associations avec les non-partageable des pièces où les pièces peuvent se détacher, et de survivre à la destruction de la totalité.
Aussi loin que je peux voir, cette confusion a deux racines:
Dans le C++ de la communauté, le terme "d'agrégation" était utilisé dans le sens d'une classe définissant un attribut pour le référencement des objets d'une autre catégorie des indépendants (voir, par exemple, [1]), qui est le sens de association dans des Diagrammes de Classe UML. Le terme "composition" a été utilisé pour les classes qui définissent des objets composant pour leurs objets, tels que la destruction de l'objet composite, ces objets sont détruits.
Dans des Diagrammes de Classe UML, "l'agrégation" et "composition" ont été définis comme des cas particuliers, des associations représentant les partie-tout relations (ce qui a été débattu en philosophie depuis longtemps). Dans leurs définitions, la distinction entre une "agrégation" et une "composition" est basée sur le fait que si elle permet le partage d'une partie entre deux ou plusieurs ensembles. Ils définissent les "compositions" comme ayant non partageable (exclusif) les pièces, tandis que les "agrégats" peuvent partager leurs pièces. En outre, ils disent quelque chose comme: très souvent, mais pas dans tous les cas, les compositions viennent avec un cycle de vie de dépendance entre le tout et ses parties, tels que les pièces ne peut pas exister sans l'ensemble.
Ainsi, alors que l'UML a mis les termes "d'agrégation" et "composition", dans le bon contexte (de la partie-ensemble de relations), ils n'ont pas réussi à les définir d'une manière claire et non équivoque, de capturer les intuitions de développeurs. Cependant, ce n'est pas surprenant, car il ya tellement de nombreuses propriétés différentes (et la mise en œuvre des nuances) ces relations peuvent avoir, et les développeurs ne pas aggree sur la façon de les mettre en œuvre.
Voir aussi mon extension de réponse à la question de l'Apr 2009 énumérés ci-dessous.
Et de la propriété, qui a été assumée à définir la "composition" entre la programmation orientée objet, les objets en C++ de la communauté (et toujours cette croyance largement répandue): le moment de l'exécution du cycle de vie de dépendance entre les deux objets (le composite et de ses composants), n'est pas vraiment caractéristique de la "composition" parce que nous pouvons avoir de telles dépendances en raison de l'intégrité référentielle également dans d'autres types d'associations.
Par exemple, le code suivant modèle pour la "composition" a été proposé dans une SORTE de réponse:
L'intimé a allégué qu'il serait caractéristique de la "composition" qu'aucune autre classe pourrait renvoyer à savoir le composant. Cependant, ce n'est certainement pas vrai pour tous les cas possibles de "composition". En particulier, dans le cas d'un moteur de voiture, le fabricant de la voiture, éventuellement mis en œuvre avec l'aide d'une autre classe, peut avoir pour référence le moteur pour être capable de communiquer avec le propriétaire de la voiture à chaque fois qu'il y a un problème avec elle.
[1] http://www.learncpp.com/cpp-tutorial/103-aggregation/
Annexe - liste Incomplète, à plusieurs reprises, posé des questions à propos de la composition rapport à l'agrégation sur StackOverflow
[Avr 2009]
L'agrégation rapport à la Composition [fermé comme principalement par opinion par]
[Avr 2009]
Quelle est la différence entre la Composition et la relation d'Association?
[Mai 2009]
La différence entre l'association, d'agrégation et de composition
[Mai 2009]
Quelle est la différence entre composition et agrégation? [dupliquer]
[Oct 2009]
Quelle est la différence entre l'agrégation, de la composition et de la dépendance? [marqué comme duplicate]
[Nov 2010]
Association contre l'Agrégation [marqué comme duplicate]
[Août 2012]
La mise en œuvre de la différence entre l'Agrégation et la Composition en Java
[Fév 2015]
Le langage de modélisation UML de l'association ou de l'agrégation (de simples fragments de code)
Association
Association représente la relation entre les deux classes.Il peut être unidirectionnelle(d'une manière) ou bidirectionnelle(two way)
par exemple:
Agrégation
Agrégation est une forme d'association.Mais avec des caractéristiques spécifiques.L'agrégation est la relation dans un grand "tout" classe contient un ou plusieurs petites "pièces" des classes.À l'inverse, une plus petite "partie" de la classe est une partie de "tout" le plus grand de la classe.
par exemple:
Un club("ensemble") est composé de plusieurs membres du club("parties").Les membres de la vie à l'extérieur du club. Si le club("ensemble") étaient à mourir, les membres("parties") ne serait pas mourir avec elle. Parce que les membres peuvent appartenir à plusieurs clubs("ensemble").
Composition
C'est une forme plus forte de l'agrégation."Ensemble" est responsable pour la création ou la destruction de ses "parties"
Par exemple:
Dans ce cas l'école("ensemble") étaient à mourir, département("parties") mourrait avec elle.
Car chaque partie peut appartenir qu'à un seul "ensemble".
class Club(){ _member = new Member }
ou passer en tant que référenceclass Club(){ addMember(Member member) { this._member = member } }
Il est important de comprendre pourquoi devrions-nous pris la peine avec l'aide de plus d'une fois la ligne de relation. La raison la plus évidente est de décrire la relation parent-enfant entre les classes (quand parent a supprimé tous ses enfants sont supprimées), mais plus impotently, nous voulons distinguer entre la simple association et la composition afin de placer implicite des restrictions sur la visibilité et la propagation des modifications sur les classes associées, une question qui joue un rôle important dans la compréhension de et la réduction de la complexité du système.
Le plus abstrait façon de décrire statique de la relation entre les classes en utilisant le lien d'Association, qui dit simplement qu'il y a une sorte de lien ou un lien de dépendance entre deux classes ou plus.
Faible Association
ClassA peut être liée à ClassB, afin de montrer que l'une de ses méthodes incluent le paramètre de ClassB exemple, ou retourne l'instance de ClassB.
Forte Association
ClassA peut également être lié à ClassB, afin de montrer qu'il contient une référence à ClassB instance.
Dans les cas où il y a une partie de la relation entre les ClassA (ensemble) et ClassB (partie), nous pouvons être plus précis et l'utilisation de l'agrégation de lien à la place du lien d'association, soulignant que ClassB peuvent aussi être regroupés par les autres classes de l'application (et donc de l'agrégation est également connu comme partagé de l'association).
Il est important de noter que l'agrégation de lien ne fait pas état d'une quelconque manière que ClassA possède ClassB, ni qu'il existe une relation parent-enfant (lorsque le parent a supprimé tous ses enfants sont en train d'être supprimé) entre les deux. En fait, bien au contraire! L'agrégation de lien, habituellement utilisé pour souligner le fait que ClassA n'est pas exclusif, le conteneur de ClassB, comme en fait ClassB a un autre récipient.
Agrégation c. s. Association
Le lien d'association peut remplacer l'agrégation de lien dans chaque situation, tandis que l'agrégation ne peut pas remplacer l'association dans les situations où il n'y a qu'un "maillon faible" entre les classes, c'est à dire ClassA a la méthode/s paramètre de ClassB mais ClassA n'a pas de référence à ClassB instance.
Martin Fowler suggèrent que l'agrégation de lien ne doit pas être utilisé parce qu'il n'a pas de valeur ajoutée et perturbe la cohérence, Citant les propos de Jim Rumbaugh "Penser comme à une modélisation placebo".
Nous devrions être plus précis et l'utilisation de la composition de lien dans les cas où, en plus de la partie de la relation entre les ClassA et ClassB - il y a de fortes du cycle de vie de dépendance entre les deux, ce qui signifie que lorsque ClassA est supprimé puis ClassB est également supprimé
La composition lien montre qu'une classe (conteneur, ensemble) est la propriété exclusive de l'autre classe/s (pièces), ce qui signifie que le conteneur de l'objet et de ses parties, constituent un parent-enfant/s de la relation.
Contrairement à d'association et d'agrégation, lors de l'utilisation de la composition de la relation, le composé de la classe ne peut pas apparaître comme un type de retour ou d'un paramètre de type de composite de classe. Ainsi, les changements de la composition de classe ne peut pas se propager au reste du système. Par conséquent, l'utilisation de la composition des limites de la complexité de la croissance la croissance du système.
La complexité du système peut être mesurée simplement en regardant un diagramme de classe UML et de l'évaluation de l'association, d'agrégation et de composition de la relation lignes. La façon de mesurer la complexité est de déterminer le nombre de classes peut être affectée par la modification d'une classe particulière. Si la classe A expose de classe B, puis une classe qui utilise la classe A peut théoriquement être touchés par les modifications apportées à la classe B. La somme du nombre de potentiellement concernés des classes pour chaque classe dans le système est le total de la complexité du système.
Vous pouvez en lire plus sur mon blog:
http://aviadezra.blogspot.com/2009/05/uml-association-aggregation-composition.html
class Person() { private hand = new Hand }
. Sommeil agrégation Personneclass Person() { private sleep = new Sleep }
Est valable utilisation de la touche "nouveau" dans le Sommeil? ou dois-je passer comme référence, car il est en agrégation?class Person() { private Sleep _sleep; public addSleep(Sleep sleep) { this._sleep = sleep} }
Composition (Si vous supprimez "ensemble", “partie” est également supprimé automatiquement de la “Propriété”)
De créer des objets de votre classe à l'intérieur de la nouvelle classe. Cela s'appelle de la composition, parce que la nouvelle de la classe est composée d'objets de classes existantes.
Généralement l'utilisation normale des variables membres.
Pouvez utiliser les valeurs de pointeur si la composition de la classe gère automatiquement l'allocation/désallocation responsable de la création/destruction de sous-classes.
Composition en C++
Sortie
Agrégation (Si vous supprimez "ensemble", “Partie” peut exister, “ Pas de Propriété”)
Une agrégation est un type spécifique de composition où aucun droit de propriété entre l'objet complexe et les sous-objets est implicite. Quand un agrégat est détruit, les sous-objets ne sont pas détruits.
Généralement utiliser le pointeur de variables/variable de référence qui pointent vers un objet qui vit à l'extérieur de la portée de l'ensemble de la classe
Pouvez utiliser des valeurs de référence qui pointent vers un objet qui vit à l'extérieur de la portée de l'ensemble de la classe
Pas responsable de la création et de détruire les sous-classes
Agrégation de Code en C++
Sortie
Je pense que ce lien va faire tes devoirs: http://ootips.org/uml-hasa.html
Pour comprendre les termes je me souviens d'un exemple dans mes premiers jours de programmation:
Si vous avez un "échiquier" objet qui contient des " box "des objets qui est composition car si l '"échiquier" est supprimé, il n'y a aucune raison pour que les boîtes existent plus.
Si vous avez un 'carré' objet qui ont une 'couleur' de l'objet et la place est supprimé de la 'couleur' de l'objet peut toujours exister, c'est-à agrégation
Deux d'entre eux sont associations, la principale différence est conceptuel
Problème avec ces réponses, c'est qu'ils sont la moitié de l'histoire: ils expliquent que l'agrégation et la composition sont des formes d'association, mais ils ne disent pas si c'est possible pour une association d'être ni de ceux-ci.
Je rassemble basée sur quelques lectures de nombreux postes sur et que certains UML docs qu'il y a 4 principales formes concrètes de l'association de la classe:
Quand une relation entre deux entités n'est pas un de ces, il peut juste être appelé "une association au sens générique du terme, et décrit d'autres méthodes (remarque, stéréotype, etc).
Ma conjecture est que le "générique de" l'association est destiné à être utilisé principalement dans deux cas:
Composition:
C'est là une fois que vous détruisez un objet (l'École), un autre objet (salles de Classe) qui est lié à elle auraient détruit aussi. Deux d'entre eux ne peuvent pas exister indépendamment.
Agrégation:
C'est sorta l'exact opposé de ce qui précède (
Composition
) association où une fois que vous tuez un objet (Company
), l'autre objet (Employees
) qui est lié à elle peut exister sur son propre.Association.
La Composition et l'Agrégation sont les deux formes d'association.
J'aimerais illustrer comment les trois termes sont mis en œuvre dans les Rails. ActiveRecord appels de n'importe quel type de relation entre deux modèles une
association
. On ne pourrait pas trouver très souvent les termescomposition
etaggregation
, lors de la lecture de documents ou d'articles liés à ActiveRecord. Une association est créée par l'ajout de l'association à la classe des macros pour le corps de la classe. Certains de ces macros sontbelongs_to
,has_one
,has_many
etc..Si nous voulons mettre en place un
composition
ouaggregation
, nous avons besoin d'ajouterbelongs_to
à la propriété modèle (également appelé enfant) ethas_one
ouhas_many
pour le propriétaire modèle (également appelée "société mère"). Si nous avons mis en placecomposition
ouaggregation
dépend des options que nous passons à labelongs_to
appel dans le modèle de l'enfant. Avant de Rails 5, la configuration debelongs_to
sans les options créé unaggregation
, l'enfant pourrait exister sans un parent. Si nous voulions uncomposition
, nous avons besoin de déclarer explicitement par l'ajout de l'optionrequired: true
:Dans les Rails 5 ce qui a changé. Maintenant, la déclaration d'une
belongs_to
association crée uncomposition
par défaut, l'enfant ne peut exister sans un parent. Ainsi l'exemple ci-dessus peut être réécrite sous la forme:Si nous voulons permettre à l'enfant de l'objet à exister sans un parent, nous avons besoin de le déclarer explicitement via l'option
optional
Dans un très simple phrase:
L'agrégation et la Composition sont des sous-ensembles de l'association.
A utilise B -> c'est une agrégation
Des besoins B -> est de la composition.
Lire plus ici.