Czym jest agregacja#
Agregacja współdzielona (shared aggregation) jest szczególnym rodzajem asocjacji UML, która klasyfikuje związek jako całość–część. Na diagramie klas oznacza się ją pustym rombem przy końcu reprezentującym całość. Przykładowa relacja może łączyć zespół z członkami.
Najważniejsza właściwość agregacji jest taka, że jej dodatkowa semantyka w UML jest słaba i nie określa szczegółowo, jak całość kontroluje części. Sam pusty romb nie przesądza, że część może należeć do wielu całości, że jej cykl życia jest niezależny, ani że zniknie razem z całością. Te reguły trzeba opisać osobno, jeśli są istotne.
Notacja i przykład#
Pusty romb znajduje się po stronie ZespołuProjektowego, czyli agregatu, a nie przy Pracowniku. W tym przykładzie pracownik może być członkiem wielu zespołów, a zespół może mieć wielu członków. Liczności są założeniem modelu przykładowego, nie konsekwencją symbolu agregacji.
Co agregacja mówi, a czego nie#
Romb sygnalizuje intencję „całość–część” lub grupowania. Może ułatwić czytelnikowi rozpoznanie, że obiekty są rozpatrywane razem, ale nie stanowi kompletnej specyfikacji własności. Jeżeli sama ta konwencja niczego odbiorcy nie dopowiada, zwykła asocjacja może być prostsza i równie poprawna.
Agregacja nie określa automatycznie:
- czy część może należeć do jednej czy wielu całości;
- czy część może istnieć bez całości;
- czy usunięcie całości usuwa część;
- kto tworzy, przechowuje lub modyfikuje część;
- czy relacja istnieje wyłącznie w czasie wykonania.
Liczności, ograniczenia i reguły cyklu życia zapisuj niezależnie od pustego rombu.
Różnica względem kompozycji#
Kompozycja (composite aggregation) jest silniejszym rodzajem relacji całość–część i przedstawia się ją wypełnionym rombem. UML wiąże z nią ograniczenia własności i cyklu życia części. Agregacja współdzielona nie niesie tych samych silnych zobowiązań.
Nie wybieraj agregacji wyłącznie po to, by powiedzieć „ma”. Zapytaj, czy odbiorca potrzebuje rozróżnić zwykłe powiązanie, słabe grupowanie i silną kompozycję. Jeśli nie, zastosuj asocjację. Jeśli semantyka części ma być ścisła, sprawdź kompozycję i opisz jej reguły.
Agregacja a dziedziczenie i zależność#
Agregacja wyraża relację strukturalną całość–część; nie jest dziedziczeniem. Zespół ma pracowników nie znaczy, że zespół jest rodzajem pracownika. Nie jest też zależnością użycia — sama linia i romb nie opisują, że jeden element wywołuje operację drugiego.
W UML agregacja jest wariantem asocjacji, więc można ją uzupełnić nazwą relacji, rolami, licznościami i innymi właściwościami końców. Odczytuj całą relację, nie sam symbol rombu.
Kiedy jej używać#
Agregację warto rozważyć, gdy konwencja całość–część pomaga odbiorcom zrozumieć domenę, a relacja nie wymaga mocnych reguł kompozycji. Przykładem może być katalog grupujący produkty lub klub skupiający członków — lecz w każdym przypadku trzeba ustalić własność, współdzielenie i cykl życia.
W praktyce zespoły i narzędzia różnie interpretują użyteczność pustego rombu. Jeśli notacja prowadzi do sporów lub nie wnosi precyzji, użyj zwykłej asocjacji i opisz znaczenie słowami. Bądź konsekwentny w obrębie modelu.
Typowe błędy#
- Pusty romb traktowany jak pełna specyfikacja własności. Jego semantyka jest słaba.
- Romb po stronie części. Umieszcza się go przy klasie reprezentującej całość.
- Agregacja utożsamiona z kompozycją. Wypełniony romb oznacza silniejszy rodzaj relacji.
- Założenie, że część musi istnieć niezależnie. Sam symbol tego nie rozstrzyga.
- Założenie, że część może należeć do wielu całości. Ustal to jawnie.
- Stosowanie rombu do każdego związku „ma”. Często wystarcza zwykła asocjacja.
- Mylenie agregacji z dziedziczeniem. Całość–część nie oznacza „jest rodzajem”.
- Brak liczności i nazw ról. Odbiorca nie wie, jak wiele części wiąże się z całością.
Podsumowanie#
Agregacja współdzielona jest wariantem asocjacji oznaczanym pustym rombem przy całości. Sygnalizuje związek całość–część, lecz sama nie definiuje szczegółowo własności, współdzielenia ani cyklu życia części. Stosuj ją, gdy konwencja pomaga, i dodaj jawne ograniczenia, jeśli reguły mają znaczenie.