Aggregation und Komposition
Aggregationen sind spezielle Assoziationen, die eine Hierarchie auf den verbundenen Instanzen definieren. Anschaulich gesprochen besteht ein Teil-Ganzes-Verhältnis zwischen den verbundenen Instanzen. Dabei hat die Ganzes-Instanz eine Verantwortung für die Teil-Instanzen. So erfordert das Zerstören des Ganzen ein Konzept, wie mit seinen Teilen zu verfahren ist. Da ein Objekt gleichzeitig auch Teil anderer Objekte sein kann, muss dem Zerstören besondere Aufmerksamkeit gewidmet werden. In Klassendiagrammen wird eine Aggregation durch eine nicht ausgefüllte Raute am Ganzes-Ende der Assoziationslinie gekennzeichnet.
Beispiel
Das Beispieldiagramm in folgender Abbildung zeigt die als Bestellungen bezeichnete Assoziation zwischen Kunde und Bestellung, eine Assoziation zwischen Einzelposten und Produkt und eine Aggregation Bestellposten zwischen den Klassen Bestellung und Einzelposten. Die “Ganzes-Klasse“ Bestellung ist durch die Raute an ihrem Ende der Aggregation gekennzeichnet.
Abbildung 1: Eine Aggregation
Neben der Aggregation kennt die UML auch noch die Komposition als eine spezielle Assoziation, bei der noch schärfere Bedingungen als bei der Aggregation gelten. Teilobjekte einer Komposition...
- dürfen nur von Operationen der Ganzes-Klasse entfernt oder ausgetauscht werden,
- dürfen nicht Teil anderer Kompositionen sein
- werden beim Zerstören des “Ganzes-Objekts“ automatisch (kaskadierend) mit zerstört.
Eine Komposition wird in Klassendiagrammen durch eine ausgefüllte Raute am Ganzes-Ende der Assoziationslinie gekennzeichnet.
Beispiel
Betrachten wir als Beispiel eine Klasse Polygon. Jede Instanz besitzt ein Teilobjekt der Klasse Graphikattribut. Ist jede Instanz der Klasse Graphikattribut eindeutig einer Polygoninstanz zugeordnet, liegt eine Komposition vor; die Graphikattribut-Instanz darf nicht ausgetauscht werden und muss beim Zerstören des Polygonobjekts automatisch mitzerstört werden.
Abbildung 2: Eine Komposition
Quelle
OMG Unified Modeling Language Specification V. 1.3, OMG, Jun. 1999
I'm litteraly spending days on Lucidsharts making UML's and DB diagrams for work these days. It's weird how it often feels like "wasting time" while making them but how much more time you lose if you start coding without any type of blueprint