Temat: Asocjacje vs Agregacje/Kompozycje
Wg mojego rozumienia zacytowanego fragmentu standardu UML, niektóre stwierdzenia dot. kompozycji stoją z nim w sprzeczności.
Jarek Żeliński:
[...] kompozycja to 'silniejsza" forma agregacji, tu "część" musi wystąpić i tyle...
To nieprawda, że w kompozycji "część" zawsze musi występować. W kompozycji może być dopuszczalna liczność 0 po stronie "części".
Natomiast to co standard mówi o kompozycji (i co odróżnia kompozycję od zwykłej agregacji), to to, że w kompozycji:
- część może być przyporządkowana (w określonym momencie czasu) do najwyżej jednej (!) całości (maksymalna liczność po stronie całości = 1), i że
- zwykle (!) cykl życia części jest związany z całością (czyli część przestaje istnieć wraz ze 'zniszczeniem' całości).
I z wcześniejszego postu:
- jeżeli ten związek dopuszcza odłączenie B od A to będzie to agregacja
Wg cytowanego fragmentu standardu, odłączenie jest możliwe także dla kompozycji.
wiąże się to także z rygorem na tożsamość klasy (klasa agregowana nie musi mieć tożsamości bo występuje zawsze jako część, np. moje buty nie mają numeru seryjnego ale one są zawsze czyjeś i "buty Żelińskiego" identyfikują je jednoznacznie.
Klasa agregowana [w kompozycji] nie zawsze występuje jako część (bo może być odłączona od całości). W takim przypadku obiekty klasy "część" muszą posiadać także 'samodzielną' tożsamość (muszą być identyfikowalne także bez "całości").
A "buty Żelińskiego" nie zawsze są czyjeś - po wystawieniu na ulicę (śmietnik) stają się niczyje (być może tylko tymczasowo - mamy trochę bezdomnych w Polsce), a jednak istnieją nadal i są identyfikowalne - może po numerze seryjnym jeśli go mają (bo np. była to seria limitowana dla koneserów ;-) )