UPOZORNĚNÍ

Zkoušky OCUP Fundamental a OCUP Intermediate již není možné absolvovat. Nově jsou k dispozici OCUP 2 Foundation a OCUP 2 Intermediate. Texty uvedené na těchto neodpovídají plně novým zkouškám. Aktuální text najdete na nových stránkách.

Testy znalostí UML

Chcete si kdykoliv před, při nebo po čtení těchto stránek udělat test znalostí UML? Máte možnost absolvovat takový, který připravil autor těchto stránek. Vše podstatné najdete na http://www.kurzy-uml.cz.

Asociace (Associations)

Classes diagram of the Kernel package
Třída Association

Asociace (třída Association) je množina n-tic typových instancí. Instance třídy Association je nazývána link. Link je pak n-tice, ve které každý konec asociace má právě jednu hodnotu. Každá tato hodnota je instance typu daného konce asociace.

Asociace má alespoň dva konce (binární asociace).

Násobnost asociace říká, s kolika instancemi protilehlé třídy může být třída v asociaci. Pokud toto číslo není pevné, určujeme minimální a maximální počet. Minimum je 0 a říká, že vztah je volitelný (tj. vztah existuje, ale počet elementů je 0).

Notace a sémantika

Asociace se znázorňuje plnou (nepřerušovanou) linkou mezi asociace se účastnících vlastností (properties). Asociace se účastní minimálně dvě vlastnosti (properties) – viz vazba mezi Property a Association.

Příklad: Notace asociace

Každá asociace může být pojmenovaná.

U jména může být uvedena i šipka, která napomáhá pochopit název asociace (určuje směr, kterým vztah číst). Rozhodně však neříká nic o směru navigace (viz dále)!

Na každém konci asociace může být uveden název role, který pojmenovává roli vlastnosti u daného konce asociace. Tyto role jsou jména vlastností (Property) – např. atributů třídy – které jsou součástí asociace nebo jedné ze zúčastněných tříd.

K názvu role lze uvést i viditelnost.

Jelikož role je třída Property, je takto také využívána (např. v programovacích jazycích jde typicky o atribut třídy). Na předchozím obrázku tedy např. třída Klient může mít atribut účet typu Bankovní účet.

n-ární asociace – pokud má asociace více zakončení, zakresluje se kosočtvercem a plné čáry vedou ke všem třídám účastnících se asociace.

Příklad: n-ární asociace

Tento zápis lze samozřejmě použít i pro binární asociaci, ale nemá to valný význam.

Příklad: Dvojí notace binární asociace

Kosočtvercovou notaci však nelze použít pro agregace ani kompozice (viz dále).

Řetězec vlastností (Property string)

Vlastnost (property) může mít řetězec vlastností {union} a {subsets <property>}.

Příklad: {union} a {subset <property>}
Na obrázku vidíme mj. atribut platebníKarty, který je odvozené spojení (derived union). To znamená, že je složen z několika jiných množin modelu. V našem případě jde o množiny debetky a kreditky. U nich je uvedeno, že jsou podmnožinou právě atributu platebníKarty.

Generalisace asociací

Asociace lze generalizovat (je totiž specializací třídy Classifier). Platí pro ni však další pravidla.

Počet asociačních konců v potomkovi musí zůstat zachován a odpovídající třídy musí být kompatibilní, tj. musí jít o tytéž třídy nebo jsou přímými či nepřímými potomky těchto tříd.

Násobnost potomka asociace může být pouze omezena, nikoliv rozšířena.

Příklad: Generalisace asociace

Orientovaná asociace, směrování

Orientovaná asociace je asociace, pomocí které je možné se dostat z jedné účastnické role do další.

Asociace je s určením směru (navigable), pokud vlastnost (property) konce je vlastněna třídou na jejím zakončení nebo je součástí atributu asociace nazvaném navigableOwnedEnd.

Příklad: Jednosměrný vztah


Šipka se kreslí u té třídy, do které se lze navigovat (směr navigace).


Zápis násobnosti a názvu role lze uvést i u třídy, do které se navigovat nelze. V takovém případě pak jde o atribut (property) asociace, nikoliv třídy.

Pokud chceme explicitně říct, že zakončení asociace nemá směrování, pak na jejím konci (ta strana, kam nelze směrovat) zakreslíme křížek.

Interpretace notace
  • Pokud jsou uvedeny šipky i křížky, pak je notací navigace jasně znázorněna.
  • Pokud nejsou uvedeny ani šipky, ano křížky, pak nám zápis o navigaci neříká nic.
  • Pokud máme uvedeny pouze šipky, pak navigace je sice specifikovaná, ale interpretace není jednoznačná.
Příklad: Navigability
Případ tříd:
  • A a B: asociace bez určení navigability.
  • C a D: asociace s jedním zakončením schopným navigace, druhé zakončení není specifiková-no.
  • E a F: asociace se dvěma zakončeními schopnými navigace.
  • G a H: asociace s jedním zakončením schopným navigace a druhým navigace neschopným.
  • I a J: asociace s oběma zakončeními neschopných navigace.

Pokud je vztah jednosměrný (případ tříd G a H), pak třída G ví o třídě H, ale třída H o třídě G nikoliv.

V případě vztahu obousměrného (třídy E a F, případně příklad níže) o sobě třídy vědí. Tedy např. Fakulta zná své Studenty a Studenti vědí, na které Fakultě studují.

Příklad: Obousměrný vztah

Agregace a komposice

Agregace je binární asociace rozšířená o (nezávaznou) informaci, že účastnící se třídy nemají rovno-cenný vztah, ale jde o hierarchii typu celek-část. Používá se pro znázornění, jak je celek logicky pospojován ze svých částí.

Kompozice je přísnější forma agregace. Existence jednotlivých částí plně závisí na celku: celek své části vlastní.

Agregace a kompozice

Příklad: Agregace: Společnost

Agregace resp. komposice je atribut (property) třídy Property. Typem atributu je výčtový typ AggregationKind s hodnotami:
  • none – nejde ani o agregaci, ani o komposici
  • shared – jde o agregaci
  • composite – jde o kompozici
Podívejme se na následující dva obrázky.

Příklad: Agregace motoru

Na tomto obrázku může mít jeden konkrétní motor (tutéž instanci objektu) auto i loď (motor sdílejí). V reálu tedy nesmysl.

Příklad: Kompozice motoru

Zde již jedna konkrétní instance motoru je vlastněna autem či lodí, ale hlavně je motor namontován buďto v autě nebo lodi. Není ale problém motor (jednu konkrétní instanci) vzít a přemontovat z lodi do auta. Instance motoru tak změní svého vlastníka.

Pokud je násobnost částí celku proměnná (např. 1..*), pak jednotlivé části nemusí vznikat najednou, ale mohou být vytvořeny později. Stejně tak k zániku částí může dojít kdykoliv během života vlastněného objektu.

Vlastněná část v případě kompozice nesmí vzniknout dříve než instance celku a stejně tak část nemůže zaniknout po zániku vlastníka. Pozor, pokud instanci části předám jinému vlastníku, pak samozřejmě tato část může žít déle, než původní vlastník (právě proto, že původní vlastník jej již nevlastní).

Pozor! Agregace i kompozice se týkají pouze binárních asociací.

Agregace a kompozice mohou tvořit pouze acyklický graf.

Kompozit (část) je dán atributem isComposite třídy Property.

Směr čtení versus směr navigace

Směr čtení s navigabilitou naprosto nesouvisí. Směr čtení napomáhá pochopit název asociace, kdežto směrování (navigabilita) říká, který objekt přistupuje ke kterému.

Příklad: Směr čtení versus směr navigace

Žádné komentáře:

Okomentovat

Líbila se vám právě přečtená kapitola?

Líbil se vám článek? Přinesl vám užitek? Pokud ano, můžete mi zaslat pár drobných, čímž jednak dáte najevo, že se vám tu opravdu líbilo, a jednak mi ukážete, že má práce není zbytečná. Informace o darovací platbě zde.