Konspekt prezentacji: Agregacja i Kompozycja w UML
1. Wstęp
Tematem niniejszej prezentacji są dwa istotne mechanizmy modelowania relacji między
obiektami w języku UML: agregacja oraz kompozycja. Są to specjalne typy asocjacji, które
pomagają precyzyjnie określić relacje części i całości. Zrozumienie różnic między nimi
pozwala na lepsze projektowanie systemów informatycznych zgodnie z zasadami
programowania obiektowego. Celem tej prezentacji jest pokazanie tych różnic oraz
zilustrowanie ich przykładami z życia codziennego i praktyki programistycznej.
2. Agregacja
Agregacja jest specjalnym przypadkiem asocjacji, w którym jeden obiekt (tzw. całość)
zawiera inne obiekty (części), ale obiekty te mogą istnieć niezależnie od siebie. W praktyce
oznacza to, że cykl życia obiektów części nie jest bezpośrednio związany z cyklem życia
obiektu całości. Po usunięciu obiektu całości, jego części mogą nadal istnieć.
Agregacja nie posiada ścisłej definicji formalnej – jej semantyka zależy często od kontekstu i
decyzji modelującego. UML przewiduje graficzne oznaczenie agregacji poprzez pusty romb
po stronie obiektu zawierającego.
Cechy agregacji:
- Tylko jedna końcówka asocjacji może być agregacją.
- Czas życia obiektów nie jest powiązany.
- Przykład: Kurs i Student – kurs może istnieć bez konkretnego studenta i odwrotnie.
3. Kompozycja
Kompozycja to silniejszy wariant agregacji, określana też jako agregacja silna. W tym
przypadku część nie może istnieć bez całości – są one ściśle powiązane cyklem życia.
Oznacza to, że gdy obiekt całości (właściciel) zostaje usunięty, wszystkie obiekty składowe
również przestają istnieć.
W UML kompozycję oznacza się poprzez wypełniony romb po stronie właściciela.
Kompozycja jest stosowana wtedy, gdy relacja 'część-całość' jest bardzo ścisła i
nierozerwalna.
Cechy kompozycji:
- Silniejsza forma agregacji.
- Czas życia obiektów jest ściśle związany.
- Krotność po stronie kompozycji wynosi maksymalnie 1.
- Przykład: Dom i Pokój – pokój nie istnieje bez domu.
4. Porównanie agregacji i kompozycji
Choć oba typy relacji dotyczą zależności części od całości, różnią się one istotnie siłą
powiązania oraz wpływem cyklu życia jednego obiektu na drugi.
Tabela porównawcza:
- Agregacja: luźna relacja, obiekty mogą istnieć niezależnie.
- Kompozycja: silna relacja, obiekty są współzależne.
5. Zastosowania w praktyce
Agregacja jest często używana, gdy modelujemy związki logiczne bez konieczności ścisłego
wiązania cykli życia. Na przykład: Biblioteka i Książka – książki mogą istnieć niezależnie od
biblioteki.
Kompozycja natomiast znajduje zastosowanie tam, gdzie istnienie części jest całkowicie
uzależnione od całości – np. Ciało i Serce, Plik i jego Wiersze, Firma i Działy itp.
6. Podsumowanie
Rozróżnienie pomiędzy agregacją a kompozycją ma istotne znaczenie dla projektowania
oprogramowania, zwłaszcza przy projektowaniu klas i ich relacji. Dobrze dobrany typ
asocjacji wpływa na czytelność i poprawność modelu oraz późniejszą implementację.