|
nový analytický vzor „Asociační třída na vrcholu stromu” a jeho rozbor
2. část
autor: RNDr. Ilja Kraval, prosinec 2010
Object Consulting s.r.o.
Server objektových technologií
Úvod
V minulém článku jsme si představili nový vzor nazvaný „Asociační třída na vrcholu stromu“. Jedná se o kombinaci dvou vztahů v modelu tříd: Asociační třídy a generalizace.
Model tohoto vzoru uvedený v minulém článku doplníme ještě o tzv. diskriminátor (Vzor Diskriminátor viz kniha Analytické modelování pomocí UML v praxi, strana 77) následujícím způsobem:
Obrázek 1 Vzor Asociační třída na vrcholu stromu s diskriminátorem Typ A
Připomeňme, že asociační třída „A versus A“ propojuje přes vrcholovou abstraktní třídu A libovolné instance dědiců mezi sebou (tj. typově možné každý s každým) a číselník „Typ A versus A“ jako typický kódovník (code-list) dává tomuto vztahu navíc ještě interpretaci.
Uvedený vzor lze (pokud třeba) vylepšit o vyšší odolnost vůči chybám (lidově řečeno o tak zvanou „blbovzdornost“), o čemž bude pojednávat tento článek.
Povolené kombinace typů vztahů
Uvedené zvýšení odolnosti vůči chybám si nejprve vysvětlíme na již známém a často používaném modelu vzoru Party.
Jak je uvedeno v knize Analytické modelování pomocí UML v praxi a jak bylo napsáno v minulém článku, vzor Party zavádí velmi flexibilní vztahy mezi subjekty takto:
Obrázek 2 Vztah Subjekt - Subjekt ve vzoru Party
Asociační třída na vrcholu stromu zde zprostředkovává libovolný vztah mezi libovolnými subjekty různého typu (např. člen dozorčí rady, dceřiná společnost, divize apod.).
Je zřejmé, že nemá smysl zavádět například vztah typu člen dozorčí rady mezi dvěma subjekty typu právnická osoba anebo podobně by bylo nesmyslem zavést vztah dceřiná společnost mezi fyzickou osobou a právnickou osobou. Z toho je patrné, že evidentně existují „povolené kombinace vztahů typů“, které by bylo vhodné evidovat jako povolené kombinace ve smyslu „povolený typ subjektu kdo versus povolený typ subjektu ke komu versus typ vztahu“.
Například v instancích by mohla existovat takováto jedna evidovaná povolená kombinace:
[ typ subjektu kdo = „fyzická osoba“, typ subjektu ke komu = „právnická osoba“, typ vztahu = „člen dozorčí rady“ ]
Odpovídající řešení povolených kombinací je zavedeno a podrobněji vysvětleno ve zmíněné knize i s dalšími možnými příklady evidovaných kombinací. Uveďme si toto řešení, abychom jej poté mohli zobecnit do obecnější roviny vzoru:
Obrázek 3 Povolené kombinace typů vztahů mezi subjekty
Všimněme si, že třída s názvem Povolené typy vztahů subsub v sobě obsahuje v instanční rovině „trojkombinaci odkazů“ (zde ve smyslu 2 + 1) tak, jak je žádoucí: Z instance této třídy vede dvakrát odkaz do diskriminátoru typu subjektu (díky asociační třídě) a jednou do číselníku typů vztahu (díky odkazu do seznamu), čímž jsou vytvořeny zmíněné povolené kombinace.
Nyní stačí toto řešení zobecnit do obecnější roviny vzoru, dostaneme následující výsledek:
Obrázek 4 Zavedení Povolených typů vztahů
Tři stupně použití vzoru „Asociační třída na vrcholu stromu”
Vzor „Asociační třída na vrcholu stromu“ lze tedy na základě požadavků nasadit v celkem třech stupních možného použití:
1. (nejnižší) stupeň
Zavede se strom dědičnosti A i s diskriminátorem Typ A, na něj se nasadí asociační třída A versus A, přičemž se nezavede číselník vyjadřující typy vztahů Typ A versus A (tj. na předešlém obrázku se nezavede třída Typ A versus A). Interpretace vztahů mezi instancemi A je v tomto případě dána pouze podtypy na koncích asociační třídy a nepotřebuje další jejich ohodnocení číselníkem (tj. samotný vztah nemá své slovní vyjádření).
2. (střední) stupeň
Z požadavků vyplyne, že kromě tříd zavedených v předešlém stupni 1 je třeba navíc ještě zavést číselník ohodnocující („okódující“) vztahy mezi prvky subtříd A. Na předešlém obrázku se z toho důvodu zavede číselník Typ A versus A a vyvede se do něj odkaz ze třídy A versus A. V agendě subjektů tomu odpovídá číselník s texty „člen dozorčí rady“, „člen představenstva“, „dceřiná společnost“ atd.
Je vcelku logické, že pokud existují alespoň dva různé významy vztahů mezi stejnými podtypy třídy A, potom tento číselník typů vztahů musíme zavést, abychom vztahy pro stejné podtypy A od sebe odlišili. Příklad: Vztah člen dozorčí rady a člen představenstva má na koncích stejné podtypy a proto musí být daný číselník typů vztahů zaveden.
3. (nejvyšší) stupeň
Jakmile zavedeme 2. stupeň tohoto vzoru, měli bychom zvážit, zda je vhodné zavést také povolené kombinace mezi typy vztahů, tj. třídu Povolené typy vztahů A versus A na předešlém obrázku. Zavedení této třídy výrazně omezí chybovost obsluhy při evidenci vztahů mezi prvky podtypů třídy A.
V dalším pokračování si uvedeme známé příklady použití tohoto vzoru a také upozorníme na možná úskalí při nasazení tohoto vzoru.
Pokračování příště
|