Aggregation vs Zusammensetzung


206

Ich verstehe, was Komposition in OOP ist, aber ich kann keine klare Vorstellung davon bekommen, was Aggregation ist. Kann das jemand erklären?

Antworten:


322

Einfache Regeln:

  1. A "besitzt" B = Zusammensetzung: B hat im System ohne A keine Bedeutung oder keinen Zweck
  2. A "verwendet" B = Aggregation: B existiert unabhängig (konzeptionell) von A

Beispiel 1:

Ein Unternehmen ist eine Ansammlung von Personen. Eine Firma ist eine Zusammensetzung von Konten. Wenn ein Unternehmen seine Geschäftstätigkeit einstellt, existieren seine Konten nicht mehr, seine Mitarbeiter jedoch weiterhin.

Beispiel 2: (sehr vereinfacht)

Ein Texteditor besitzt einen Puffer (Komposition). Ein Texteditor verwendet eine Datei (Aggregation). Wenn der Texteditor geschlossen wird, wird der Puffer zerstört, die Datei selbst jedoch nicht.


11
Ist ein Auto also ein Aggregat oder eine Zusammensetzung seiner Teile?
Reinierpost

2
Und wie unterscheidet sich die Aggregation von jeder anderen Beziehung zwischen zwei Arten von Entitäten?
Reinierpost

55
@reinierpost In Wirklichkeit ist ein Auto eine Ansammlung von Teilen, und Teile sind einfach eine Ansammlung von Molekülen ... In einem Modell hängt jedoch alles von Ihren Anforderungen ab. Ist es wichtig, den Motor als separate Einheit zu behandeln, damit Sie seine Lebensdauer unabhängig vom Auto verfolgen können? Können Sie den exakt gleichen Motor in einem anderen Auto wiederverwenden? Wenn ja, dann möchten Sie wahrscheinlich eine Aggregation. Andernfalls möchten Sie eine Komposition, weil Sie sich weder für Motoren interessieren, die nicht Teil von Autos sind, noch für die Wiederverwendung von Motoren.
Curtis Batt

3
Was fehlt, ist ein Implementierungsbeispiel für ein vollständiges Verständnis ...
Chesnokov Yuriy

1
Was ist mit Mitarbeitern, wenn ein Unternehmen seine Geschäftstätigkeit einstellt? Mitarbeiter und Menschen sind unterschiedliche Einheiten, oder? Kann ich also sagen, dass das Unternehmen aus Mitarbeitern besteht?
Arjun

36

Aus http://en.wikipedia.org/wiki/Object_composition

Die Aggregation unterscheidet sich von der gewöhnlichen Zusammensetzung dadurch, dass sie keine Eigentümerschaft impliziert. Wenn in der Komposition das besitzende Objekt zerstört wird, werden auch die enthaltenen Objekte zerstört. In Summe ist dies nicht unbedingt wahr. Beispielsweise besitzt eine Universität verschiedene Abteilungen (z. B. Chemie) und jede Abteilung hat eine Reihe von Professoren. Wenn die Universität schließt, werden die Abteilungen nicht mehr existieren, aber die Professoren in diesen Abteilungen werden weiterhin existieren. Daher kann eine Universität als eine Zusammensetzung von Abteilungen angesehen werden, wohingegen Abteilungen eine Ansammlung von Professoren haben. Darüber hinaus könnte ein Professor in mehr als einer Abteilung arbeiten, aber eine Abteilung könnte nicht Teil von mehr als einer Universität sein.

Während Sie also eine Eigentumsbeziehung zur Komposition haben, wird das besessene Objekt auch zerstört, wenn der Besitzer es ist. Eine Aggregation (und die darin enthaltenen Objekte) können unabhängig voneinander existieren.

-

Update: Entschuldigung - diese Antwort ist im Nachhinein viel zu einfach.

c.batt liefert in seiner Antwort eine hervorragende Definition: Aggregation vs. Komposition


3
In dem von Ihnen zitierten Beispiel handelt es sich bei der Komposition um eine Eins-zu-Viele-Beziehung und bei der Aggregation um eine Eins-zu-Viele-Beziehung Ein Lehrer kann in mehreren Abteilungen unterrichten. Während eine Abteilung nicht Teil mehrerer Universitäten sein kann. Zusammensetzung impliziert Eigentum, während Aggregation nicht über Beziehung hinausgeht. Das Zitat ist korrekt, der Kommentar jedoch nicht.
Newtopian

1
es hat nichts mit zerstörung zu tun! UML definiert kein Garbage Collection System.
Anzeigename

2
Ich denke, der Wikipedia-Link erhält reflexive Upvotes, aber dies ist eine schreckliche Definition - wie @bold hervorhob, haben diese Beziehungen nichts mit GC zu tun. Dies fällt auch dann auseinander, wenn ein Objekt Bestandteil von zwei anderen Objekten ist, z. B. der Ball in einem Kugelgelenk, das zwei künstliche Gliedmaßen verbindet. In der Komponentenbeziehung geht es um funktionale Abhängigkeit.
Steven A. Lowe

1
Ich bin damit einverstanden, dass meine Antwort
äußerst

Der Unterschied zwischen Zusammensetzung und Aggregation ist klar. Das Problem bei der Aggregation ist, dass unklar ist, inwiefern sie sich von einer normalen Assoziation unterscheidet.
Reinierpost


17
  • Zusammensetzung ist eine Vereinigung

  • Aggregation ist eine Assoziation

  • Zusammensetzung ist eine starke Assoziation (Wenn die Lebensdauer eines enthaltenen Objekts vollständig vom Containerobjekt abhängt, spricht man von einer starken Assoziation)

  • Aggregation ist eine schwache Assoziation (Wenn die Lebensdauer des enthaltenen Objekts nicht vom Containerobjekt abhängt, spricht man von einer schwachen Assoziation.)

Beispiel:

class Contained {
    public void disp() {
        System.out.println("disp() of Contained A");
    }
}

public class Container {
    private Contained c;

    //Composition
    Container() {
        c = new Contained(); 
    }

    //Association 
    public Contained getC() {
        return c;
    }

    public void setC(Contained c) {
        this.c = c;
    }     

    public static void main(String[] args) {
        Container container = new Container();
        Contained contained = new Contained();
        container.setC(contained);
    } 
}

2
Was ist der Unterschied zwischen Aggregation und Assoziation, die weder Zusammensetzung noch Aggregation ist?
Reinierpost

11

Komposition (Mischung) ist eine Möglichkeit, einfache Objekte oder Datentypen zu komplexeren zu kombinieren. Kompositionen sind ein kritischer Baustein vieler grundlegender Datenstrukturen

Aggregation (Sammlung) unterscheidet sich von gewöhnlicher Zusammensetzung darin, dass sie nicht Eigentum impliziert. Wenn in der Komposition das besitzende Objekt zerstört wird, werden auch die enthaltenen Objekte zerstört. In Summe ist dies nicht unbedingt wahr

╔═══════════╦═════════════════════════╦═══════════════════════╗
║           ║       Aggregation       ║      Composition      ║
╠═══════════╬═════════════════════════╬═══════════════════════╣
║ Life time ║ Have their own lifetime ║ Owner's life time     ║
║ Relation  ║ Has                     ║ part-of               ║
║ Example   ║ Car has driver          ║ Engine is part of Car ║
╚═══════════╩═════════════════════════╩═══════════════════════╝

Beide bezeichnen die Beziehung zwischen Objekt und unterscheiden sich nur in ihrer Stärke. Bildbeschreibung hier eingeben

UML-Notationen für unterschiedliche Arten von Abhängigkeiten zwischen zwei Klassen Bildbeschreibung hier eingeben

Zusammensetzung : Da der Motor Teil des Autos ist, ist die Beziehung zwischen ihnen Zusammensetzung. So werden sie zwischen Java-Klassen implementiert.

public class Car {
    //final will make sure engine is initialized
    private final Engine engine;  

    public Car(){
       engine  = new Engine();
    }
}

class Engine {
    private String type;
}

Aggregation : Da die Organisation Person als Mitarbeiter hat, ist die Beziehung zwischen ihnen Aggregation. So sehen sie in Bezug auf Java-Klassen aus

public class Organization {
    private List employees;
}


public class Person {
    private String name;   
}

Quelle


Dies scheint nichts Wesentliches zu bieten über die Punkte, die in den vorherigen 12 Antworten gemacht und erklärt wurden
Mücke

Ziemlich sicher, dass Bücher ohne Bibliotheken existieren können. Schlechtes Beispiel!
T Blank

Hier ist die Liste der Mitarbeiter der Teil des Organisationsobjekts. Wie kann das Aggregation sein?
Salman Muhammad Ayub

Wie unterscheidet sich Assoziation von Aggregation?
Reinierpost

Ich liebe diese Antwort. Es hat mir schließlich richtig erklärt, was der Unterschied zwischen Aggregation und Zusammensetzung ist.
PandasRocks

6

Aggregation ist eine einfache Sammlung, wie eine Tüte Murmeln

Komposition impliziert interne / funktionale Abhängigkeiten, wie die Scharniere einer Box

Autos aggregieren Passagiere; Sie steigen ein und aus, ohne die Funktionalität des Autos zu beeinträchtigen

Die Reifen sind Komponenten; Entfernen Sie eine und das Auto funktioniert nicht mehr richtig

[Hinweis: Der Reserverad ist ein Aggregat!]


1

Ich betrachte Komposition immer als „braucht ein“, dh ein Auto braucht einen Motor, und ich betrachte Aggregation als „Dinge, die für einen Zweck in Beziehung stehen“. Wenn ich mich also an die Autoanalogie anschließe, kann meine Ansammlung darin bestehen, eine Reise darzustellen, bei der ein Auto und Passagiere zusammengebracht werden. Die Reise gehört weder dem Auto noch den Passagieren. Ich sammle Daten, die sich auf ein bestimmtes Szenario beziehen. Wenn die Reise beendet ist, fahren das Auto und die Passagiere weiter. Wenn ein Auto beendet ist, werden das Auto und sein Motor normalerweise zusammen zerstört.


0

Semantisch gesehen bestehen alle Mengen aus Teilmengen, richtig? Deshalb:

  • Die Aggregation erfolgt, wenn diese Teilmengen unabhängig von der Vatermenge existieren. B. ein Monitor vom Computer getrennt werden kann, um mit einem anderen verbunden zu werden.

  • Die Zusammensetzung ist, wenn diese Teilmengen von der Existenz der Vatermenge abhängen. Wie ein Blatt ist ein Teil eines Baumes oder die Leber ist ein Teil eines Körpers.

Diese Konzepte befassen sich konzeptionell mit der Art der Abhängigkeit zwischen zwei Objekten oder Klassen. Direkt in einem Programm, in einer Aggregation, wenn das Vaterobjekt verfügbar ist, sollten auch die aggregierten Objekte verfügbar sein. In demselben Szenario für eine Komposition bleiben zusammengesetzte Sohnobjekte bestehen, und das Vaterobjekt wird ausgegeben.


-1

Wie wäre es mit diesem einfachen Beispiel:

Ein Array von Objekten ist eine Komposition. Ein Array von Zeigern auf Objekte ist eine Aggregation.

Wenn ich den ersten lösche, verschwindet sein Inhalt damit. Andererseits kann die zweite Methode verschwinden, ohne die Existenz ihrer Mitglieder zu beeinträchtigen, es sei denn, es gibt eine bestimmte Methode, die jedes Objekt löscht, wenn sein Zeiger gelöscht wird.


3
Dies scheint nichts Wesentliches über die in den vorherigen 11 Antworten gemachten und erklärten Punkte hinzuzufügen
Mücke

Respektlos nicht einverstanden, @gnat. Dies ist ein hilfreiches Beispiel dafür, wie die beiden implementiert werden könnten. Menschen lernen besser mit Beispielen. (Ich bin hierher gekommen, um mein Verständnis zu überprüfen, dass ein Zeigermitglied wahrscheinlich eine Aggregation und ein Objektmitglied eine Komposition ist. Dies ist die einzige Antwort, um das direkt anzugehen.)
Bob Stein,
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.