State machine diagram - diagram stavového stroje

Základy

Diagram obsahuje stavový stroj (state machine). Stavový stroj vyjadřuje stavy určitého objektu a přechody mezi těmito stavy.

Příklad diagramu stavového stroje

jednoduchý diagram stavového stroje, 10 kB

Na obrázku je příklad jednoduchého diagramu stavového stroje :

  • stav (state) : situace, kdy modelovaný objekt splňuje nějakou podmínku, provádí nějakou operaci nebo čeká na událost - např. ve stavu narozený splňuje objekt podmínku, že mu není dosud 18 roků a čeká, až dosáhne plnoletosti
  • přechod (transition)
  • spojení mezi dvěma stavy; objekt přejde z prvního stavu do druhého stavu (za splnění určitých podmínek)
  • rozloučení ukazuje přechod do téhož stavu (něco význačného se stane, ale stav se nezmění)
  • počáteční, finální stav : zvláštní pseudostavy pro počátek a konec automatu

Další podrobnosti

Stavový stroj je graf stavů a přechodů (mezi těmito stavy), který popisuje reakce objektu (přesněji : reakce instance klasifikátoru) na obdržení události. Stavový stroj může být připojený ke klasifikátoru (např. use case, class), nebo ke collaboration či k metodě.
Element, ke kterému je připojen stavový stroj, se nazývá vlastník (owner) stavového stroje.
Celý stavový stroj je vlastně složený stav (composite state), který je rekurzivně dekomponován na substavy. Nejspodnější (listové) stavy již nemají substavy.
Stavový stroj může mít reference na jiný stavový stroj použitím stavového substroje (submachine state). Ve stavovém stroji může být v jeden okamžik aktivních více stavů.

Co je to přechod

Pro vysvětlování podrobností o stavech musíme vědět, co je to přechod :
přechod (transition) je relace ve stavovém stroji mezi dvěma stavy, kde objekt v prvním stavu přejde do druhého stavu tehdy, když nastane specifikovaná událost (event) a jsou splněny specifikované podmínky (guards), přičemž se provede specifikovaný efekt (effect - action nebo activity). Přechod je nepřerušitelný.
Říká se, že přechod je odpálen (transition is fire). Přechod může mít jeden nebo více zdrojových stavů a jeden nebo více cílových stavů.

Notace přechodu :
name: event-name (paremeter-list)[guard condition] / effect-list,
kde všechny části jsou nepovinné a kde

  • name (jméno) je jméno přechodu; většinou je zbytečné ho používat
  • event-name (název události), která spustí přechod; může následovat (parameter-list) jako seznam dvojic jméno:typ
  • [guard condition] (hlídací podmínka) je boolovský výraz zapsaný pomocí parametrů události a atributů a linků objektu - vlastníka stavového stroje. Může se také odvolávat na stav souběžných stavů objektu (v daném stavovém stroji) či na stav dosažitelných obejktů, např. [in stav-A], [not in stav-B]. Podmínky jsou vyhodnocovány jen v okamžiku, kdy je zpracovávána událost - nejsou tedy vhodné k průběžnému monitorování nějakých hodnot.
  • effect-list (seznam efektů) je to, co se provede, když je odpálen přechod (s přechodem se provede akce, aktivita)
Příklad : startování při automobilových soutěžích :
změnaSemaforu(barva)[barva="zelená", závodník je na řadě]/rozjede : pokud semafor změní barvu na zelenou a závodník je na řadě, tak se rozjede

PS.: dále budu rovnocenně používat pojmy event (událost), event trigger (spouštěcí událost) a trigger (spouštěč)

Co je to stav

stav (state) : situace, kdy modelovaný objekt splňuje nějakou podmínku, provádí nějakou operaci nebo čeká na událost. - např. ve stavu narozený splňuje objekt podmínku, že mu není dosud 18 roků a čeká, až dosáhne plnoletosti. Stavy jsou obsaženy ve stavovém stroji, který popisuje jak se vyvíjí objekt v čase dle svých reakcí na události. Stavy mohou být jednoho z druhů :

  • jednoduchý stav (simple state)
    jednoduchý stav, 2 kB
  • kompozitní, složený stav (composite state)
    kompozitní stav, 10 kB
    Kompozitní stav má substavy. Zde je znázorněn kompozitní stav se dvěma regiony (orthogonal regions) (může jich být více). V příkladu jsou zobrazeny stavy muže ze dvou hledisek - z hlediska rodinného stavu a z hlediska jeho vztahu k vojsku. Jakmile objekt přejde do kompozitního stavu, tak právě jeden substav z každého regionu je aktivní. Každý stavový stroj má vlastně top-level kompozitní stav.
  • stav podstroje (submachine state)
    stav podstroje, 4 kB
    Tento diagram popisuje stejnou situaci jako první diagram této kapitoly. Jsou zde však použity dva podstroje - jak podstroj před ženitbou, tak podstroj po ženitbě jsou rozkresleny ve zvláštním diagramu (v prvním z nich jsou ony dva stavy narozený a plnoletý, ve druhém stavy ženatý, rozvedený a vdovec).

pseudostav (pseudostate) je uzel (vertex), který má formu stavu, ale má speciální chování. Pseudostav definuje detaily přechodu. Když je pseudostav aktivním, není ještě dokončena reakce na událost (která vyvolala změnu stavu). Máme tyto typy pseudostavů :

  • volba (choice) : rozděluje přechod na dva segmenty.
    choice, 6 kB
    Jen první segment může mít trigger, každý segment může mít condition (druhý segment ho mít musí) a effect. První segment je aktivovaný bez ohledu na další segmenty, a všechny jeho efekty jsou provedeny před tím, než jsou vyhodnoceny guards dalších segmentů. Guards dalších segmentů tedy zohledňují výsledky efektů prvního segmentu. Pokud je spuštěn první segment, a pak není splněna žádná podmínka z následujících segmentů, tak jde o špatně formovaný model (lze jednoduše ošetřit tím, že namodelujeme jednu větev s podmínkou [else]). Choice může být považováno za normální stav s tou výjimkou, že musí ihned následovat přechod do dalšího savu (jen se zohledněním odpovídajících guards).
  • (entry point)
  • (exit point)
  • rozvětvení (fork) : použije se v situaci, kdy jeden zdrojový stav je rozdělen na dva (či více) cílové stavy. Cílové stavy musí být v různých regionech kompozitního stavu.
    fork, 8 kB
    Zde máme náš předchozí příklad (kompozitního stavu) upraven s použitím rozvětvení.
  • historický pseudostav (history state) : indikuje, že kompozitní stav si pamatuje jeho předchozí substav, který byl aktivní v okamžiku opuštění kompozitního stavu.
    history, 7 kB
    Pokud z jakéhokoliv stavu A, B, C, D přejde objekt do stavu X, potom do stavu Y a následně se má provést opět vrácení do kompozitního stavu, tak pomocí stavu H* se objekt vrátí do stavu aktivního těsně před tím, než objekt přešel do stavu X. Pokud v okamžiku přechodu z Y do kompozitního stavu není ještě žádný historický stav zapamatován (tj. nebyl ještě aktivní žádný ze stavů A, B, C, D), tak je proveden přechod do stavu B (to je naznačeno přechodem ze stavu H* do stavu B).
  • počáteční stav (initial state) : označuje implicitní stav regionu, ve kterém je obsažen. Musí mít výstupní přechod bez triggeru.
    initial state, 7 kB
    V tomto příkladu je na začátku aktivní stav prvy. Dále :
    • Pokud ve stavu prvy nastane událost trig-A, odpálí se přechod do stavu X: provede se efekt eff-1, pak se provede efekt eff-3 a objekt přejde do stavu druhy a dále se pokračuje normálně
    • Pokud ve stavu prvy nastane událost trig-B, odpálí se přechod do stavu X odlišně: provede se efekt eff-2 a objekt přejde přímo do stavu treti a dále se pokračuje normálně. V této variantě se neprošlo přes iniciální stav.
  • spojení (join, and-join, unfork): použije se v situaci, kdy více zdrojových stavů přechází do jednoho společného cílového stavu. Zdrojové stavy musí být v různých regionech kompozitního stavu. Jednotlivé vstupní toky do joinu nesmí mít guardy. Join jako celek může mít guard. Pokud žádný vstupní tok do joinu nemá trigger, může mít trigger výstupní tok z joinu - ten musí být splněn před tím, než se odpálí přechod.
    Join zajišťuje nejen spojení, ale i synchronizaci : nebude proveden přechod do následujícího stavu (za joinem), dokud se neprovedou přechody ze všech předchozích stavů (směřujících do joinu).
    join, 8 kB
    Zde máme náš předchozí příklad (kompozitního stavu) upraven s použitím spojení.
  • spojka (junction): zajímavý element, autor možná popíše později
  • ukončení (terminate): přechod do stavu ukončení ukončí provádění stavového stroje. Obyčejně to znamená, že vlastník stavového stroje zanikl.

  • terminate, 2 kB
  • finální stav (final state). Má vlastnosti jako běžný stav s tou výjimkou, že nemá žádný výstupní přechod. Finální stav indikuje, že provádění regionu (ve kterém je finální stav obsažen) bylo dokončeno. Stav obsahující regiony je dokončen, jestliže jsou dokončeny všechny jeho regiony. Když je kompozitní stav dokončen, tak dokončovací přechod (opouštějící kompozitní stav) je odpálen, pokud je jeho guard splněn. Přechodů do finálního stavu může být více a mohou mít triggery, effecty a guardy.

  • final state, 2 kB

Kam dál

Náměty na další studium

  • redefinice stavového stroje, {extended}
  • group transition
  • submachine state : entry connection point, exit connection point, submachine boundary
  • state : entry activity, exit activity
  • state : internal do activity, internal transition
  • state : defferable event
  • pseudostate : entry point, exit point
  • pseudostate : junction, branches
  • shalow history, deep history
  • řetěz segmentů (chain of segments)
  • internal transition
  • protocol transition