Agregacja i kompozycja to dwa rodzaje asocjacji reprezentowane w diagramach UML linią zakończoną rombem (w kompozycji romb jest wypełniony). Jaka jest rola tych relacji i czym się one różnią?
Agregacja i kompozycja to dwa rodzaje asocjacji reprezentowane w diagramach UML linią zakończoną rombem (w kompozycji romb jest wypełniony). Jaka jest rola tych relacji i czym się one różnią?
Relacje agregacji jak i kompozycji to specjalne rodzaje asocjacji, więc podobnie do niej przedstawiają relacje posiadania np. człowiek posiada samochód.
Kompozycja wprowadza jednak istotną różnicę. Łącząc dwie klasy relacją zakończoną wypełnionym rombem, wskazujemy, że klasa, przy której stoi romb, składa się z obiektów drugiej klasy. Relacja ta wiąże silnie cykl życia obiektów tych klas, np. kamienica składa się z mieszkań – likwidując kamienice, mieszkania także przestają istnieć.
Agregacja to dokładne przeciwieństwo kompozycji – używamy jej wtedy, jeżeli chcemy wyraźnie zaznaczyć, że powiązane obiekty mogą też swobodnie istnieć bez siebie, np. lampa i żarówka, samochód i koła.
A czym się różni agregacja od zwykłej asocjacji?
Tym, że agregacja wyraźnie wprowadza pewną hierarchię typu część-całość. Dlatego zwyczajowo rysujemy agregację i kompozycję pionowo (rombem do góry), a asocjację poziomo. Dodatkowo agregacja i kompozycja (w przeciwieństwie do asocjacji) nie mogą być zwrotne (część nie może stać się swoją własną całością). To oczywiście na poziomie obiektów, nie klas.