Stavový diagram

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Stavový diagram (anglicky State Diagram) je v UML způsob grafického zápisu vývoje systému, který má konečný počet stavů. Takovým systémem může být konečný automat (stavový automat) či další podobné systémy, které vyjadřují stavy určitého objektu a přechody (přechodovou funkci) mezi nimi. Diagram poskytuje sadu elementů pro popis chování systému, který je vyjádřen průchodem stavy a je řízen vnějším vstupem.

Stavové automaty[editovat | editovat zdroj]

Podle specifikace modelovacího jazyka UML[1] jsou stavové automaty důležitou pomůckou při modelování dynamického chování systému. V průběhu průchodu stavy mohou být vykonávány různé aktivity. Diagramy stavových automatů podle této definice jsou tvořeny třemi základními prvky – stav, událost, přechod.

Charakteristika elementů, pro které má reprezentace stavovým automatem smysl:

  • element reaguje na vnější události,
  • životní cyklus elementu může být vyjádřen jako řada stavů, přechodů mezi nimi a událostí,
  • chování elementu je důsledkem jeho předchozího chování.

V objektově orientovaném modelování mohou stavové automaty být použity k modelování dynamického chování reaktivních objektů, jako jsou třídy, případy užití, podsystémy nebo celé systémy.

Na obrázku je znázorněn životní cyklus žárovky.

Události jsou odesílány pomocí vypínače. Odesláním události „rozsvítit“ (tedy zapnutím vypínače) se přenese žárovka do stavu Rozsvíceno. Odesláním události „zhasnout“ se přenese žárovka do stavu Zhasnuto. V určitém okamžiku může nastat událost „prasknout“ (kdy dojde k prasknutí vlákna žárovky). Tato událost končí životní cyklus žárovky.

Stav[editovat | editovat zdroj]

Stav charakterizuje trvání konfigurace neměnných podmínek v systému. Stavem může být označená situace, kdy objekt čeká na událost nebo se objekt nějakých způsobem chová. Stavy jsou, kromě počátečního pseudostavu a koncového stavu, znázorněny pomocí obdélníku se zaoblenými rohy a názvem umístěným v horní části. Stav je v daném konkrétním okamžiku určen následujícími faktory:

  • Hodnotami atributů daného objektu,
  • Relacemi s dalšími objekty,
  • Aktuálně vykonávanou aktivitou.
  • Každý stav může obsahovat libovolný počet akcí a aktivit.

Akce – proces, který proběhne rychle a je nepřerušitelný.

Aktivita – déle trvající proces, který lze přerušit.

Každá akce ve stavu je přidružena k internímu přechodu, který je následkem události. Interní přechod umožňuje zachytit skutečnost významnou v rámci stavu, která ale nezpůsobuje přechod do stavu jiného.

Přechod[editovat | editovat zdroj]

Přechod (Transition) [2] je přímé propojení jednotlivých stavů. Směřuje od zdrojového stavu k cílovému. Přechod ze stavu do stavu je reakcí na vznik události nebo ukončení činnosti (nebo činností) v aktivním stavu (vznik tzv. completion event). Nad každým přechodem může být volitelný popisek s následující syntaxi Událost [podmínka] / Akce. Každá část popisku je volitelná.

  • Událost – interní nebo externí výskyt, který zahájí přechod. Může být i výše zmíněná completion event (automatický přechod).
  • Podmínka (guard) – booleovský výraz , jehož splnění podmiňuje přechod.
  • Akce – vykoná se při zahájení přechodu.

Událost[editovat | editovat zdroj]

Specifikace UML definuje událost jako „specifikaci něčeho významného, co se stane v určitém čase a prostoru a co nemá trvání.

  • Události volání – Událost volání je požadavkem na vyvolání konkrétní operace instance kontextové třídy. Měla by tedy mít stejnou syntaxi jako ona operace. Příjem události volání pak spouští požadovanou operaci. U události volání lze také určit posloupnost akcí. Jednotlivé akce se oddělují středníkem.

Signál je balíček informací, které jsou mezi objekty předávány asynchronně. Notace pro zobrazení signálu je stejná jako u diagramů aktivit.

  • Událost změny – K události změny dochází po splnění booleovské podmínky (při přechodu z false na true)
  • Časová událost – K časové události dochází po uplynutí určité doby nebo po splnění určité časové podmínky. Například jednou za dva týdny, každé úterý, po uplynutí jednoho měsíce ad.

Složené stavy[editovat | editovat zdroj]

Ortogonální složený stav – Na ukázkovém diagramu je vidět část stavového automatu s ortogonálním složeným stavem. Konkurenčně se zde zpracovává vyskladnění objednávky a fakturace a příjem platby. Stav zpracování bude ukončen poté, co automaty v obou regionech dosáhnou koncového stavu

Složené stavy [3] mohou obsahovat jeden nebo více vnořených stavových automatů Vnořené stavy jsou uspořádány do jednoho nebo více regionů. Vnořené stavy dědí všechny přechody svých mateřský stavů (nadstavů). Pokud tedy složený stav obsahuje přechod, znamená to, že všechny vnořené stavy tento přechod obsahují také. Další výhodou stavových podautomatů je jejich znovupoužitelnost. Pokud by se nám to někde hodilo, mohli bychom stav Zpracování použít i v jiném stavovém automatu.

Složené stavy dělíme na dva druhy:

  1. Jednoduché složené stavy obsahují pouze jeden region. Označují se taktéž jako sekvenční složené stavy.
  2. Ortogonální složené stavy obsahují alespoň dva stavové automaty, které jsou spuštěny souběžně. Označují se také jako souběžné složené stavy. Po vstupu do stavu dojde k rozvětvení a k souběžnému spuštění stavových automatů. Pokud mají všechny stavové automaty koncový stav, nelze hlavní stav (nadstav) ukončit, dokud nebudou ukončeny všechny vnořené stavové automaty. Hlavní stav lze ukončit lze opustit bez nutnosti spojení, pokud stavové automaty obsahují přechody do externích stavů

Opustit ortogonální složený stav lze tedy dvěma způsoby:

  • Všechny podautomaty skončí své úlohy (implicitní spojení)
  • Jeden z podautomatů přejde do stavu mimo kontext nadstavu, obvykle skrze výstupní pseudostav (kolečko s křížkem). Běh zbývajících podautomatů bude jednoduše přerušen.

Pseudostavy[editovat | editovat zdroj]

Pseudostavy

Jak název napovídá, pseudostavy nejsou stavy. Jedná se o elementy, ve kterých stavový element nezůstává, pouze jimi prochází.

Počáteční (initial)[editovat | editovat zdroj]

Z počátečního pseudostavu [4] vystupuje právě jeden přechod do tzv. defaultního stavu. Přechod z počátečního stavu nemá definovanou událost (výjimkou je událost se stereotypem <<create>>). Pro přechod z počátečního stavu je možné definovat chování. V jednom regionu může být maximálně jeden počáteční stav.

Spojení a rozvětvení (Join a fork)[editovat | editovat zdroj]

Pseudostavy spojení a rozvětvení [5] propojují přechody stavů z ortogonálních regionů. Přechody vycházející z uzlu rozvětvení směřují ke stavům v různých regionech. Pro tyto přechody nejsou definovány události a podmínky. Z uzlu rozvětvení vycházejí minimálně dva přechody. Do pseudostavu spojení vstupují přechody ze stavů z různých regionů a pro tyto přechody nejsou definovány spouštěcí události a podmínky. Do spojovacího uzlu vcházejí minimálně dva přechody

Pseudostav rozhodování (Choice)[editovat | editovat zdroj]

Rozhodování[4] reprezentuje větvení přechodů. Po vstupu do pseudostavu dochází k vyhodnocení podmínek definovaných na výstupních přechodech. Realizován bude ten přechod, jehož podmínka bude splněna. Je proto třeba dát pozor při návrhu stavových automatů s rozhodováním, aby vždy byla právě jedna podmínka splněna. Výstupní přechody nemají definované spouštěcí události.

Přechodový pseudostav (Junction)[editovat | editovat zdroj]

Přechodový pseudostav[4] je vhodný pro konstrukci složených přechodů mezi stavy. Může být využit pro spojení několika přechodů vycházejících z různých stavů do jednoho společného výstupního přechodu nebo pro rozvětvení jednoho přechodu do několika na základě vyhodnocení podmínek na výstupech. V případě větvení pomocí přechodového pseudostavu hovoříme o statickém podmíněném větvení. Vystupující přechody nemají definované spouštěcí události.

Vstupní a výstupní body (Entry a Exit point)[editovat | editovat zdroj]

Pseudostavy vstupní a výstupní bod[4] reprezentují vstupy a výstupy, kterými jsou uskutečněny přechody do nebo ze složených stavů.

Hluboká historie[editovat | editovat zdroj]

Pseudostav hluboké historie[4] reprezentuje poslední konfiguraci aktivních stavů kompozitního stavu po jeho opuštění (tedy včetně vnořených složených stavů ad.). Z pseudostavu hluboké historie může existovat jen jeden přechod do některého se stavů obsažených ve složeném stavu, kde se hluboká historie nachází. Definuje se tím stav, do kterého se systém dostane v případě, že v hluboké historii není uložena žádná konfigurace stavů (složený stav ještě nebyl aktivní, nebo skončil v koncovém stavu), jedná se tedy o výchozí přechod.

Mělká historie[editovat | editovat zdroj]

Pseudostav mělké historie[4] reprezentuje poslední substav složeného stavu, který byl aktivní. Přechod vstupující do elementu mělké historie představuje přechod do posledního aktivního substavu složeného stavu. Složený stav může obsahovat jen jeden element mělké historie. Přechod vystupující z mělké historie reprezentuje přechod do výchozího stavu, pokud složený stav ještě nebyl aktivován a v mělké historii tedy není ještě nic uloženo. Mělká historie je více povrchní než hluboká historie, nepamatuje si plnou konfiguraci stavů, ale jen poslední aktivní stav v rámci substavu.

Ukončení (Terminate)[editovat | editovat zdroj]

Po dosažení pseudostavu ukončení[4] se zastaví veškeré činnosti. Jediná, která se vykoná, je definována u přechodu do pseudostavu ukončení.

Koncový pseudostav (Final)[editovat | editovat zdroj]

Koncový pseudostav[6] představuje ukončení chování v rámci regionu. Pokud stavový automat nebo složený stav obsahují více regionů, ukončí se chování celého stavového automatu nebo složeného stavu po dosažení koncového pseudostavu v každém regionu. Pro přechod do koncového pseudostavu není explicitně definovaná událost, přechod je vyvolán vznikem tzv. completion event (automatický přechod po dokončení všech akcí a aktivit v posledním stavu před koncovým). Z koncového pseudostavu nevystupuje žádný přechod a nemá definované žádné vnitřní činnosti.

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  1. UML 2.0 Superstructure FTF [online]. . S. 573 - 639.  
  2. UML 2.0 Superstructure FTF [online]. . S. 623.  
  3. UML 2.0 Superstructure FTF [online]. . S. 599, 636.  
  4. a b c d e f g UML 2.0 Superstructure FTF [online]. . S. 590.  
  5. UML 2.0 Superstructure FTF [online]. . S. 594.  
  6. UML 2.0 Superstructure FTF [online]. . S. 580.  

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]