OOP Einfaches Programmierbeispiel für Assoziation, Aggregation und Komposition gesucht

riffraff

Mitglied
Hallo,

ich benötige ein einfaches Beispiel, wie in Java Objekte in Beziehung stehen können (Assoziation, Aggregation und Komposition). Insbesondere geht es dabei darum, wie die Existenzabhängigkeit bei der Komposition realisiert wird.
Das Beispiel sollte möglichst einfach gehalten sein, also keine ArrayList oder ähnliches enthalten, sondern mit Klassen / Objekten arbeiten, die nur mit Integer-Attributen arbeiten und als Multiplizität eine 1 zu 1 haben (Ein Auto hat einen Motor) o.ä.

Schon jetzt vielen Dank.
 
Hallo,

danke für das Beispiel. Das hatte ich schon gefunden, verstehe aber den Unterschied zwischen Aggregation und Composition nicht ganz - zumal mich die Liste verwirrt.... Ich will erst einmal mit 1 zu 1 anfangen....

Vielleicht muss ich meine Frage anders stellen:
Bei Assoziation habe ich zwei Klassen mit unabhängigen Konstruktoren. Im Hauptprogramm werden die Objekte unabhängig voneinander erzeugt. Soweit verstanden

Bei der Aggregation wird im Kontruktor der einen Klasse das Objekt der anderen Klasse erzeugt.
Bei der Composition sollen beide jedoch auch gemeinsam gelöscht werden.

Wie bekomme ich das in Java hin, wo es keinen klassischen (selbstgeschriebenen) Destruktor gibt.
 
Indem du den Code so schreibst, dass das passiert. Es gibt dafür kein "Standardvorgehen".
Bei JPA kannst du das über die Cascade Options z.B. angeben.

Es auch nicht zwingend so, dass bei einer Aggrgation im Konstruktor das Objekt der anderen Klasse erzeugt wird.

Ob es etwas eine Beziehung, Aggregation oder Komposition ist erstmal eine fachliche Vorgabe. Das muss sich nicht direkt 1:1 im Code wiederspiegeln. Man kann das über viele Varianten lösen, je nach dem welche API man nach außen anbietet. Wichtig ist, dass das über die API, die man ggf. anderen nach außen anbietet klar ist. Und da muss man sich überlegen, was ist "außen". Innen kann man das tun und lassen wie man möchte
 
Ich möchte dies aber genau so wie beschrieben realisieren.
Bei Aggregation soll das Objekt der einen Klasse im Konstruktor der anderen erzeugen. (Wenn das Auto verschrottet wird, kann man den Motor ausbauen und er existiert weiter).
Und bei Komposition zusätzlich das Objekt entsprechend löschen (Wenn das Haus abgerissen wird, soll der Dachboden nicht mehr existieren)

Wie kann ich dies im Quelltext in Java tun?
 
Im Prinzip gar nicht. Du kannst ein Objekt in Java nicht zerstören. Du kannst es, wo es gespeichert ist (z.B.) Datenbank löschen.

Oder du baust deine Klasse Haus so, dass da Objekt Dachboden nie nach außen gegeben wird - dann wird es vom Garbage Collector abgeräumt, wenn das Haus abgeräumt wird.
 
Ich finde ein kleines Beispiel ist schnell gemacht.

Java:
class AutoBauer {
  private Motor selektierterMotor;

  // ...

  public Auto baueAuto() {
    return new Auto(selektierterMotor);
  }
}

class AutoBauer {
  // ...

  public Auto baueAuto() {
    return new Auto(new Motor());
  }
}

Im ersteren Fall ist der selektierte Motor noch referenziert und wird dadurch nicht weggeräumt, er existiert weiter. Im zweiteren Fall hat die Klasse AutoBauer keine Referenz auf den Motor. Wird das gebaute Auto geschrottet wird auch die Motor Klasse vom GC weggeräumt
 
Wichtig ist, dass es dann halt nach Möglichkeit kein auch keine Methode getMotor() in der Klasse Auto gibt. Sondern vielleicht nur Methoden getPsAnzahl() die dann die PS-Anzahl des Motors liefert.

Man sollte das ganze aber nicht zu dogmatisch sehen - es ist gut, dass zu wissen, aber am Ende muss les- und wartbarer Code rauskommen.
 

Neue Themen


Zurück
Oben