Asociační třída¶
Motiv¶
Evidujeme sňatky. Sňatek propojuje dvě osoby (kdo si koho vzal) a navíc nese vlastní údaj — datum. Spojení dvojice tu samo o sobě něco eviduje.
Evidujeme příslušnost zaměstnance do oddělení. Příslušnost propojuje zaměstnance a oddělení a nese platnost od–do. Zaměstnanec se může přeřadit i vrátit do oddělení, kde už byl — táž dvojice tedy vznikne v čase vícekrát.
V obou případech není spojení dvojice holé — je to samostatně evidovaný pojem, který nese informaci. Prvek, který je současně vztahem i třídou, je vzor Asociační třída.
Zkratka¶
spojení nese informaci → Sňatek. Je to současně vztah i třída.
Popis¶
Vzor Asociační třída popisuje prvek, který je současně Class i Asociace. Jeho instance propojí dvojici instancí dvou Class a zároveň nese vlastní informaci o tom spojení.
AAF používá jen binární asociační třídu — propojuje právě dvě Class.
Každá instance asociační třídy má právě jeden odkaz na instanci první Class a právě jeden na instanci druhé — musí, protože propojuje dvojici. Technologicky proto vypadá jako třída se dvěma odkazy do seznamu (dvakrát „ku jedné"). Mezi oběma Class vzniká vztah M:N realizovaný instancemi asociační třídy. Tento M:N je odvozený — nikam se přímo nekreslí, vzniká až z množiny instancí asociační třídy.
Nejčastější použití je vzor Povolené kombinace: asociační třída vyjadřuje, která dvojice ze dvou seznamů je přípustná. Příklad: povolené kombinace Zboží a Množstevní jednotka — pivo se neprodává v metrech.
Zda musí být dvojice unikátní, závisí na tom, zda asociační třída nese další informaci:
- Pokud nenese žádnou informaci, dvojice musí být unikátní — dvě instance se stejnou dvojicí by nešlo ničím rozlišit.
- Pokud nese informaci (datum, atributy spojení), unikátnost se nevyžaduje — táž dvojice smí vzniknout vícekrát (například opakovaná příslušnost do téhož oddělení).
Vícenásobná konstrukce se redukuje¶
Pokud se zdá, že je třeba propojit více než dvě Class, AAF n-ární asociační třídu nezavádí. Vyberou se dva hlavní prvky (ty, které vztah definují) a ostatní entity se připojí Odkazem do seznamu (viz kapitola Odkaz do seznamu), ne jako další konec.
Příklad: Sňatek propojuje dvě osoby. Má-li se evidovat i město, kde se konal, připojí se Město Odkazem do seznamu — ne jako třetí konec. Trojice (osoba, osoba, město) totiž není sňatek; sňatek je mezi dvěma osobami a město je doplňková informace.
Strukturovaný popis¶
Vzor spojuje dvě Class — prvni a druhy — přes asociační třídu, kterou zavádí. Asociační třída je napojena na každou z dvojice jednou asociací; konec u prvni i u druhy má multiplicitu 1 a směrovost k té Class (asociační třída je vidí a používá).
Konce u prvni a u druhy (multiplicita 1) jsou instanční rovina — každá instance asociační třídy drží právě jednu dvojici. Druhé konce, u asociační třídy, nesou odvozenou kardinalitu M:N: kolik instancí asociační třídy připadá na jeden prvni, resp. druhy. Vzor je nefixuje — 0..* výchozí, 1..* když musí existovat aspoň jedna dvojice; spodní hranice se nehádá, řídí se scénářem.
(Ilustrativní diagram: TBD.)
Účastníci¶
prvni— typClass, multiplicita dosazení1. První z propojované dvojice.druhy— typClass, multiplicita dosazení1. Druhý z propojované dvojice.asociacni_trida— typClass, multiplicita dosazení0(statický prvek). Třída, kterou vzor zavádí; propojuje dvojici a nese informaci. Autor cílového modelu ji pojmenuje, její struktura (dva povinné odkazy) je dána vzorem.vazba_prvni,vazba_druhy— typAsociace, multiplicita dosazení0(statické prvky). Dvě asociace, kterými vzor napojuje asociační třídu naprvniadruhy; každá s multiplicitou1na konci u připojené Class.
Nejčastější chyby¶
Záměna za nativní M:N tabulku z databáze. Vazební (mezi)tabulka generovaná v technologii je implementační realizace vztahu M:N, ne asociační třída. Asociační třída je obecnější analytický pojem — může nést informaci a nemusí mít unikátní dvojici.
Předpoklad, že dvojice musí být vždy unikátní. Unikátnost platí jen tehdy, když asociační třída nenese žádnou informaci. Nese-li informaci, táž dvojice se smí opakovat.
N-ární konstrukce místo redukce. Vztah se třemi a více konci se neřeší jednou n-ární asociační třídou, ale volbou dvou hlavních prvků a doplněním ostatních Odkazem do seznamu.
Záměna za Odkaz do seznamu. Pokud spojení dvojice nese vlastní informaci, není to prostý odkaz — Odkaz do seznamu spojení (Link) žádnou informaci nenese (viz kapitola Odkaz do seznamu).
Vazby¶
Vzor Asociační třída je prvek, který je současně Class i Asociace (viz kapitoly Class, Asociace). Pro dva konce a pro redukci vícenásobné konstrukce používá vzor Odkaz do seznamu (viz kapitola Odkaz do seznamu).
Sousední vzory CLM Lite: Kompozice ku 1, Kompozice ku N, Sdílená agregace (viz kapitoly).
Děj a pravidla nad spojením — vznik a uzavření příslušnosti, nepřekrývání období platnosti — patří do scénáře Use Case 1. druhu (viz kapitola Use Case 1. druhu), ne ke vzoru.
Externí kotva: kniha Analytické modelování v praxi, kapitola 3.2.4 Vztah Asociační třída (vzory Auto, Osoba, Vlastnictví; Povolené kombinace). UML zná asociační třídu s dvěma i více konci; AAF používá jen binární a vícenásobnou redukuje na binární + Odkazy do seznamu. Podmíněná unikátnost dvojice (jen bez informace) je analytické pravidlo AAF, ne vlastnost databázové tabulky.
Verze a změny¶
- 1.0 — Early Access.