Asociace¶
Úvod¶
Tato kapitola zavádí pojem Asociace — strukturní vztah mezi dvěma Class — spolu s pojmy Konec asociace (nositel vlastností vztahu) a Link (výskyt asociace v běhu systému).
Všechny tři pojmy žijí na úrovni analytického modelování (AM) s mírou detailu implementace 0 % (viz kapitola Analytické modelování). Nenesou žádný technologický detail.
Asociace¶
Asociace je strukturní vztah mezi dvěma Class v návrhu informačního systému (viz kapitola Class), který instanciováním vede ke vztahu mezi instancemi.
Instance Asociace v běhu systému je Link. Vztah návrh–běh je u Asociace stejný jako u Class: Class v návrhu dává vznik výskytu Class v běhu, Asociace v návrhu dává vznik Linku v běhu.
Asociace v CLM Lite spojuje právě dvě Class (odchylka od UML).
Asociace se nachází postupem od instancí ke třídám. Nejprve se v zadání hledají konkrétní Linky mezi výskyty (kdo s kým), teprve poté se tyto Linky zobecní do Asociace v modelu tříd. Pokud je v zadání vidět vztah mezi instancemi, vznikl tento vztah z Asociace v modelu tříd.
Povaha Asociace se neurčuje ze slovního spojení. Výrazy „obsahuje", „má", „patří" samy o sobě neříkají, o jaký vztah jde. Povahu odhalí nejjednodušší scénář, který s instancemi pracuje — typicky scénář vzniku instance nebo navázání vztahu.
Jakmile je Asociace mezi dvěma Class zavedena jako konkrétní vzor, žádný jiný scénář se stejnými instancemi nesmí pracovat podle jiného vzoru. Scénář, který předpokládá jinou povahu vztahu, je nekonzistence v zadání.
Asociace nabývá různého analytického významu, vyjádřeného označením konců. Konkrétní významy zavádějí vzory CLM Lite Kompozice ku 1, Kompozice ku N, Odkaz do seznamu, Sdílená agregace a Asociační třída (viz dále).
Rozlišující znaky¶
Asociace nemá metody ani operace. Děj a kontroly při vzniku, zániku nebo změně Linku patří do scénáře Use Case 1. druhu (viz kapitola Use Case 1. druhu).
Asociace nemá implementační realizaci. Žádný JOIN, cizí klíč, ORM mapping ani navigace přes vlastnost objektu. Implementace patří do úrovní Design a Kódování (viz kapitola Analytické modelování).
Asociace nemá pravidla pro přechody stavů. Kontrola, zda Link smí vzniknout, zaniknout nebo se změnit, patří do scénáře příslušného přechodu stavu.
Asociace nemá více než dva konce. Konstrukce se třemi a více konci se v CLM Lite neřeší n-ární asociací, ale reifikací — zavedením nové Class, která vztah reprezentuje, a samostatných binárních Asociací.
Asociace vede ke vztahu mezi instancemi (Link). Tím se liší od Generalizace, která je vztahem přímo mezi třídami a k Linku nevede. Při hledání vztahů se vždy hledá nejprve Asociace, teprve poté Generalizace (viz dále).
Konec asociace¶
Konec asociace je strukturní bod napojení Asociace na jednu ze dvou Class, které Asociace spojuje. Asociace v CLM Lite má právě dva konce, jeden u každé Class.
Konec asociace je nositelem tří vlastností: multiplicity, role a směrovosti. Tyto vlastnosti nese konec asociace, ne Asociace jako celek a ne Class.
Na konec asociace se odkazuje dvěma způsoby: „konec asociace u třídy X" (konec napojený na Class X) nebo „konec asociace v roli X" (konec, jehož role je X).
Konec asociace není totéž co Class napojená na asociaci. Formulace „třída B má multiplicitu 0..1" je chybná — multiplicitu má konec asociace u třídy B, ne třída B.
Multiplicita¶
Multiplicita konce asociace je povolený počet instancí na daném konci, vztažený k jedné instanci na druhém konci.
Multiplicita se zapisuje celým číslem (1), rozsahem s dvěma tečkami (0..1, 1..*), nebo hvězdičkou * pro libovolný počet.
Spodní a horní hranice multiplicity se určují přes všechny stavy evidovaných instancí, ne pouze přes stav úplně vyplněné instance.
Příklad: u evidované faktury je spodní hranice počtu řádků 0, protože faktura ve stavu otevřená k editaci může mít 0 řádků. Věcné pravidlo „došlá faktura musí mít alespoň jeden řádek" se kontroluje v případu užití při přechodu stavu, ne na konci asociace.
U kolekce (vícehodnotový konec — Kompozice ku N, Sdílená agregace ku N) spodní hranice 1..* neznamená povinnost, ale transakčnost založení: při vzniku instance majitele se musí současně založit první prvek kolekce. Typicky stavy entity — kolekce odkazů do číselníku stavů, kde první stav vzniká spolu s entitou. Pojem povinný se sem nepřenáší.
Role¶
Role konce asociace je pojmenování, jakou roli hraje Class na daném konci vůči druhé Class.
Za roli se prakticky volí název, jak instanci na tomto konci vidí instance na druhém konci.
Pokud je stejná Class použita ve více asociacích vůči téže druhé Class, role je odlišuje. Příklad: C_Adresa v rolích trvalé bydliště a přechodné bydliště u C_Fyzicka_osoba.
Směrovost¶
Směrovost konce asociace vyjadřuje, zda instance na druhém konci vidí a používá instanci na tomto konci.
Šipka u konce znamená, že instance protistrany vidí a používá instanci na tomto konci; asociace směřuje do této Class. Bez šipky není směrovost tímto koncem explicitně určena.
Směrovost je analyticky závazná. Pokud asociace směřuje z A do B, pak A používá B, ale B o A nic neví a nesmí v sobě nést žádnou závislost na A.
Porušení směrovosti v designu nebo kódu je analytická chyba. Příklad porušení: číselník Barev obsahuje kód obsluhující Auta, ačkoli asociace směřuje od Auta k Barvě.
Link¶
Link je výskyt Asociace v běhu informačního systému. Vzniká navázáním instance jedné Class na instanci druhé Class.
Link je k Asociaci ve stejném vztahu jako výskyt Class ke Class: Asociace je meta-pravidlo, Link je jeho konkrétní výskyt mezi dvěma instancemi.
Nejčastější chyby¶
Přiřazení vlastnosti konce asociace třídě. Formulace „třída B má multiplicitu" přenáší vlastnost konce na Class. Multiplicitu, roli i směrovost nese konec asociace.
Určení multiplicity jen přes plně vyplněnou instanci. Otrocké přenesení věcného pravidla „faktura musí mít řádek" do multiplicity 1..* je chyba; spodní hranice se počítá přes všechny stavy, tedy 0..*.
Zanedbání směrovosti. Autor vyjde z relační databáze a převezme symetrii vazby JOIN do analytického modelu. Tím ztratí směr použití a model přestane být analyticky čitelný.
Hledání Generalizace před Asociací. Vztahy se hledají vždy nejprve jako Asociace; Generalizace se nalezne až poté.
Zavedení n-ární asociace. V CLM Lite vztah se třemi a více konci se neřeší jednou asociací, ale reifikací na novou Class a binární Asociace.
Implementační realizace v analytickém modelu. JOIN, cizí klíč nebo ORM mapping v modelu tříd míchá AM s Designem.
Vazby¶
Asociace spojuje dvě Class (viz kapitola Class). Její výskyt Link je obdobou výskytu Class.
Asociace stojí na Objektovém paradigmatu. Směrovost konce asociace je projevem směrovosti a nezávislosti interakcí mezi prvky (viz kapitola Objektové paradigma).
Analytické významy Asociace zavádějí vzory CLM Lite: Kompozice ku 1, Kompozice ku N, Odkaz do seznamu, Sdílená agregace, Asociační třída (viz dále).
Druhým vztahem modelu tříd je Generalizace, která nevede k Linku (viz dále).
Asociace žije na úrovni AM; její mapování do Designu a RDB popisuje kapitola Analytické modelování.
Asociace je BASE pojem AAF. Externí kotva: kniha Analytické modelování v praxi (kapitola 3.2 Vztahy mezi třídami). Z UML 2.5.1 (Association, Property jako konec asociace) se přebírají pouze rysy slučitelné s AM — Association jako vztah mezi třídami, Link jako její instance, konec asociace jako nositel vlastností, tři vlastnosti konce (multiplicita, role, směrovost). Nepřebírají se n-ární asociace, Association Class jako samostatný konstrukt, qualifier a odvozené asociace.
Verze a změny¶
- 1.0 — Early Access.