Ich verstehe, was Komposition in OOP ist, aber ich kann keine klare Vorstellung davon bekommen, was Aggregation ist. Kann das jemand erklären?
Ich verstehe, was Komposition in OOP ist, aber ich kann keine klare Vorstellung davon bekommen, was Aggregation ist. Kann das jemand erklären?
Antworten:
Einfache Regeln:
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.
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
Es gibt keine einzige Erklärung. Verschiedene Autoren meinen verschiedene Dinge durch Aggregation. Die meisten meinen damit eigentlich nichts Konkretes.
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);
}
}
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.
UML-Notationen für unterschiedliche Arten von Abhängigkeiten zwischen zwei Klassen
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;
}
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!]
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.
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.
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.