Was ist der Unterschied zwischen Assoziation, Aggregation und Komposition? Erläutern Sie dies bitte anhand der Implementierung.
Antworten
Zu viele Anzeigen?Für zwei Objekte, Foo
y Bar
die Beziehungen können definiert werden
Verein - Ich habe eine Beziehung zu einem Objekt. Foo
verwendet Bar
public class Foo {
private Bar bar;
};
NB: Siehe Fowler's Definition - der Schlüssel ist, dass Bar
ist semantisch verwandt mit Foo
und nicht nur eine Abhängigkeit (wie eine int
o string
).
Zusammensetzung - Ein Objekt gehört mir und ich bin für seine Lebensdauer verantwortlich. Wenn Foo
stirbt, stirbt auch Bar
public class Foo {
private Bar bar = new Bar();
}
Aggregation - Ich habe einen Gegenstand, den ich mir von jemand anderem geliehen habe. Wenn Foo
stirbt, Bar
weiterleben kann.
public class Foo {
private Bar bar;
Foo(Bar bar) {
this.bar = bar;
}
}
Ich weiß, diese Frage ist als C# getaggt, aber die Konzepte sind ziemlich allgemein Fragen wie diese hier umleiten. Also werde ich hier meinen Standpunkt darlegen (ein bisschen voreingenommen vom Standpunkt von Java aus, wo ich mich wohler fühle).
Wenn wir an objektorientierte Natur denken, denken wir immer an Objekte, Klassen (Objektentwürfe) und die Beziehung zwischen ihnen. Objekte sind miteinander verwandt und interagieren über Methoden miteinander. Mit anderen Worten: Das Objekt einer Klasse kann Dienste/Methoden nutzen, die von einem Objekt einer anderen Klasse bereitgestellt werden. Diese Art von Beziehung wird bezeichnet als Verein. .
Aggregation und Komposition sind Teilmengen der Assoziation das heißt, es handelt sich um spezifische Fälle von Assoziation.
- Sowohl bei der Aggregation als auch bei der Zusammensetzung ein Objekt einer Klasse "besitzt" ein Objekt einer anderen Klasse .
- Aber es gibt einen feinen Unterschied. Unter Zusammensetzung das Objekt der Klasse, die im Besitz des Objekts der besitzenden Klasse ist kann nicht von sich aus leben (Auch "Todesbeziehung" genannt). Es wird immer als Teil des eigenen Objekts leben, während es in Aggregation das abhängige Objekt ist Eigenständig und kann auch dann noch existieren, wenn das Objekt der besitzenden Klasse tot ist.
- Wenn also in der Komposition das besitzende Objekt garbage collected wird, wird auch das besitzende Objekt garbage collected, was in der Aggregation nicht der Fall ist.
Verwirrt?
Beispiel für die Zusammensetzung : Nehmen wir das Beispiel eines Autos und eines Motors, der sehr spezifisch für dieses Auto ist (d.h. er kann in keinem anderen Auto verwendet werden). Diese Art der Beziehung zwischen Auto y SpecificEngine Klasse heißt Komposition. Ein Objekt der Klasse Car kann nicht ohne ein Objekt der Klasse SpecificEngine existieren und ein Objekt der Klasse SpecificEngine hat ohne die Klasse Car keine Bedeutung. In einfachen Worten ausgedrückt: Die Klasse Car "besitzt" ausschließlich die Klasse SpecificEngine.
Beispiel für Aggregation : Betrachten Sie nun die Klasse Auto und Klasse Rad . Car benötigt ein Wheel-Objekt, um zu funktionieren. Das bedeutet, dass das Auto-Objekt das Rad-Objekt besitzt, aber wir können nicht sagen, dass das Rad-Objekt ohne das Auto-Objekt keine Bedeutung hat. Es kann sehr wohl in einem Fahrrad, einem LKW oder einem anderen Auto-Objekt verwendet werden.
Zusammengefasst.
Zusammenfassend lässt sich sagen, dass Assoziation ein sehr allgemeiner Begriff ist, der verwendet wird, wenn eine Klasse die von einer anderen Klasse bereitgestellten Funktionalitäten nutzt. Man spricht von Komposition, wenn ein Objekt einer Elternklasse ein anderes Objekt einer Unterklasse besitzt und das Objekt der Unterklasse ohne das Objekt der Elternklasse nicht sinnvoll existieren kann. Wenn dies der Fall ist, spricht man von Aggregation.
Weitere Einzelheiten finden Sie hier. Ich bin der Autor von http://opensourceforgeeks.blogspot.in und habe oben einen Link zu dem entsprechenden Beitrag eingefügt, um den Zusammenhang zu verdeutlichen.
Verein ist ein verallgemeinertes Konzept von Beziehungen. Es umfasst sowohl Komposition als auch Aggregation.
Zusammensetzung ( Mischung ) ist eine Möglichkeit, einfache Objekte oder Datentypen in eine einzelne Einheit . Zusammensetzungen sind ein wichtiger Baustein für viele grundlegende Datenstrukturen
Aggregation ( Die Bildung einer Anzahl von Dingen zu einem Bündel ) unterscheidet sich von der gewöhnlichen Zusammensetzung dadurch, dass sie kein Eigentum voraussetzt. Bei der Komposition werden die enthaltenen Objekte zerstört, wenn das besitzende Objekt zerstört wird. Bei der Aggregation ist dies nicht unbedingt der Fall.
Trick, um sich den Unterschied zu merken :
- "Hat A ": A ggregation
- " P Kunst- O f": c O m P ositoin
- " I s-a": I neritance
Kontext
Aggregation
Zusammensetzung
Lebenszeit
Objekte haben ihre eigene Lebensdauer und es gibt keinen Besitzer
von der Gesamtheit oder der Muttergesellschaft, die es besitzt, kontrolliert wird
Umfang
übergeordnete Objekte und untergeordnete Objekte sind unabhängig
übergeordneten Objekts bedeutet auch den Tod seiner Kinder.
Beziehung
Hat-a
Teil-von
Stärke
schwache Beziehung
starke Beziehung.
Beispiel aus der Praxis
Auto und Fahrer
Auto und Räder
Betrachten wir nun das folgende Bild
Analogie:
Zusammensetzung : Das folgende Bild ist eine Bildkomposition, d. h. es werden einzelne Bilder zu einem Bild zusammengefügt.
Aggregation : Sammlung von Bildern an einem einzigen Ort
Zum Beispiel, Eine Universität verfügt über verschiedene Fachbereiche, und jeder Fachbereich hat eine Reihe von Professoren. Wenn die Universität geschlossen wird, gibt es die Fachbereiche nicht mehr, aber die Professoren in diesen Fachbereichen bleiben bestehen. Daher kann eine Universität als eine Zusammensetzung von Fachbereichen betrachtet werden, während Fachbereiche eine Ansammlung von Professoren haben. Außerdem kann ein Professor in mehr als einem Fachbereich arbeiten, aber ein Fachbereich kann nicht Teil von mehr als einer Universität sein.
Abhängigkeit (Referenzen)
Das bedeutet, dass es keine konzeptionelle Verbindung zwischen zwei Objekten gibt. z. B. verweist das Objekt EnrollmentService auf die Objekte Student und Course (als Methodenparameter oder Rückgabetypen)
public class EnrollmentService {
public void enroll(Student s, Course c){}
}
Verein (has-a)
Das bedeutet, dass es fast immer eine Verbindung zwischen den Objekten gibt (sie sind miteinander verbunden). Objekt bestellen hat eine Kundenobjekt
public class Order {
private Customer customer
}
Aggregation (hat-a + Ganzes-Teil)
Besondere Art der Assoziation, bei der zwei Objekte ganz oder teilweise miteinander verbunden sind.
public class PlayList {
private List<Song> songs;
}
OR
public class Computer {
private Monitor monitor;
}
Nota: Der schwierigste Teil besteht darin, Aggregation von normaler Assoziation zu unterscheiden. Ehrlich gesagt, denke ich, dass es hier verschiedene Interpretationen geben kann.
Zusammensetzung (hat-a + Ganzes-Teil + Eigentum)
Besondere Art der Aggregation. Eine Apartment
besteht aus einigen Room
s. A Room
kann nicht existieren ohne einen Apartment
. wenn eine Wohnung gelöscht wird, werden auch alle zugehörigen Räume gelöscht.
public class Apartment{
private Room bedroom;
public Apartment() {
bedroom = new Room();
}
}
Aus einem Beitrag von Robert Martin in comp.object :
Assoziation bedeutet die Fähigkeit einer Instanz, eine Nachricht an eine andere Instanz zu senden. Dies wird in der Regel mit einer Zeiger- oder Referenzinstanzvariable implementiert, obwohl es auch als Methodenargument oder durch die Erstellung einer lokalen Variable implementiert werden kann.
//[Example:]
//|A|----------->|B|
class A
{
private:
B* itsB;
};
Die Aggregation [...] ist die typische Ganz-Teil-Beziehung. Dies ist genau dasselbe wie eine Assoziation mit der Ausnahme, dass Instanzen keine zyklischen Aggregationsbeziehungen haben können (d. h. ein Teil kann nicht sein Ganzes enthalten).
//[Example:]
//|Node|<>-------->|Node|
class Node
{
private:
vector<Node*> itsNodes;
};
Die Tatsache, dass es sich um eine Aggregation handelt, bedeutet, dass die Instanzen von Node keinen Zyklus bilden können. Es handelt sich also um einen Baum von Knoten und nicht um einen Graphen von Knoten.
Komposition [...] ist genau wie Aggregation, nur dass die Lebensdauer des "Teils" durch das "Ganze" kontrolliert wird. Diese Kontrolle kann direkt oder transitiv sein. Das heißt, das "Ganze" kann direkt die Verantwortung für die Schaffung oder Zerstörung des "Teils" übernehmen, oder es kann einen bereits geschaffenen Teil annehmen und ihn später an ein anderes Ganzes weitergeben, das die Verantwortung für ihn übernimmt.
//[Example:]
//|Car|<#>-------->|Carburetor|
class Car
{
public:
virtual ~Car() {delete itsCarb;}
private:
Carburetor* itsCarb
};
- See previous answers
- Weitere Antworten anzeigen