![]() |
Metamodel: Structured Nodes |
Spustitelný uzel
ExecutableNode je abstraktní třída pro uzly aktivit, které mohou být spouštěny v rámci aktivity. Bývá používáno pro ošetření výjimek (což je zkoušeno až ve třetí zkoušce). Pro tuto úroveň je důležité jen vědět, že jde o třídu, jejíž specializací je StructuredActivityNode.
Strukturovaný uzel
Strukturovaný uzel (třída StructuredActivityNode) je spustitelný uzel, který obsahuje (vlastní) další uzly a hrany. To, že je vlastní, znamená mj. to, že se nemohou vyskytnout jinde, než právě v tomto elementu.
Strukturovaný uzel na rozdíl od aktivity není atomická operace. Obsahuje (může obsahovat) počáteční a koncový uzel. Pokud jej nemá, pak aktivita začíná ve všech akcích bez vstupní hrany (initial nodes) a končí, když je dokončena libovolná akce bez výstupní hrany (final nodes). Počáteční a koncový uzel ve strukturovaném uzlu jsou platné pouze v tomto uzlu. To tedy znamená, že na začátku aktivity není dán token do počátečního uzlu strukturovaného uzlu. Podobné je to s koncovým uzlem.
Strukturovaný uzel se zakresluje v obdélníku se zakulacenými rohy, s přerušovanou hraniční linkou a klíčovým slovem «structured». V knize [ocup-cg] je ještě umístěn název, ale ten ve standardu není zmíněn.
![]() |
Příklad strukturovaného uzlu |
Se strukturovaným uzlem souvisí i pojem proměnná (třída Variable). Jedná se o typový prvek (potomek třídy TypedElement), ke kterému lze přistupovat ze všech akcí strukturovaného uzlu. Proměnná danému strukturovanému uzlu patří. Notace pro třídu Variable není definována.
Podmínka, iterace, sekvence
Podmínka je něco, s čím jste si již setkaly v textu pro úroveň Fundamental. Za použití rozhodovacího a spojovacího uzlu jste mohli tok větvit a zase spojovat. Jinou cestou, jak toho dosáhnout, je použití podmínkového uzlu (třída ConditionalNode).
Podmínkový uzel sestává z jedné nebo více klauzulí (třída Clause). Každá klauzule obsahuje část, ve které probíhá test (asociace role), a část (nazvaná tělo), ve které je případně spuštěný kód (asociace body), pokud je podmínka splněna. Test i tělo klauzule není nic jiného než třída ExecutableNode, takže podmínky (a nejenom je) lze takto do sebe vnořovat.
Jakmile podmínkový uzel převezme řízení, projíždí testové části jednotlivých klauzulí. Narazí-li na první (pozor, pořadí není určeno!), která podmínku splňuje, spustí odpovídající tělo. Může se stát, že není splněna žádná podmínka a tedy se ani žádné tělo nevykoná. Z pohledu UML to špatně není, ale může to vadit v modelu, pokud se z podmínkového uzlu očekává nějaký výstupní pin.
Podmínkový uzel může obsahovat klauzuli else, která je spuštěna, pokud není splněna žádná z ostatních podmínek daného uzlu.
Atributy podmínkového uzlu:
- isAssured: Boolean = False: tvůrce modelu zajišťuje, že nejméně jeden test bude úspěšný.
- isDeterminate: Boolean = False: tvůrce modelu zajišťuje, že nejvýše jeden test bude úspěšný.
UML bohužel nedefinuje notaci tohoto uzlu, takže by se měla použít notace třídy StructuredActivityNode. Ta však není úplně nejlepší, proto si některé nástroje tvoří vlastní (zde ukázka, jakou notaci si definoval Enterprise Architect). Pravidla, které uzly se spustí jako první a které jako poslední, jsou shodné s třídou StructuredActivityNode.
![]() |
Příklad podmínkového uzlu |
Podobně jako podmínkový uzel se tvoří uzel pro iterace (třída LoopNode). Ten se skládá ze tří základních částí: inicializace, test a tělo. Všechny jsou typu ExecutableNode. Nejprve se vykoná inicializační část. Pak dle hodnoty atributu isTestedFirst se vykoná buďto nejprve test a pak případně tělo, nebo nejprve tělo a pak test. Žádnou specifickou notaci u tohoto typu uzlu UML opět nedefinuje, takže je nutné použít tu, které je daná třídou StructuredActivityNode nebo využít možností modelovacích nástrojů.
![]() |
Příklad cyklu |
Poslední třídou, kterou tu zmíním, je Sequence. Jedná se opět o strukturovaný uzel, který obsahuje sadu spustitelných uzlů (třída ExecutableNode), který má jasně určené pořadí svých prvků. Opět, není určena žádná specifická notace.
![]() |
Příklad sekvence |
Poznámka: V knize [ocup-cg] je ještě kapitola věnovaná ošetřování výjimek. Ta ale spadá do úrovně Advanced.
Žádné komentáře:
Okomentovat