it-swarm-eu.dev

Aggregation gegen Zusammensetzung

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

220

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

333
Curtis Batt

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

Aggregation unterscheidet sich von gewöhnlicher Zusammensetzung darin, dass sie 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. 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, eine Abteilung kann jedoch nicht Teil von mehr als einer Universität sein.

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

- -

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

@Curtis Batt liefert in seiner Antwort eine hervorragende Definition: Aggregation vs Composition

38
HorusKol

Es gibt keine einzige Erklärung. Unterschiedliche Autoren meinen unterschiedliche Dinge durch Aggregation. Die meisten meinen damit nichts Bestimmtes.

20
reinierpost
  • Zusammensetzung ist eine Vereinigung

  • Aggregation ist eine Vereinigung

  • Die Zusammensetzung ist eine starke Assoziation (Wenn die Lebensdauer des 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, wird dies als schwache Assoziation bezeichnet.)

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);
    } 
}
20
Pawan

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 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 Objekt und unterscheiden sich nur in ihrer Stärke. (enter image description here

UML-Notationen für unterschiedliche Arten der Abhängigkeit zwischen zwei Klassen enter image description here

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

Quelle

13
Premraj

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

komposition impliziert interne/funktionale Abhängigkeiten, wie die Scharniere an 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: Das Reserverad ist ein Aggregat!]

7
Steven A. Lowe

Ich betrachte Komposition immer als "braucht einen", d. H. Ein Auto braucht einen Motor, und ich betrachte Aggregation als "Dinge, die für einen Zweck zusammenhängen". Wenn ich also bei der Auto-Analogie bleibe, könnte meine Zusammenfassung darin bestehen, eine Reise darzustellen, bei der ein Auto und Passagiere zusammengebracht werden müssen. Die Reise besitzt weder das Auto noch die Passagiere. 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.

2
Lazarus

Semantisch bestehen alle Mengen aus Teilmengen, oder? Deshalb:

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

  • Die Zusammensetzung ist, wenn diese Teilmengen von der Existenz der Vatermenge 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.

0
Negarrak

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. Die zweite hingegen kann verschwinden, ohne die Existenz ihrer Mitglieder zu beeinträchtigen, es sei denn, es gibt eine bestimmte Methode, mit der jedes Objekt gelöscht wird, wenn sein Zeiger gelöscht wird.

0
user2831074