UMLUML Stavový diagramStavový diagram ÚvodÚvod • Stavový diagram patří mezi klasické a osvědčené nástrojeStavový diagram patří mezi klasické a osvědčené nástroje objektového modelování. V UML je tento prostředek přítomen vobjektového modelování. V UML je tento prostředek přítomen v lehce modifikované podobě Harelových diagramů. Diagram stavů alehce modifikované podobě Harelových diagramů. Diagram stavů a přechodů, jak je někdy tento prostředek nazýván, slouží propřechodů, jak je někdy tento prostředek nazýván, slouží pro modelování životního cyklu části systému svým rozsahemmodelování životního cyklu části systému svým rozsahem odpovídající jednomu objektu.odpovídající jednomu objektu. • Tento diagram slouží k zachycení skutečnosti, že objekty procházejíTento diagram slouží k zachycení skutečnosti, že objekty procházejí různými stavy. Umožňuje zaznamenat historii objektu, přechodyrůznými stavy. Umožňuje zaznamenat historii objektu, přechody mezi jednotlivými stavy a podmínky těchto přechodů. Podmínky jsoumezi jednotlivými stavy a podmínky těchto přechodů. Podmínky jsou vlastně události, díky nimž přejde objekt z jednoho stavu dovlastně události, díky nimž přejde objekt z jednoho stavu do druhého. Tento diagram se nepoužívá vždy, ale pouze vyplývá-li to zdruhého. Tento diagram se nepoužívá vždy, ale pouze vyplývá-li to z modelované reality.modelované reality. Co popisuje?Co popisuje? • Reprezentuje chování objektů, které vykazují nějakéReprezentuje chování objektů, které vykazují nějaké dynamické chování. Ve skutečnosti se používá kdynamické chování. Ve skutečnosti se používá k modelování chování objektů, ale může sloužit i kmodelování chování objektů, ale může sloužit i k modelování chování typu jednání, aktorů, subsystémů,modelování chování typu jednání, aktorů, subsystémů, operací nebo metod.operací nebo metod. • Stavový diagramStavový diagram popisujepopisuje stavystavy, v nichž se může objekt, v nichž se může objekt nacházet, a jak se stav objektunacházet, a jak se stav objektu změnízmění jako následekjako následek událostiudálosti, která na objekt působí. Kreslí se pro jednu třídu, která na objekt působí. Kreslí se pro jednu třídu a ukazuje chování objektu třídya ukazuje chování objektu třídy vv průběhu jehoprůběhu jeho životního cyklu.životního cyklu. PříkladPříklad Komponenty diagramuKomponenty diagramu -- StavStav • StavStav -- je stav v životě objektů nebo interakce, ve které se nacházíje stav v životě objektů nebo interakce, ve které se nachází nějaký stav (např. akce, čekání na událost). Značí se čtvercem senějaký stav (např. akce, čekání na událost). Značí se čtvercem se zaoblenými rohy, označeným názvem stavu a pod názvemzaoblenými rohy, označeným názvem stavu a pod názvem odděleným čarou lze uvést další vnitřní stavy, kterým může stavodděleným čarou lze uvést další vnitřní stavy, kterým může stav nabývat, je-li právě aktivní.nabývat, je-li právě aktivní. -- příklad:příklad: Student: přihlášený, přijatý, zapsaný, student 1.stupně, ...Student: přihlášený, přijatý, zapsaný, student 1.stupně, ... -- stavu může být přiřazenastavu může být přiřazena aktivitaaktivita aa vstupní, výstupní a interní akcevstupní, výstupní a interní akce (do/…, entry/…, exit/…, událost/…)(do/…, entry/…, exit/…, událost/…) - počáteční a koncový stav (pseudostavy)- počáteční a koncový stav (pseudostavy) AktivitaAktivita – proces, který trvá „nějakou dobu“.– proces, který trvá „nějakou dobu“. AkceAkce – proces, který proběhne „rychle“ a je nepřerušitelný.– proces, který proběhne „rychle“ a je nepřerušitelný. Komponenty diagramuKomponenty diagramu -- UdálostUdálost • UdálostUdálost - něco, co se stane v určitém časovém okamžiku, nemá- něco, co se stane v určitém časovém okamžiku, nemá trvání.trvání. - syntaxe:- syntaxe: jméno_události (seznam parametrů)jméno_události (seznam parametrů) -- příklad:příklad: vysokáTeplota (požadovaná teplota)vysokáTeplota (požadovaná teplota) - událost po uplynutí času:- událost po uplynutí času: afterafter (např. after (30 minut))(např. after (30 minut)) - událost po splnění podmínky:- událost po splnění podmínky: when (when (např. when (tlak >50) kP))např. when (tlak >50) kP)) - událost ve stavu:- událost ve stavu: entryentry,, exit.exit. Komponenty diagramuKomponenty diagramu -- Přechod stavuPřechod stavu • Přechod stavuPřechod stavu -- vztah mezi dvěma stavy, který značí, že objekt vvztah mezi dvěma stavy, který značí, že objekt v prvním stavu vstoupil do druhého stavu. Změna stavu nastane,prvním stavu vstoupil do druhého stavu. Změna stavu nastane, jestliže byla splněna požadovaná podmínka. Přechod stavu se značíjestliže byla splněna požadovaná podmínka. Přechod stavu se značí šipkou z jednoho stavu do druhého a popisem přechodu stavu. šipkou z jednoho stavu do druhého a popisem přechodu stavu.  Přechod mezi jednotlivými stavy bývá vyvolán podmětem z vnějšíhoPřechod mezi jednotlivými stavy bývá vyvolán podmětem z vnějšího okolí, nejčastěji ve formě zprávy zaslané příslušnému objektu nebookolí, nejčastěji ve formě zprávy zaslané příslušnému objektu nebo jinou externí událostí. Validní stav objektu je zjednodušeně řečenojinou externí událostí. Validní stav objektu je zjednodušeně řečeno definován přípustnými hodnotami jeho atributů, přechod mezi stavydefinován přípustnými hodnotami jeho atributů, přechod mezi stavy je pak vlastně vyjádření změny atributů.je pak vlastně vyjádření změny atributů. Komponenty diagramuKomponenty diagramu -- Přechod stavuPřechod stavu Syntaxe ohodnocení přechodu:Syntaxe ohodnocení přechodu: Událost [Podmínka]/ AkceUdálost [Podmínka]/ Akce PodmínkaPodmínka (guard) – booleovský výraz platný podmiňující přechod.(guard) – booleovský výraz platný podmiňující přechod. - pravidla pro aktivaci přechodu- pravidla pro aktivaci přechodu - jen jeden přechod ze stavu může být aktivován, není-li- jen jeden přechod ze stavu může být aktivován, není-li událost musí být podmínky výstupních přechodů vzájemněudálost musí být podmínky výstupních přechodů vzájemně výlučnévýlučné Komponenty diagramuKomponenty diagramu -- Přechod stavuPřechod stavu • Příklad: (část 1)Příklad: (část 1) Komponenty diagramuKomponenty diagramu -- Přechod stavuPřechod stavu • Příklad: (část 2)Příklad: (část 2) Souběžné stavové diagramySouběžné stavové diagramy • složený stav může obsahovat několik souběžných stavových diagramůsložený stav může obsahovat několik souběžných stavových diagramů • stav je dán kombinací stavů souběžných diagramůstav je dán kombinací stavů souběžných diagramů Souběžné stavové diagramySouběžné stavové diagramy Konstrukce diagramuKonstrukce diagramu • Pro vytvoření samostatného stavového diagramu začneme zjištěním všechPro vytvoření samostatného stavového diagramu začneme zjištěním všech možných stavů, jež může systém dosáhnout. Tyto stavy zakreslíme pomocímožných stavů, jež může systém dosáhnout. Tyto stavy zakreslíme pomocí uzlů v diagramu. Pak mezi těmito stavy vyhledáme všechna spojení meziuzlů v diagramu. Pak mezi těmito stavy vyhledáme všechna spojení mezi uzly, která reprezentují změny stavů. Nebo druhou možností vytvořeníuzly, která reprezentují změny stavů. Nebo druhou možností vytvoření stavového diagramu je začít od počátečního stavu a hledat cesty do dalšíchstavového diagramu je začít od počátečního stavu a hledat cesty do dalších stavů (uzlů) až dojdeme ke koncovému(-ým) stavu(ům).stavů (uzlů) až dojdeme ke koncovému(-ým) stavu(ům). • Na závěr tvorby diagramu stavového stroje je vhodné ověřit, zda je diagramNa závěr tvorby diagramu stavového stroje je vhodné ověřit, zda je diagram konzistentní:konzistentní: -- překontrolujeme, jestli jsme nadefinovali všechny stavy, a to nejenpřekontrolujeme, jestli jsme nadefinovali všechny stavy, a to nejen za normálních podmínek, ale  i přiza normálních podmínek, ale  i při specifických podmínkách. Kontroluspecifických podmínkách. Kontrolu provedeme simulací na diagramu stavového stroje průchodem všemiprovedeme simulací na diagramu stavového stroje průchodem všemi větvemi a porovnáváme ji s reálnou situací.větvemi a porovnáváme ji s reálnou situací. -- podíváme se také, zda systém může dosáhnout všech stavů,podíváme se také, zda systém může dosáhnout všech stavů, nechybí-li v diagramu stavovéhonechybí-li v diagramu stavového stroje  nějaká šipka (změna stavu).stroje  nějaká šipka (změna stavu). -- a ověříme, zda systém reaguje ve všech stavech na všechnya ověříme, zda systém reaguje ve všech stavech na všechny podmínky.podmínky. Konstrukce diagramuKonstrukce diagramu -- příkladpříklad ZávěrZávěr • Jak je asi každému jasné, životní cyklus objektu nějak začíná aJak je asi každému jasné, životní cyklus objektu nějak začíná a pravidla i nějak končí (v případě, že se nejedná o objektpravidla i nějak končí (v případě, že se nejedná o objekt perzistentní, který je například uchováván v objektové databázi).perzistentní, který je například uchováván v objektové databázi). Ovšem nemusí být již zcela samozřejmé, že tzv. start stav by mělOvšem nemusí být již zcela samozřejmé, že tzv. start stav by měl být v diagramu vždy pouze jeden, zatímco stop stavů, tj. stavůbýt v diagramu vždy pouze jeden, zatímco stop stavů, tj. stavů ukončujících životní cyklus sledovaného objektu může být více,ukončujících životní cyklus sledovaného objektu může být více, pochopitelně většinou alespoň jeden. Z implementačního hlediska jepochopitelně většinou alespoň jeden. Z implementačního hlediska je start stav ekvivalentní alokaci paměti, resp. zavolání konstruktorustart stav ekvivalentní alokaci paměti, resp. zavolání konstruktoru třídy, naopak stop stav je realizován vykonáním destruktoru, vtřídy, naopak stop stav je realizován vykonáním destruktoru, v lepším případě prostředky automatické správy paměti.lepším případě prostředky automatické správy paměti. • Obdobně jako mnohé jiné notace umožňuje UML definovat v těleObdobně jako mnohé jiné notace umožňuje UML definovat v těle stavu jednoduchou exekutivu vykonávanou v rámci uvažovanéhostavu jednoduchou exekutivu vykonávanou v rámci uvažovaného stavu. V neposlední řadě je možné zachytit důležitá pravidla hlídajícístavu. V neposlední řadě je možné zachytit důležitá pravidla hlídající konzistenci a validitu celého modelu.konzistenci a validitu celého modelu.