Benutzer-Werkzeuge

Webseiten-Werkzeuge


diagrams:diagrams:aggregation:start

Aggregation/Komposition

Im letzten Projekt „Hunter“ enthielt die Huntergame-Klasse die Attribute hunter und target vom Datentyp Circle sowie das Attribut enemies vom Datentyp Group. Diese Attribute speichern Referenzen („Zeiger“) auf entsprechende Circle- bzw. Group-Objekte:

class HunterGame extends Actor {
 
   Circle hunter;
 
   Circle target;
 
   Group enemies = new Group();
 
   usw...
 
}

Man sagt: „Ein Huntergame-Objekt enthält zwei Circle-Objekte und ein Group-Objekt“ und stellt dies im Klassendiagramm folgendermaßen dar:

Die Kardinalitäten 1:1 bzw. 1:2 sind genauso definiert wie zwischen Datenbanktabellen.

Aggregation und Komposition

Steht ein Objekt mit anderen Objekten in Beziehung (insbesondere in einer „enthält“-Beziehung), so spricht man von Aggregation. Im Klassendiagramm veranschaulicht man dies als Verbindungs„pfeil“ mit einer unausgefüllten Raute als Spitze. Die Raute zeigt auf die Klasse, deren Objekte die anderen Objekte enthalten.

Falls ein Objekt andere Objekte nicht nur enthält, sondern sogar aus diesen Objekten besteht, d.h. in seiner Existenz von ihnen abhängt, so spricht man von einer Komposition. Im Unterschied zur Aggregation wird in diesem Fall die Raute schwarz gefüllt. Besteht ein Objekt der Klasse Rakete beispielsweise aus einem Objekt der Klasse Rectangle (dem Raketenrumpf) und einem Objekt der Klasse Triangle (der Spitze), so sieht das Klassendiagramm folgendermaßen aus:

Die Unterscheidung zwischen Aggregation und Komposition ist oft sehr fein, im Grunde genommen hat sie aber wenig Auswirkungen, da beide Relationen programmtechnisch identisch umgesetzt werden:

Die Klasse, deren Objekte die anderen Objekte enthalten, bekommt entsprechende Attribute. Im Falle der Rakete:

class Rakete {
   Rectangle rumpf;
   Triangle spitze;
 
   usw...
}

Beispiel 1:

Folgende Klassen sind gegeben. Zeichne das Klassendiagramm (ohne Attribute und Methoden)!

Lösung: Siehe Bild rechts.

class Bibliothek {
   Buch[] bücher;
   Person leiterin;
}
 
class Buch {
 
   String titel;
   String autor;
 
}
 
class Person {
 
   String name;
   String anschrift;
 
}

Beispiel 2:

Schreibe die Java-Klassen (ohne Methoden) zu folgendem Klassendiagramm: Lösung: Siehe rechts.

class PongSpiel {
   Ball ball;
   Schläger schlägerLinks;
   Schläger schlägerRechts;
}
 
class Ball extends Circle {
 
}
 
class Schläger extends Rectangle {
 
}

Aufgabe 1

Zeichne das Klassendiagramm (ohne Methoden) zu folgendem Programm:

class Autospiel extends Actor {
   Auto spieler1;
   Auto spieler2;
}
class Auto {
   Karosserie karosserie;
   Rad radVorne;
   Rad radHinten;
}
 
class Karosserie extends Rectangle {
 
}
 
class Rad extends Circle {
 
}

Lösung

Aufgabe 2

Schreibe die Java-Klassen (ohne Methoden) zu folgendem Klassendiagramm:

Lösung

diagrams/diagrams/aggregation/start.txt · Zuletzt geändert: 2024/08/31 10:03 von 127.0.0.1