Co to jest maszyna stanów? – Statecharts
Co to jest maszyna stanów?
Wikipedia definiuje maszynę stanów skończonych (FSM) jako:
abstrakcyjną maszynę, która może być w dokładnie jednym ze skończonej liczby stanów w danym czasie. FSM może zmieniać się z jednego stanu do drugiego w odpowiedzi na pewne zewnętrzne wejścia; zmiana z jednego stanu do drugiego jest nazywana przejściem. FSM jest definiowany przez listę jego stanów, stan początkowy i warunki dla każdego przejścia.
I dalej:
Stan jest opisem stanu systemu, który oczekuje na wykonanie przejścia.
Maszyna stanów jest również wizualnym przedstawieniem takiej abstrakcyjnej maszyny.
Przykład
Oto wizualne przedstawienie prostej maszyny stanów. Jest to model prostego przełącznika on/off.
Prostego przełącznika on/off z dwoma stanami.
Kilka obserwacji na temat tej maszyny.
- Składa się ona z dwóch stanów, „on” i „off”. Maszyna ta może zatem znajdować się w dokładnie jednym z tych dwóch stanów w dowolnym momencie. Innymi słowy, przejścia między stanami są natychmiastowe.
- Zdarzenie „flick” powoduje przejście między stanami.
- Kiedy maszyna wchodzi w stan „on”, pojawia się efekt uboczny. Światło zostaje włączone.
- Kiedy maszyna wychodzi ze stanu „włączony”, pojawia się kolejny efekt uboczny. Światło zostaje wyłączone.
Ta prosta maszyna stanów jest porównywalna do zmiennej boolean – która może być albo prawdziwa albo fałszywa – która kontroluje stan włączenia czegoś.
Czym w ogóle jest stan?
Stan programu to zbiór wszystkich zmiennych w programie i ich wartości w dowolnym punkcie w czasie (zobacz Wikipedię). Program lub komponent oprogramowania, który ma pięć niezależnych zmiennych, z których każda może być prawdziwa lub fałszywa, teoretycznie może być w dowolnym z 32 stanów (2 do potęgi 5 = 32). Jednak program często będzie miał niepoprawne stany, a w tradycyjnym oprogramowaniu zmienne są starannie sprawdzane i manipulowane w taki sposób, aby te niepoprawne stany się nie zdarzały.
Maszyna stanów jest alternatywnym sposobem modelowania stanu programu: Zamiast definiowania niezależnych zmiennych, maszyna jest tworzona specjalnie po to, by obsługiwać możliwe stany, a gdy maszyna jest w danym stanie, jaki następny stan jest dozwolony. Te pięć niezależnych zmiennych boolean jest zastąpione pojedynczą maszyną stanów, która z natury może być tylko w poprawnych stanach.
Związek z diagramami stanów
Zrozumienie maszyn stanów jest prawie takie samo jak zrozumienie diagramów stanów. Pod wieloma względami, diagramy stanów są „większym bratem” maszyn stanowych, zaprojektowanym w celu przezwyciężenia niektórych ograniczeń maszyn stanowych. Schemat stanów jest zasadniczo maszyną stanów, która pozwala każdemu stanowi zawierać więcej maszyn, w sposób hierarchiczny. Ma to na celu przezwyciężenie niektórych ograniczeń maszyn stanowych.
Podstawowym celem statecharts.github.io jest pomoc w zrozumieniu statechartów. Zrozumienie maszyn stanów jest miłym efektem ubocznym. Czym jest diagram stanów?
Maszyna abstrakcyjna vs run-time
Należy dokonać ważnego rozróżnienia pomiędzy samą maszyną abstrakcyjną (np. rysunek maszyny stanów, lub kod) a bardziej konkretnym wykonaniem run-time danej maszyny abstrakcyjnej. To rozróżnienie jest podobne do różnicy między klasą (definicją abstrakcyjną) a obiektem (konkretną instancją). Podobnie, dla pojedynczej maszyny abstrakcyjnej może istnieć wiele wykonań, tak jak często istnieje wiele instancji danej klasy.
Pojęcia „diagram stanów”, „maszyna stanowa” i „FSM” są często używane zarówno w odniesieniu do formy abstrakcyjnej, jak i uruchomieniowej, chociaż forma uruchomieniowa ma czasami kwalifikator „run” lub „execution”, jak w „state machine execution” lub „statetchart run”.
Abstrakcyjna maszyna stanów jest komponentem oprogramowania, który definiuje skończony zbiór stanów:
- Jeden stan jest definiowany jako stan początkowy. Gdy maszyna rozpoczyna wykonywanie, automatycznie wchodzi w ten stan.
- Każdy stan może definiować akcje, które występują, gdy maszyna wchodzi lub wychodzi z tego stanu. Akcje zazwyczaj mają efekty uboczne.
- Każdy stan może definiować zdarzenia, które wywołują przejście.
- Przejście definiuje reakcję maszyny na zdarzenie, polegającą na wyjściu z jednego stanu i wejściu do innego.
- Przejście może definiować akcje, które występują, gdy następuje przejście. Akcje zazwyczaj będą miały efekty uboczne.
Gdy „uruchamiamy” maszynę stanów, ta abstrakcyjna maszyna stanów jest wykonywana. Pierwszą rzeczą, która się dzieje jest to, że maszyna stanowa wchodzi w „stan początkowy”. Następnie, zdarzenia są przekazywane do maszyny, gdy tylko się wydarzą. Gdy zdarzenie ma miejsce:
- Zdarzenie jest sprawdzane względem przejść w bieżącym stanie.
- Jeśli jakieś przejście pasuje do zdarzenia, to przejście to „zachodzi”.
- Na mocy przejścia „dzieje się”, stany są opuszczane i wprowadzane, a odpowiednie akcje są wykonywane
- Maszyna natychmiast znajduje się w nowym stanie, gotowa do przetworzenia następnego zdarzenia.
Dalsza lektura
- Co to jest diagram stanów? – Rozwiń wiedzę o maszynach stanów, aby
- Przykładowa maszyna stanów – Wyjaśnij niektóre koncepcje diagramu stanów, opierając się na prostej maszynie stanów „on off”.