Aggregation und Komposition: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) (Seite angelegt) |
Sn (Diskussion | Beiträge) (Erweitert und mit Beispiel ergänzt) |
||
Zeile 11: | Zeile 11: | ||
In einem [[UML]]-[[Klassendiagramm]] wird die Aggregation durch einen Pfeil dargestellt, dessen Pfeilrichtung vom Teil zum Ganzen zeigt und dessen Spitze eine weiß gefüllte Raute ◇ ist. | In einem [[UML]]-[[Klassendiagramm]] wird die Aggregation durch einen Pfeil dargestellt, dessen Pfeilrichtung vom Teil zum Ganzen zeigt und dessen Spitze eine weiß gefüllte Raute ◇ ist. | ||
=== Umsetzung in Java === | |||
{{Lückenhaft}} | |||
== Komposition == | == Komposition == | ||
Zeile 24: | Zeile 27: | ||
In einem [[UML]]-[[Klassendiagramm]] wird die Komposition durch einen Pfeil dargestellt, dessen Pfeilrichtung vom Teil zum Ganzen zeigt und dessen Spitze eine schwarz gefüllte Raute ♦ ist. | In einem [[UML]]-[[Klassendiagramm]] wird die Komposition durch einen Pfeil dargestellt, dessen Pfeilrichtung vom Teil zum Ganzen zeigt und dessen Spitze eine schwarz gefüllte Raute ♦ ist. | ||
===Umsetzung in Java=== | |||
<syntaxhighlight lang="java" line="1"> | |||
public class Building { | |||
private ArrayList<Room> rooms; | |||
public Building() { | |||
rooms = new ArrayList<Room>(); | |||
} | |||
public void addRoom(Room r) { | |||
if (r.getBuilding() == this) { | |||
rooms.add(r); | |||
} | |||
} | |||
} | |||
</syntaxhighlight><syntaxhighlight lang="java" line="1"> | |||
public class Room { | |||
private final Building building; | |||
public Room(Building b) { | |||
this.building = b; | |||
b.addRoom(this); | |||
} | |||
} | |||
</syntaxhighlight><code>Room</code>-Objekte können ''nur'' unter Angabe eines <code>Building</code>-Objekts erzeugt werden. Das Schlüsselwort <code>final</code> stellt sicher, dass das Attribut <code>building</code> nach dem Erzeugen des Objekts nicht mehr verändert werden kann. | |||
[[Kategorie:Objektorientierte Programmierung]] | [[Kategorie:Objektorientierte Programmierung]] |
Version vom 26. September 2023, 06:32 Uhr
Aggregation und Komposition sind zwei Beziehungstypen aus der objektorientierten Modellierung, genauer: zwei Teil-eines-Ganzen-Beziehungen.
Aggregation
Kennzeichnend für eine Aggregation ist, dass die Teile auch unabhängig vom Ganzen funktionieren können. In dem abgebildeten Beispiel wäre das Angestellty
der Teil und das ProjektTeam
das Ganze. Das Angestellty
würde aber im Regelfall auch nach dem Ende des Projekts noch angestellt bleiben, dürfte in der Datenmodellierung weiter existieren und könnte ggf. neuen Projekten zugeordnet werden.
In einem UML-Klassendiagramm wird die Aggregation durch einen Pfeil dargestellt, dessen Pfeilrichtung vom Teil zum Ganzen zeigt und dessen Spitze eine weiß gefüllte Raute ◇ ist.
Umsetzung in Java
In diesem Artikel oder Abschnitt fehlen noch wichtige Informationen.
Hilf dem KGS-Wiki, indem du sie recherchierst und einfügst.
Komposition
Anders als bei der Aggregation kann bei der Komposition der Teil nicht unabhängig vom Ganzen existieren. In dem abgebildeten Beispiel wäre der Raum
der Teil und das Gebäude
das Ganze. Ein Raum
kann aber nicht ohne ein Gebäude
existieren; wenn ein Gebäude
abgerissen wird, verschwinden auch alle ihm zugehörigen Räum
e.
In einem UML-Klassendiagramm wird die Komposition durch einen Pfeil dargestellt, dessen Pfeilrichtung vom Teil zum Ganzen zeigt und dessen Spitze eine schwarz gefüllte Raute ♦ ist.
Umsetzung in Java
public class Building {
private ArrayList<Room> rooms;
public Building() {
rooms = new ArrayList<Room>();
}
public void addRoom(Room r) {
if (r.getBuilding() == this) {
rooms.add(r);
}
}
}
public class Room {
private final Building building;
public Room(Building b) {
this.building = b;
b.addRoom(this);
}
}
Room
-Objekte können nur unter Angabe eines Building
-Objekts erzeugt werden. Das Schlüsselwort final
stellt sicher, dass das Attribut building
nach dem Erzeugen des Objekts nicht mehr verändert werden kann.