Archyno
UMLDiagramy chování

Příklady stavových diagramů

Tři stavové automaty, které můžete použít hned - životní cyklus objednávky, redakční workflow s návratem zpět a fragment ukazující, proč čekající stav není zaseknutý stav.

8 min čteníUML 2.5.116 z 35

Krátká odpověď

  • Životní cyklus objednávky je příklad, který stojí za převzetí: šest stavů, jeden spouštěč na přechod a dva různé konce místo jednoho.
  • Více koncových stavů je normální. Zrušená i doručená jsou ukončené, a svést je do téhož kroužku ten rozdíl skryje.
  • Timeout je přechod, jehož spouštěčem je časová událost - after(72 hodin). Stráž není potřeba, spouštěčem je samotný plynoucí čas.
  • Stav bez povoleného přechodu je nečinný, ne rozbitý. To je opak diagramu aktivit, kde token bez východu znamená zaseknutí.
UML diagram stavového automatu pro objednávku. Z počátečního pseudostavu je objednávka ve stavu Košík; checkout ji přesune do Zadaná. Ze Zadané ji pay při dostatku prostředků přesune do Zaplacená a cancel ji přesune dolů do Zrušená, která dosáhne koncového stavu. Ze Zaplacené ji dispatch přesune dolů do Odeslaná, deliver do Doručená a Doručená dosáhne druhého koncového stavu.
Životní cyklus objednávky. Šest stavů, jeden spouštěč na přechod a dva konce, které nejsou týmž koncem.

01Příklad 1: životní cyklus objednávky#

Pokud má tabulka ve vaší databázi sloupec status, tenhle diagram už v kódu implicitně existuje - je jen rozepsaný přes tucet strážních podmínek místo toho, aby byl jednou nakreslený. Udělat ho výslovným je nejlevnější cvičení na hledání vad, jaké stavový automat nabízí.

Čtěte přechody, ne boxy. Každý je označený spouštěčem, který ho způsobuje - checkout, pay, dispatch, deliver - a jeden nese za lomítkem účinek: dispatch / print label. Ty popisky jsou obsahem. Diagram šesti zaoblených boxů s neoznačenými šipkami říká jen to, že se věci mění, což už každý věděl.

Ty dva koncové stavy jsou záměrné. Zrušená i Doručená jsou terminální a nejsou týmž výsledkem, a nakreslit pro oba jeden kotouč s prstencem by řeklo, že objednávka skončila, aniž by řeklo jak. Nic v UML vás neomezuje na jeden.

02Příklad 2: pracovní postup, který se vrací zpět#

Skutečné pracovní postupy zřídka běží jedním směrem. Něco se zamítne, vrátí se a přijde znovu - a právě v tom zpětném přechodu bývá to zajímavé pravidlo.

UML diagram stavového automatu redakčního postupu. Z počátečního pseudostavu nad ním je článek ve stavu Koncept. Submit ho přesune do V recenzi. Approve ho přesune vpravo do Schválený a pak dolů do Publikovaný, který dosáhne koncového stavu. Reject přesune V recenzi dolů do Zamítnutý a revise vezme Zamítnutý zpět vlevo do Koncept.

Přechod revise ze stavu Zamítnutý do Konceptje to, co z tohohle dělá stavový automat, a ne kontrolní seznam. Říká, že zamítnutý článek není hotový - vstupuje zpět do téhož cyklu, a jakékoli počítadlo typu „dvakrát zamítnuto znamená eskalovat“ visí na té šipce, ne na stavu.

Všimněte si, že Zamítnutý má východ a Publikovaný ne. Stav bez odchozího přechodu a bez koncového stavu za ním je tvrzení, že objekt tam zůstane navždy, což je občas pravda a častěji opomenutí. Zkontrolovat takhle každý listový stav je dvouminutový posudek, který najde skutečné mezery.

Názvy spouštěčů jsou události ve slovníku domény - submit, approve, reject, revise - ne názvy metod. To drží diagram čitelný pro redaktory, kteří ten proces vlastní, a to je publikum, které vám umí říct, že se mýlí.

03Příklad 3: dva východy, které nejsou rozhodnutím#

Nejčastějším zmatkem, když někdo přechází od diagramů aktivit ke stavovým automatům, je, co znamenají dvě šipky z jednoho boxu.

Fragment UML stavového automatu. Stav Čeká se na platbu má dva odchozí přechody: pay lomítko capture vede do Zaplacená a timeout 72 hodin vede do Vypršelá. Poznámka vysvětluje, že jsou to dva spouštěče, ne dvě stráže, takže nic nemusí být vyčerpávající - stav prostě čeká.

Tohle jsou dva spouštěče, ne dvě větve rozhodnutí. Objednávka sedí ve stavu Čeká se na platbu neomezeně dlouho; kam půjde, rozhodne ta událost, která přijde první - pay, nebo časová událost timeout(72h). Nic nemusí být vyčerpávající a není tu žádné [else], protože čekání je legitimní výsledek.

To je opak diagramu aktivit, kde je token, který dorazí k rozhodnutí bez povolené stráže, zastaveným procesem. Stejně vypadající geometrie, opačná sémantika - a proto se vyplatí volbu mezi těmi dvěma notacemi dělat záměrně, ne ze zvyku.

04Kdy takový vůbec kreslit#

Stavový automat se levně kreslí a draze udržuje, takže otázku, jestli ten objekt vůbec má životní cyklus, se vyplatí položit dřív než první box.

Sáhněte po něm, když

  • Objekt má stavové pole s víc než dvěma hodnotami a pravidla o legálních změnách.
  • Některé přechody jsou zakázané a na tom zákazu záleží - vrácení peněz, zrušení, schválení.
  • Téhož objektu se dotýká několik služeb a neshodnou se, co může dělat dál.
  • Vypršení nebo expirace mění objekt, aniž by na něm někdo jednal.

Sáhněte po něčem jiném, když

  • Proces procházející několika objekty a rolemi - to je diagram aktivit.
  • Třída, jejíž stav se odvozuje z jiných polí, místo aby byl uložený.
  • Vlastní konfigurace workflow enginu, která už je zapsaným stavovým automatem.
  • Jeden diagram pokrývající dva objekty. Kreslete jeden automat na životní cyklus.

Pokud proces překlenuje několik účastníků místo života jednoho objektu, chcete diagram aktivit, nebo pro byznysové publikum BPMN. Test je jednoduchý: pokud neumíte pojmenovat tu jedinou věc, jejíž stavy to jsou, není to stavový automat.

05Co si zapamatovat#

Po jednom řádku na každé

  1. 01Obsahem jsou popisky přechodů. Neoznačené šipky mezi stavy neříkají nic.
  2. 02Víc koncových stavů je normální - zrušená a doručená jsou obě terminální a nejsou totéž.
  3. 03Chybějící šipky jsou místem, kde jsou chyby. Zkontrolujte každou dvojici, kterou jste nenakreslili.
  4. 04Dvě šipky ze stavu jsou dva spouštěče, ne dvě větve. Nic nepotřebuje [else].
  5. 05Jeden stavový automat na objekt se skutečným životním cyklem. Proces překlenující role je diagram aktivit.

06Časté dotazy#

Jaký je dobrý příklad stavového diagramu?

Životní cyklus objednávky: košík, zadaná, zaplacená, odeslaná, doručená, s větví zrušená ze stavu zadaná. Má šest stavů, jeden spouštěč na přechod a dva různé konce, čímž pokrývá vše, co se od notace běžně žádá.

Může mít stavový diagram více než jeden koncový stav?

Ano a obvykle by měl. Zrušená a doručená objednávka jsou obě ukončené, ale nejde o tentýž výsledek, a svedení obou do jednoho kroužku ten rozdíl skryje. UML počet koncových stavů neomezuje.

Jak se ve stavovém diagramu modeluje timeout?

Jako přechod, jehož spouštěčem je časová událost, zapsaná například timeout(72h) nebo after(72 hodin). Vychází ze stavu, v němž objekt čeká, a míří na to, co vypršení vytvoří. Stráž není potřeba - spouštěčem je samotný plynoucí čas.

Co se stane, když není povolen žádný přechod ze stavu?

Nic, a je to správně. Stavový automat čeká ve svém stavu, dokud nepřijde spouštěč, takže stav bez povoleného přechodu je nečinný, nikoli rozbitý. Je to opak diagramu aktivit, kde token bez východu znamená zaseknutý proces.

Má být jeden stavový automat na třídu?

Nejvýše jeden a jen pro třídy se skutečným životním cyklem. Má-li třída sloupec se stavem s více než dvěma hodnotami a pravidla, která změna je přípustná, nakreslete jej. Je-li stav odvozený nebo se nastaví jen jednou, automat nic nepřidá.

V této sérii

Související články

Všechny články