AGREGACJA/KOMPOZYCJ
A
Agregacja jest rodzajem asocjacji; zadaniem agregacji jest
modelowanie związku całość-część.
agregacja jest asocjacją: dla obu jej końców są określane liczności, a także może mieć
atrybuty, np.
oddzi
al
Żołnierz
Termin
od
do
*
1..100
agregacja jest wykorzystywana do modelowania związku całość-część
oddzi
ał
Żołnierz
*
1..100
całość
część
Inne nazwy dla ról agregacji:
całość
składa się z
zawiera
obejmuje, itp.
część
wchodzi w skład
należy
jest zawarta w, itp.
Nazwa agregacji i nazwy
jej ról, jako oczywiste,
są pomijane !
A
B
Własności agregacji:
jest relacją niesymetryczną, tzn. jeśli B jest częścią
A, to A nie jest częścią B
A
B
C jest relacją przechodnią (tranzytywną), tzn. jeśli C jest
częścią B i B jest częścią A, to C jest częścią A
Pojęcie agregacji jest rozumiane na
dwa sposoby:
W UML te dwie sytuacje zostały rozdzielone. Pierwszą formę
nazwano kompozycją.
Kompozycja oznacza, że cykl życiowy składowej zawiera się w
cyklu życiowym całości, oraz że składowa nie może być
współdzielona.
Jako związek część-całość pomiędzy obiektami świata
rzeczywistego; np. serce jest częścią czlowieka.
Jako pomocniczy środek do modelowania dowolnej innej
sytuacji, kiedy trzeba wydzielić podobiekty w pewnych
obiektach. np. informacja o ubezpieczeniach wewnątrz
obiektów pracowników.
Kompozycja jako mocna postać
agregacji
oddział
Żołnierz
*
*
*
agregacja
kompozycja
1
Czlowiek
Serce
Sposoby Implementacji
Możliwosci
Agregacja może być
implementowana w ten sam
sposób co asocjacja 1-do-wiele.
Pole
Class Oddział{
Final int licznosc = 100;
String rozkazy;
Żołnierze[licznosc]; /* kolekcja
referencji do obiektow skladowych
*/
}
Class Żołnierz{
String rozkazy;
Oddział oddział; /* referencja do
obiektu bedacego caloscia
*/
}
Osobna Klasa
Class termin{
final int licznosc = 100;
Date data;
Oddział całość;
Żołnierz[licznosc];
}
Odpowiednio, zarówno obiekt Oddział, jak i
obiekty Żołnierz muszą zawierać referencje do
obiektu Termin
Klasa Wewnetrzna
Class Niebo{
final int licznosc = 100;
private class Gwiazdy
{
...............
};
Gwiazdy gwiazdy[licznosc];
}
Zalety i Wady
Zalety
Ukrywanie implementacji.
Automatyczna propagacja operacji(Kompozycja).
Wady
Wady poszczególnych kolekcji.
Nieodpowiedni dla agregacji.
Unikalność przynależności
Analiza Problemu
Elementy składowe powinny(w przypadku
agregacji) wchodzić w skład jedynie jednego
obiektu będącego całością.
Elementy składowe muszą(w przypadku
kompozycji)
należeć jedynie do jednego obiektu będącego
całością.
Możemy zaprojektować metodę klasowa która
pozwoli nam na sprawdzenie czy dodawany obiekt
składowy nie jest już częścią innego obiektu
Class Zolnierz{
String stopien;
int wiek;
Zolnierz[] zolnierze = new Zolnierz[licznosc];
public Zolnierz(String stopien, int wiek)
{
this.stopien = stopien;
this.wiek = wiek;
}
}
Class Oddzial{
final int licznosc = 100;
int wsk_dodania = 0;
String rozkazy;
Zolnierz[] zolnierze = new Zolnierz[licznosc];
public Oddzial(String rozkazy)
{
this.rozkazy = rozkazy;
}
public void dod_zolnierza(Zolnierz zolnierz)
{
zolnierze[wsk_dodania++] = zolnierz;
}
public static boolean sprawdz_przynaleznosc(Oddział oddział, zolnierz zolnierz)
{
for(int i = 0; i < oddział.zolnierze.length; i++){
if(oddział.zolnierze[i].equals(zolnierz));
}
return true;
return false;
}
}
ASOCJACJE N-ARNE
Asocjacja n-arna
Asocjacja n-arna to asocjacja, której wystąpienia łączą n obiektów,
będących instancjami co najwyżej n klas: 3-arna - 3 obiekty (inna
nazwa dla tej asocjacji to ternarna), 4-arna - 4 obiekty, itd. Dana klasa
może pojawić się na więcej niż jednej pozycji w asocjacji.
Asocjacja binarna ze swoją uproszczoną notacją i pewnymi dodatkowymi
własnościami (takimi jak możliwość ustalania kierunku nawigowania,
kwalifikatorów, związków agregacji czy kompozycji) jest specjalnym
rodzajem asocjacji n-arnej (dla n=2). Asocjacja binarna i 2-arna są
równoważne, nie istnieje między nimi różnica semantyczna, inny jest
tylko sposób reprezentowania. Wymienione wyżej dodatkowe własności
asocjacji binarnych są zabronione dla asocjacji n-arnych, gdzie n > 2.
Notacja
K1
K2
K3
nazwa
asocjacji
K1
K2
K3
asocjacja
3-arna
asocjacja
4-arna
Oddział
Wojna
Żołnierz
Bitwa
*
*
*
Pole
Utrzymywanie n –1
referencji(możliwie kolekcji
referencji) w każdej klasie jest
dość uciążliwe.
Utrudniona Nawigacja
Osobna klasa
Class Asocjacja_N_Arna
{
Oddzial oddzial;
Zolnierz zolnierz;
...
}
Kazda klasa wchodzaca w sklad asocjacji musi
utrzymywać jedynie referencje do powyższego
obiektu.
Zalety i Wady
Zalety
Łatwa nawigacja.
Niski stopień komplikacji.
Możliwość wprowadzenia atrybutów asocjacji.
Wady
Duża liczba referencji
Obejście asocjacji n-arnej
Asocjacje n-arne mają sens wtedy, gdy do identyfikacji powiązania (n-
arnego) potrzebne są wszystkie obiekty, tzn. gdy liczność każdej z ról
jest “wiele”. W pozostałych przypadkach asocjację n-arną warto jest
zastępować asocjacjami binarnymi, które są łatwiejsze do
implementacji i wyposażone w dodatkowe własności, o których była
mowa poprzednio. Niestety traci się informację o związku, łączącym
grupę obiektów w pewną całość.
K1
K3
K2
KA
a1
a2
m1
Asocjacja n-arna zostaje zamieniona na klasę i n asocjacji
binarnych.
K1
K3
K2
KA
a1
a2
m1
A