Přeskočit obsah
    Axiom AAF: Neztratit během vývoje hodnotu užitku systému očekávanou zákazníkem.

Odkaz do seznamu

Motiv

Evidujeme auta a u každého jeho barvu. Barvy tvoří samostatný seznam. Každé auto má vybránu jednu barvu z tohoto seznamu. Dvě různá auta mohou mít tutéž barvu — odkazují na tutéž evidovanou instanci barvy.

Evidujeme faktury a u každé odběratele. Partneři tvoří samostatný seznam. Každá faktura má vybraného jednoho partnera ze seznamu. Více faktur může odkazovat na téhož partnera.

V obou případech existují dva samostatné seznamy s vlastními životními cykly. Instance prvního seznamu si vybere a naváže existující instanci druhého seznamu, kterou používá, ale nevlastní. Tatáž instance druhého seznamu může být sdílena více instancemi prvního. Tento vztah je vzor Odkaz do seznamu.

Zkratka

vidí → Auto má barvu. Instance si ze seznamu vybere cizí instanci, kterou vidí a používá, ale nevlastní.

Popis

Vzor Odkaz do seznamu popisuje vztah, ve kterém instance jedné Class drží odkaz na sdílenou instanci druhé Class z jejího samostatného seznamu. Vzor má slangová synonyma Odkaz do číselníku a Číselníková vazba; všechny tři názvy jsou rovnocenné.

Instance obou Class žijí ve dvou samostatných seznamech. Instance druhé Class vzniká nezávisle na instanci první; instance první vzniká nezávisle na tom, zda už cílová instance existuje.

Provázání instancí přichází dodatečně. Instance první Class si vybere existující instanci druhé Class ze seznamu a naváže se na ni. Toto provázání je výskyt asociace v běhu — Link (viz kapitola Asociace).

Vztah je použití bez vlastnictví. Instance první Class instanci druhé používá a vidí, ale není jejím majitelem. Instance druhé Class nevzniká rozením z první a nezaniká s ní.

Instance druhé Class je sdílená. Více instancí první Class může odkazovat na tutéž instanci druhé. Sdílení je u tohoto vzoru analyticky vyžadováno a odlišuje ho od kompozice.

Použití je jednosměrné. Instance první Class ví o své instanci druhé Class a používá ji. Instance druhé Class o instancích první, které na ni odkazují, nic neví a nenese na nich žádnou závislost.

Strukturovaný popis

Vzor spojuje dvě Class — source a destination — jednou asociací. Konec asociace u destination má multiplicitu 1 (povinný odkaz) nebo 0..1 (volitelný odkaz) a směrovost k destination. Instance source tak vidí a používá instanci destination, opačně ne.

V instanční rovině drží instance source Link na jednu instanci destination. Dvě instance source mohou držet Link na tutéž instanci destination (sdílení).

(Ilustrativní diagram: TBD.)

Účastníci

  • source — typ Class, multiplicita dosazení 1. Třída, jejíž instance drží odkaz a používá instanci destination.
  • destination — typ Class, multiplicita dosazení 1. Třída, na jejíž sdílenou instanci se odkazuje.
  • vazba — typ Asociace, multiplicita dosazení 0 (statický prvek). Asociace, kterou vzor zavádí; vzor přebírá pevné vlastnosti jejího konce u destination: multiplicita 1 nebo 0..1, směrovost k destination.

Nejčastější chyby

Záměna za kompozici. V kompozici platí „svůj k svému" — instance části patří právě jedné instanci celku, vzniká s ní a zaniká s ní. Pokud cílová instance vzniká spolu se zdrojovou nebo ji zdrojová vlastní, vztah není Odkaz do seznamu, ale Kompozice (viz dále).

Záměna za sdílenou agregaci. Sdílená agregace je vztah celek/část s volnějšími pravidly životnosti. Odkaz do seznamu není vztah celek/část — destination je nezávislá entita, kterou source jen používá (viz dále).

Záměna za asociační třídu. Pokud samo spojení nese údaje (datum vzniku, kombinaci atributů), patří informace do třetí entity a vztah je Asociační třída, ne Odkaz do seznamu (viz dále).

Potlačení sdílení. Návrh, který brání dvěma instancím source odkazovat na tutéž instanci destination, popírá podstatu vzoru a posouvá ho k vlastnickému vztahu.

Obousměrné použití. Pokud zadání vyžaduje, aby instance destination znala instance source, jde o jiný vzor nebo o porušení směrovosti — řeší se, ne zavádí mlčky.

Vazby

Vzor Odkaz do seznamu je parametrickým vyjádřením metaclass Asociace pro konkrétní kombinaci vlastností konce asociace (viz kapitola Asociace). Stojí na BASE pojmech Class a Asociace (viz kapitoly Class, Asociace); vlastní BASE pojem nemá.

Sousední a konkurenční vzory CLM Lite: Kompozice ku 1, Kompozice ku N, Sdílená agregace, Asociační třída (viz dále).

Externí kotva: kniha Analytické modelování v praxi, kapitola 3.2.2 Vztah Odkaz do seznamu. V knize se vzor ilustruje příkladem Auto má barvu; konkrétní třídy C_Auto a C_Barva jsou použitím vzoru v modelu, ne součástí vzoru.

Verze a změny

  • 1.0 — Early Access.