563 Stimmen

Was ist der Unterschied zwischen Assoziation, Aggregation und Komposition?

Was ist der Unterschied zwischen Assoziation, Aggregation und Komposition? Erläutern Sie dies bitte anhand der Implementierung.

605voto

Jeff Foster Punkte 41930

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; 
    }
}

195voto

Aniket Thakur Punkte 62911

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.

enter image description here

  • 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.

191voto

Premraj Punkte 65511

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

relations

enter image description here

Analogie:

Zusammensetzung : Das folgende Bild ist eine Bildkomposition, d. h. es werden einzelne Bilder zu einem Bild zusammengefügt.
enter image description here

Aggregation : Sammlung von Bildern an einem einzigen Ort

enter image description here

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.

126voto

Ahmad Abdelghany Punkte 9491

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();
    }
}

33voto

Pankaj Kolte Punkte 311

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
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X