Frage

Ich bin vor einem andauerndes Problem zu unterscheiden Delegation, die Zusammensetzung und die Aggregation von ihnen, und der Ermittlung der Fälle, in denen es die besten übereinander zu verwenden.

Ich habe ein Java OO Analyse und Design Buch konsultiert, aber meine Verwirrung noch bleibt. Die wichtigste Erklärung ist dies:

Delegation . Wenn mein Objekt verwendet Funktionalität eines anderen Objekts als ohne sie zu ändern ist

Zusammensetzung :. Mein Objekt besteht aus anderen Objekten, die wiederum nicht existieren können, nachdem mein Objekt zerstört-Müll gesammelt

Aggregation :. Mein Objekt besteht aus anderen Objekten, die noch leben können, nachdem mein Objekt zerstört wird

Ist es möglich, ein paar einfachen Beispiele zu haben, jeden Fall zeigen, und die Argumentation hinter ihnen? Wie sonst können diese Beispiele als mein Objekt demonstriert andere werden einfach einen Verweis auf ein anderes Objekt mit (s)?

War es hilfreich?

Lösung

Ihre Aufgabe würde ein anderes Objekt (e) in allen drei Fällen verweisen. Der Unterschied liegt im Verhalten und / oder Lebenszyklus von referenzierten Objekten. Einige Beispiele:

  1. Zusammensetzung: Haus enthält ein oder mehr Zimmer. Zimmerlebenszeit wird gesteuert von Hause als Raum existiert nicht ohne Haus.

  2. Aggregation: Spielzeughaus aus Blöcken gebaut. Sie können es zerlegen, aber blockiert bleiben.

  3. Delegation: Ihr Chef Sie gebeten, ihm einen Kaffee zu bekommen, haben Sie hatte ein Praktikum machen es für Sie statt. Delegation ist keine Art der Assoziation (wie Zusammensetzung / Aggregation). Die beiden letzteren sind auf Stack-Überlauf diskutiert oft

Im Kommentar Sie fragen, wie die Umsetzung in jedem Fall unterschiedlich sein würde, zu beobachten, dass in allen Fällen rufen wir Methoden auf den releated Objekte. Es stimmt, dass in jedem Fall, dass wir Code wie

haben würden
myRoom.doWork();

myBlock.doWork();

myMinion.doWork();

aber liegen die Unterschiede im Lebenszyklus und Mächtigkeit der Objekte verknüpft.

Für die Komponente kommen die Zimmer zustande, wenn das Haus erstellt wird. So könnten wir sie im Konstruktor des Hauses erstellen.

Im Fall der Association (Ich werde verwenden Reifen und Auto) Autos könnten Reifen in ihrem Konstruktor hinzufügen, aber später können Sie Reifen zu entfernen und zu ändern. So können Sie auch Methoden wie

 removeTyre(FrontLeft)
 addNewTyre(aTyre, BackRight)

Und es ist sehr wahrscheinlich, dass das aTyre Objekt aus einer Fabrik kam - wir haben new es in keiner der Methoden des Car.

Im Fall der Delegation, könnten Sie nicht einmal eine Membervariable haben die Delegierten zu halten

 resourcingPool().getIntern().getCoffee(SkinnyLatte, workstation 7);

die Beziehung zwischen den Objekten dauert nur so lange, wie die intern den Kaffee holen. Dann gibt es an den Ressourcen-Pool.

Andere Tipps

Delegation

public class A {
  private B b = new B();

  public void methodA() {
    b.methodB();
  }
}

Wenn Kunden von A Anruf methodA, Klasse A Delegierten der Anruf an B des methodB.

Rationale. Klasse A aussetzt Verhaltensweisen, die an anderer Stelle gehören. Dies kann in Einzelvererbung Sprachen vorkommen, wo die Klasse A erbt von einer Klasse, aber ihre Kunden Verhaltensweisen müssen, die in einer anderen Klasse implementiert sind. Weitere Studien .

Hybrid Delegation

public class A {
  private B b = new B();

  public void methodA() {
    b.methodB( this );
  }
}

Der Unterschied zwischen Delegation, die einfache Weiterleitung und Delegation beinhaltet, die als Ersatz für die Vererbung wirkt, dass der Angerufene einen Parameter des Anrufers annehmen muß, beispielsweise:

    b.methodB( this );

Begründung Ermöglicht Klasse B Instanzen Verwendung Funktionalität von Klasse A, wie Klasse B würde, wenn es von der Klasse A geerbt -. Aber ohne Vererbung. Weitere Studien .

Zusammensetzung

public class A {
  private B b = new B();

  public A() {
  }
}

Wenn nicht mehr Verweise auf eine bestimmte Instanz der Klasse A exist, seine Instanz der Klasse B zerstört wird.

Rationale. Ermöglicht Klassen Verhaltensweisen und Attribute in einer modularen Art und Weise zu definieren. Weitere Studien .

Aggregation

public class A {
  private B b;

  public A( B b ) {
    this.b = b;
  }
}

public class C {
  private B b = new B();

  public C() {
    A a = new A( this.b );
  }
}

Wenn es keine weiteren Hinweise auf eine bestimmte Instanz der Klasse A sind, seine Instanz der Klasse B nicht zerstört werden. In diesem Beispiel müssen sowohl A und C Müll gesammelt werden, bevor B zerstört wird.

Rationale. Ermöglicht Instanzen Wiederverwendung Objekte. Weitere Studien .

Demonstration Ohne Referenzen

Die auf diese einfachen Mustern Vornamen durch ihre Bezugs Beziehungen definiert sind.

Ihr Buch erklärt ganz gut, so lassen Sie mich erarbeiten und Ihnen einige Beispiele.

Delegation. Wenn mein Objekt verwendet Funktionalität eines anderen Objekts als ohne sie zu ändern ist

Einige Zeit eine Klasse kann logisch zu groß sein müssen. Aber große Klasse ist keine gute pratice Codierung. irgendwann auch, einige Funktionalitäten einer Klasse in mehr als einer Weise implementierbar sein kann, und Sie können, dass einige Zeit ändern möchten.


class FeatureHolder {
 void feature() {
  // Big implementation of the feature that you dont want to put in the class Big
 }
}

class Big {
 private FeatureHolder FH = new FeatureHolder();

 void feature() {
  // Delegate to FeatureHolder.
  FH.feature();
 }

 //.. Other features
}

Aus dem obigen Beispiel, Big.feature () Call-Funktion von FH wie ohne sie zu verändern. Auf diese Weise wird die Klasse Big braucht nicht die Implementierung der Funktion (Trennung von Arbeit) zu enthalten. Auch Merkmal () kann unterschiedlich implementieren durch andere Klasse wie „NewFeatureHolder“ und Big kann die neuen Feature Halter stattdessen verwenden wählen.

Zusammensetzung:. Meine Aufgabe besteht darin, von anderen Objekten, die wiederum nicht existieren können nach meiner Aufgabe wird destryed-Müll gesammelt

Aggregation. Meine Aufgabe besteht darin, von anderen Objekten, die noch leben können, nachdem mein Objekt zerstört wird

Technically, Komposition ist „Teil“ und Aggregation ist Beziehung „beziehen“. Ihre Arme sind ein Teil von dir. Wenn Sie nicht mehr lebt, wird Ihr Arm sterben. Ihr Tuch ist nicht Teil von Ihnen, aber Sie haben sie; wie Sie Gast, Ihr Tuch nicht mit Ihnen gehen.

In der Programmierung sind einige Objekte Teil eines anderen Objekts und sie haben keine logische Bedeutung ohne sie. Zum Beispiel wird ein Knopf in einen Fensterrahmen zusammengesetzt. Wenn ein Rahmen geschlossen ist, hat die Taste keinen Grund mehr zu sein um (Zusammensetzung). Eine Schaltfläche kann auf eine Datenbank (zB zu refreash Daten) haben; wenn die Taste ausgeschaltet ist, kann immer noch die Datenbank sein, um (Aggregation).

Sorry für mein Englisch, Hoffnung, das hilft

1) Delegation: Man-Fahrer-Auto-Beispiel. Ein Mann, ein Auto gekauft. Aber daß der Mensch nicht weiß, das Auto zu fahren. So wird er einen Fahrer benennen, die ein Auto fahren weiß. So ist der Mensch Klasse will einen Transport mit dem Auto durchzuführen. Aber es hat nicht die interacting- Funktionalität / Kompatibilität mit dem Auto. So verwendet er eine Klasse, die Kompatibilität mit dem Auto hat, den Fahrer ist, die mit dem Menschen Klasse kompatibel ist. Unter der Annahme, dass Fahrer kann verstehen, was man sagt,

2) Zusammensetzung: Auto-Simulation ist eine Routine Beispiel. Um ein Auto zu bewegen, Rad dreht zu machen. Car-Klasse Rad Klasse drehen functinality als Teil seiner Bewegung Funktion, wo als Radteil des Autos ist.

3) Aggregation: Auto und seine Farbe. Car-Klasse Objekt ferrari hat eine Farbklasse Objekt rot. Aber Farbklasse Objekt rot kann es als individuelle Klasse, wenn Benutzersuche mit einer Spezifikation der roten Farbe geschieht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top