Celem niniejszego rozdziału jest chęć zaprezentowania techniki, umożliwiającej specyfikację aspektów dynamicznych obiektów, których stan zależy od zdarzeń zachodzących w jego otoczeniu.
Diagram maszyny stanowej – definicja i zastosowanie
Diagram maszyny stanowej przedstawia maszynę stanową, która zawiera proste stany i przejścia pomiędzy nimi.
Diagram maszyny stanowej – notacja i semantyka
Stan
Stan (ang. state) modeluje niezmienną sytuację, w której znajduje się obiekt podczas całego swojego życia. Niezmienna sytuacja obiektu oznacza spełnienie jakiegoś warunku, wykonanie czynności lub oczekiwanie na jakieś zdarzenie.
Przejście
Rysunek 74. Przejście – notacja
Przejście (ang. transition) to związek pomiędzy dwoma stanami, wskazujący, że obiekt znajdujący się w pierwszym stanie wykona pewną akcję i przejdzie
do drugiego stanu ilekroć znajdzie określone zdarzenie i będą spełnione określone warunki. Przejście jest niepodzielne, tzn. nie można go przerwać, i trwa minimalny okres czasu.
Przejście posiada także dodatkowe parametry.
Rysunek 75. Przejście z parametrami dodatkowymi – przykład
Pierwszym dodatkowym parametrem jest zdarzenie uruchamiające
(ang. trigger). Zdarzenie uruchamiające jest typem zdarzenia, którego otrzymanie oznacza uruchomienie przejścia pod warunkiem spełnienia warunku dozoru. Warunek dozoru (ang. guard condition) jest wyrażeniem logicznym, które musi być spełnione, by przejście mogło być zrealizowane. Kolejnym parametrem, który może zostać przypisany przejściu, jest akcja (ang. effect). Akcja jest niepodzielną procedurą, która jest wykonywana podczas przejścia. Akcja może mieć bezpośredni wpływ na obiekt, który jest właścicielem maszyny stanowej.
Przykładowe przejście (rys. 76) pośredniczy w zmianie stanów obiektu Pojazd.
Rysunek 76. Przykładowe przejście z parametrami
Przejście ze stanu Oczekiwania na wydanie Klientowi do stanu Użytkowania przez Klienta może zajść po spełnieniu warunku, jakim jest poprawne sfinalizowanie procesu rezerwacji. Mimo spełnienia wspomnianego warunku, przejście może wywołać akcję powodującą zmianę statusu dla pojazdu, ale tylko w przypadku wystąpienia zdarzenia uruchamiającego polegającego na nadejściu daty, w której klient ma wypożyczyć pojazd.
Stan początkowy
Rysunek 77. Stan początkowy – notacja
Stan początkowy (ang. initial state) jest stanem, od którego zaczyna funkcjonować maszyna stanowa. Stan początkowy jest pseudostanem, gdyż nie posiada wszystkich atrybutów właściwych stanowi. Oznacza to, że jest to element nietrwały, przejściowy, który używany jest tylko do zapewnienia połączeń pomiędzy stanami (tutaj rozpoczęcia diagramu) bez wymogu akcji. Z racji tego,
że stan początkowy jest pseudostanem, który umożliwia jedynie zainicjowanie maszyny stanowej, przejście ze stanu początkowego do stanu pierwszego nie może zawierać zdarzenia uruchamiającego.
Stan końcowy
Rysunek 78. Stan końcowy – notacja
Stan końcowy (ang. final state) jest to stan, jaki jest przyjmowany w sytuacji zakończenia działania maszyny stanowej. Stan końcowy jest specjalnym stanem – nie ma z niego przejścia do następnego stanu.
Maszyna stanowa
Rysunek 79. Maszyna stanowa – notacja
Maszyna stanowa (ang. state machine) to zbiór stanów przyjmowanych przez obiekt w odpowiedzi na zdarzenia zachodzące w czasie jego życia, a także reakcje obiektu na te zdarzenia. Przykładowa maszyna stanowa dla obiektu Pojazd (rys. 80) zawiera dwa podstany: pojazd może być w stanie mycia (karoserii) i w stanie sprzątania (wnętrza). Stany te są zawarte w bardziej ogólnym stanie Pojazdu zwanym konserwacją pojazdu.
Rysunek 80. Dekompozycja maszyny stanowej
Punkt wejścia
Rysunek 81. Punkt wejścia – notacja
Punkt wejścia (ang. entry point) jest skapsułowanym mechanizmem, który pozwala na zdefiniowanie stanu pośredniczącego pomiędzy przejściami
z zewnątrz a wewnętrznymi stanami maszyny stanowej. Punkty wejścia
są stosowane zazwyczaj w przypadkach, gdy do maszyny stanowej przychodzi kilka przepływów. Drugim zastosowaniem jest sytuacja, gdy na diagramie maszyna stanowa jest przedstawiana jako „czarna skrzynka” i wskazywany jest tylko punkt wejścia do maszyny stanowej bez przedstawiania jej wewnętrznej struktury.
Punkt wyjścia
Rysunek 82. Punkt wyjścia – notacja
Punkt wyjścia (ang. exit point) jest skapsułowanym mechanizmem, który pozwala na zdefiniowanie stanu pośredniczącego pomiędzy przejściami wychodzącymi z wnętrza maszyny stanów a zewnętrznym środowiskiem maszyny stanów. Punkty wyjścia są zazwyczaj stosowane w przypadkach, gdy z maszyny stanowej wychodzi kilka przepływów. Drugim zastosowaniem jest sytuacja, gdy na diagramie maszyna stanowa jest przedstawiana jako „czarna skrzynka”
i wskazywany jest tylko punkt wyjścia z maszyny stanowej, bez przedstawiania jej wewnętrznej struktury.
Stan wznowienia
Rysunek 83. Stan wznowienia – notacja
Stan wznowienia (ang. history state) jest pseudostanem służącym do zapamiętania podstanu sekwencyjnego przed opuszczeniem maszyny stanowej. Na rysunku 84 pokazano maszynę stanową (fragment diagramu) dla obiektu Pojazd, która zawiera stan wznowienia. Przy pierwszym wejściu do stanu, w którym samochód jest konserwowany, stan wznowienia jest pusty, więc przejście następuje bezpośrednio do pierwszego podstanu, czyli mycia karoserii samochodu. W sytuacji, gdy pojazd będzie w stanie sprzątania wnętrza auta i wystąpi zdarzenie „przerwanie” (warunek – inny samochód musi być natychmiast konserwowany) w podstanie sprzątania, przerywana jest konserwacja i następuje opuszczenie maszyny stanowej oraz przejście do stanu garażowania pojazdu.
Rysunek 84. Przykładowe użycie stanu wznowienia
Po zakończeniu stanu garażowania, po akcji „konserwuj” następuje przejście do maszyny stanowej i wznowienie w podstanie, w którym przerwano działanie maszyny stanowej.
Należy pamiętać o fakcie, że gdy zagnieżdżona maszyna stanowa osiągnie swój wcześniej założony stan końcowy, to zawartość stanu wznowienia jest anulowana.
Węzeł wyboru
Rysunek 85. Węzeł wyboru – notacja
Węzeł wyboru (ang. choice node) to element, który umożliwia dokonanie wyboru spośród kilku możliwości.
Umieszczenie węzła wyboru na diagramie oznacza, że nie ma jednej ścieżki wykonywania poszczególnych czynności (istnieją ścieżki alternatywne). Węzeł wyboru może mieć jedno wejście dla przepływu sterującego i minimalnie dwa wyjścia przepływów. Na wyjściach z węzła wyboru znajdują się wykluczające się warunki dozoru. Istotne jest, by warunki dozoru uwzględniały wszystkie możliwości, tak by nie dopuścić do zatrzymania przepływu na węźle.
Język UML dopuszcza, by jedno wyjście z węzła było opisane warunkiem [else], który oznacza ścieżkę, jaka powinna być wybrana w przypadku niespełnienia warunku dozoru wszystkich pozostałych wyjść.
Węzeł rozwidlenia
Rysunek 86. Węzeł rozwidlenia – notacja
Węzeł rozwidlenia (ang. fork node) to element, pozwalający na funkcjonowanie współbieżnych stanów. W zależności od sytuacji może być użyty jako linia pionowa lub pozioma.
Węzeł rozwidlenia stosowany jest, gdy w czasie wykonywania sekwencyjnej ścieżki występuje podzielenie ścieżki na równoległe (minimum dwie) ścieżki, których przepływy są wykonywane w tym samym czasie. Należy zaznaczyć,
że węzeł rozwidlenia nie jest elementem synchronizującym, a jedynie wskazującym początek przepływów równoległych. Do zsynchronizowania ścieżek można, tak jak w podanym przykładzie, użyć węzła scalenia, którego notacja jest identyczna jak węzła rozwidlenia.
Rysunek 87. Węzeł rozwidlenia i scalenia na diagramie maszyny stanowej
Diagram maszyny stanowej – przykładowe zastosowanie
Diagram maszyny stanowej prezentuje stan, w którym może znajdować się obiekt. Rysunek 88 prezentuje diagram maszyny stanowej, która przedstawia stany obiektu Pojazd. Na diagramie tym pokazano, jakie stany przyjmowane są przez egzemplarz Pojazdu. Pierwszym z nich jest stan, w którym nowo zakupiony pojazd jest rejestrowany w systemie komputerowym. Następnie pojazd przechodzi w stan konserwacji (mycie, sprzątanie). W dalszej kolejności pojazd oczekuje na wynajęcie/ rezerwację. Gdy pojazd zostanie zarezerwowany (akcja klienta lub sprzedawcy wypożyczalni) auto przechodzi w stan rezerwacji. Zastosowanie punktu wejściowego i wyjściowego dla stanu „Wypożyczony” umożliwiło zakapsułkowanie jego wnętrza. Wewnętrzna struktura tej maszyny stanowej została przedstawiona na rysunku 88. Po zwrocie pojazdu jest oceniany stan auta. W zależności od decyzji pojazd jest kierowany do serwisu, konserwacji lub jest wycofywany z użytku (np. po dużej kolizji drogowej). Wycofanie auta powoduje zakończenie istnienia bytu Pojazd.
Rysunek 88. Przykład diagramu maszyny stanowej
Pozostałe diagramy UML: