Aggregation vs Zusammensetzung
On Februar 12, 2021 by adminIch verstehe, was Komposition in OOP ist, aber ich kann keine klare Vorstellung davon bekommen, was Aggregation ist. Kann jemand erklären?
Antwort
Einfache Regeln:
- A „besitzt“ B = Zusammensetzung: B hat keine Bedeutung oder keinen Zweck im System ohne A
- A „verwendet“ B = Aggregation: B existiert unabhängig (konzeptionell) von A
Beispiel 1:
Ein Unternehmen ist eine Ansammlung von Personen. Ein Unternehmen ist eine Zusammensetzung von Konten. Wenn ein Unternehmen seine Geschäftstätigkeit einstellt, existieren seine Konten nicht mehr, aber seine Mitarbeiter bleiben bestehen.
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, aber die Datei selbst wird nicht zerstört.
Kommentare
- Ist ein Auto also ein Aggregat oder ein Zusammensetzung seiner Teile?
- Und wie unterscheidet sich die Aggregation von jeder anderen Beziehung zwischen zwei Arten von Entitäten?
- @reinierpost In der Realität ist ein Auto ein Die Aggregation von Teilen und Teilen ist einfach eine Aggregation 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 genau denselben Motor in einem anderen Auto wiederverwenden? Wenn ja, dann möchten Sie wahrscheinlich eine Aggregation. Andernfalls möchten Sie eine Komposition, weil Sie sich nicht
nicht um Motoren kümmern, die ‚ nicht Teil von Autos sind, und sich auch nicht um die Wiederverwendung von Motoren kümmern
Antwort
Von http://en.wikipedia.org/wiki/Object_composition
Die Aggregation unterscheidet sich von der normalen Zusammensetzung darin, dass sie nicht impliziert Eigentum. Wenn in der Komposition das besitzende Objekt zerstört wird, sind es auch die enthaltenen Objekte. In der Aggregation ist dies nicht unbedingt wahr. Beispielsweise besitzt eine Universität verschiedene Abteilungen (z. B. Chemie), und jede Abteilung hat eine Anzahl 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, während Abteilungen eine Ansammlung von Professoren haben. Darüber hinaus kann ein Professor in mehr als einer Abteilung arbeiten, aber eine Abteilung kann nicht Teil von mehr als einer Universität sein.
Also – solange Sie haben Eine Eigentumsbeziehung mit der Zusammensetzung des besitzenden Objekts wird auch zerstört, wenn der Eigentümer – eine Aggregation (und die enthaltenen Objekte) unabhängig voneinander existieren kann.
–
Update: Entschuldigung – diese Antwort ist im Nachhinein viel zu simpel.
@Curtis Batt liefert in seiner Antwort eine hervorragende Definition: Aggregation vs. Zusammensetzung
Kommentare
- In dem von Ihnen zitierten Beispiel ist die Komposition eine Eins-zu-Viele-Beziehung, und für die Aggregation ist auch eine Eins-zu-Viele-Beziehung impliziert, obwohl dies hier auch möglich ist eine Viele-zu-Viele-Beziehung für die Aggregation sein (wir können annehmen, dass ein Lehrer in mehreren Abteilungen unterrichten kann). Während eine Abteilung nicht Teil mehrerer Universitäten sein kann. Zusammensetzung impliziert Eigentum, während Aggregation nicht über die Beziehung hinausgeht. Das Zitat ist korrekt, der Kommentar jedoch nicht.
- hat nichts mit Zerstörung zu tun! UML definiert kein Garbage Collection-System.
- Ich denke, der Wikipedia-Link erhält reflexive Upvotes, aber dies ist eine schreckliche Definition – wie @bold betonte, haben diese Beziehungen nichts mit GC zu tun. Dies fällt auch auseinander, wenn ein Objekt Bestandteil von zwei anderen Objekten ist, beispielsweise der Kugel in einem Kugelgelenk, das zwei künstliche Gliedmaßen verbindet. In der Komponentenbeziehung geht es um funktionale Abhängigkeit.
- Ich stimme zu, dass meine Antwort stark fehlt – aber auch der WikiPedia-Artikel …
- Der Unterschied zwischen Zusammensetzung und Aggregation ist klar. Das Problem bei der Aggregation besteht darin, dass ‚ unklar ist, wie sie sich von der normalen Zuordnung unterscheidet.
Antwort
-
Zusammensetzung ist eine Assoziation
-
Aggregation ist eine Assoziation
-
Zusammensetzung ist eine starke Assoziation (Wenn die Lebensdauer des enthaltenen Objekts vollständig vom Containerobjekt abhängt, ist dies der Fall wird als starke Assoziation bezeichnet.)
-
Aggregation ist eine schwache Assoziation (Wenn die Lebensdauer des enthaltenen Objekts nicht vom Containerobjekt abhängt, wird sie aufgerufen schwache 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); } }
Kommentare
- Was ist der Unterschied zwischen Aggregation und Assoziation, der weder Zusammensetzung noch Aggregation ist?
Antwort
Es gibt keine einzige Erklärung. Verschiedene Autoren meinen unterschiedliche Dinge durch Aggregation. Die meisten meinen damit nichts Spezielles.
Kommentare
- Dies ist die richtige Antwort. Ich ‚ habe es in zwei Büchern gelesen, eines davon ist Martin Fowler ‚ s UML Distilled .
- martinfowler.com/bliki/AggregationAndComposition.html
Antwort
Zusammensetzung (Mischung) ist eine Möglichkeit, einfache Objekte oder Datentypen zu kombinieren in komplexere. Kompositionen sind ein kritischer Baustein vieler grundlegender Datenstrukturen.
Aggregation (Sammlung) unterscheidet sich von der normalen Zusammensetzung , dass es kein Eigentum impliziert. Wenn in der Komposition das besitzende Objekt zerstört wird, sind es auch die enthaltenen Objekte. In der Aggregation 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 Objekten 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 die 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 eine 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; }
Kommentare
- dies ‚ scheint nichts Wesentliches über die in den vorherigen 12 Antworten gemachten und erläuterten Punkte zu bieten
- Ziemlich sicher, dass Bücher ohne Bibliotheken existieren können. Schlechtes Beispiel!
- Hier ist die Liste der Mitarbeiter Teil des Organisationsobjekts. Wie kann dies eine Aggregation sein?
- Wie unterscheidet sich die Assoziation von der Aggregation?
- Ich liebe diese Antwort. Schließlich wurde mir richtig erklärt, was der Unterschied zwischen Aggregation und Zusammensetzung ist.
Antwort
Aggregation ist einfach Sammlung, wie eine Tüte Murmeln
Zusammensetzung impliziert interne / funktionale Abhängigkeiten, wie die Scharniere an einer Box
Autos Passagiere zusammenfassen; 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: Das Reserverad ist ein Aggregat! ]
Antwort
Ich betrachte Komposition immer als „braucht ein“, dh ein Auto braucht ein Motor, und ich betrachte die Aggregation als „Dinge, die mit einem Zweck zusammenhängen“. Wenn ich mich also an die Auto-Analogie halte, kann meine Aggregation darin bestehen, eine Reise darzustellen, bei der ein Auto und Passagiere zusammengebracht werden müssen. Die Reise besitzt nicht das Auto oder Bei den Passagieren sammle ich 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.
Antwort
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 das erste lösche, verschwindet sein Inhalt damit. Das zweite, Auf der anderen Seite kann es verschwinden, ohne die Existenz seiner Mitglieder zu beeinträchtigen, es sei denn, es gibt eine bestimmte Methode, die jedes Objekt löscht, wenn sein Zeiger gelöscht wird.
Kommentare
- ‚ scheint nichts Wesentliches über Punkte hinzuzufügen, die in den vorherigen 11 Antworten gemacht und erklärt wurden.
- Respektlos nicht zustimmen, @gnat. Dies ist ein hilfreiches Beispiel dafür, wie die zwei könnten umgesetzt werden. Menschen lernen besser mit Beispielen.(Ich bin hierher gekommen, um mein Verständnis zu überprüfen, dass ein Zeigerelement wahrscheinlich eine Aggregation und ein Objektelement eine Komposition ist. Dies ist die einzige Antwort, um dies direkt anzusprechen.)
Antwort
Semantisch bestehen alle Mengen aus Teilmengen, oder? Daher:
-
Die Aggregation erfolgt, wenn diese Teilmengen unabhängig von der Vatermenge vorhanden sind. Da ein Monitor vom Computer getrennt werden kann, um mit einem anderen verbunden zu werden.
-
Die Zusammensetzung ist, wenn diese Teilmengen von der Existenz des Vater-Sets abhängen. Da ein Blatt ein Teil eines Baumes ist oder die Leber ein Teil eines Körpers ist.
Diese Konzepte sprechen konzeptionell über die Art der Abhängigkeit zwischen zwei Objekten oder Klassen. Direkt in einem Programm, in einer Aggregation, sollten, wenn das Vaterobjekt verfügt, auch die Aggregatobjekte entsorgt werden. Im gleichen Szenario für eine Komposition bleiben zusammengesetzte Sohnobjekte bestehen, dann gibt das Vaterobjekt aus.
Schreibe einen Kommentar