Dies ist eine alte Version des Dokuments!
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
Enthält ein Objekt andere Objekte, 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, 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 es 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... }