Table of Contents
Diagramy stanów
O diagamach stanów
Diagram stanów to graf pokazujący
- stany
- przejścia pomiędzy stanami
Stan jest abstrakcyjnym opisem pewnego okresu w czasie życia pewnego obiektu: (rzeczywistego obiektu, obiektu klasy, obiektu danych, modułu oprogramowania, systemu).
Stan może być scharakteryzowany na 3 sposoby:
- jako zbiór wartości pewnych cech lub atrybutów
- młodość ≡ wiek ∈ [15,25]
- zadłużenie ≡ saldo < 0
- okres oczekiwania na zdarzenie:
- oczekiwanie na nadejście potwierdzenia
- okres wykonywania pewnej czynności:
- Jedzenie,
- czytanie,
- spanie,
- przesyłanie pliku
Przejścia pomiędzy stanami następują w wyniku zdarzeń:
- zmiany wartości zmiennych lub atrybutów
- pojawienia się zdarzeń (nadejście SMS, odczytanie nowej porcji danych)
- rozpoczęcia/zakończenia czynności
Bardzo często stany służą do przechowywania w skondensowanej formie historii zdarzeń.
Do przeczytania
- Obejrzyj przykłady na początku http://pszwed.kis.agh.edu.pl/kss/lab/DoorControl.htm
- Na póżniej Rozdział 6 - State Machine View
Do wykonania
Do rysowania diagramu stanów używamy Visio / UML. Oprogramowanie i baza danych→Diagram modelu UML
Należy wybrać najnowszą wersję Visio. Stara ma ograniczenia dotyczące przebiegu strzałek.
Po lewej stronie wybieramy przybornik: Diagram stanów UML
- Podczas zajęć będzie budowany diagram stanów dla modułu do wyodrębniania identyfikatorów.
- Poza zajęciami: należy zaproponować diagram stanów dla projektu,
Oba elementy mają być umieszczone w sprawozdaniu z zadnia 2.
Wyodrębnianie identyfikatorów
Wyobraź sobie, że piszesz prosty parser, którego zadaniem jest wyodrębnienie identyfikatorów z kodu źródłowego w języku C++ lub Java.
Parser powinien używać funkcji (procesu DFD) do wyodrębnienia znaków z pliku, przeprowadzać klasyfikację typu znaku i w zależności od stanu niektóre znaki ignorować, inne składować w magazynie danych. Po stwierdzeniu końca identyfikatora powinien przesyłać zawartość magazynu do terminatora i zerować magazyn. Parser powinien pomijać komentarze.
Dla przypomnienia:
- pierwszym znakiem identyfikatora jest litera lub znak podkreślenia, kolejnymi mogą być cyfry
- należy uwzględnić komentarze typu
// ... EndOfLine
oraz
/* .... komentarz .... */
Zaproponuj specyfikację DFD i sporządź diagram stanów parsera w formie graficznej lub jako tabelę.
Pytania
Co jest tu zdarzeniem (dozorem)?
Zdarzeniem jest typ pojedynczego znaku. Na przykład CYFRA, LITERA, BIAŁY_ZNAK
Jak wprowadzić zdarzenie (dozór)?
W Visio:
- kliknąć na przejście (strzałkę łączącą stany) i wyświetlić właściwości.
- Zaznaczyć ckeck-box o wdzięcznej nazwie Zabezpieczenie (w wersji angielskiej Guard)
- Wpisać tekst bez nawiasów kwadratowych
Jak wprowadzić akcję?
- W oknie właściwości przejścia wybrać zakładkę Akcje i doodać nową…
Czy parser może analizować ciąg znaków na raz?
Nie, zakładamy, że na wejściu dostaje pojedyncze znaki i klasyfikuje je jako należące do określonego typu. W wyniku klasyfikacji pojawia się zdarzenie. Można też zapisać dozór jako [ _ | a-z | A-Z ]
- podkreślenie lub znaki z zakresu a-z lub znaki A-Z.
Co jest tu akcją
Jest to uaktywnienie procesu DFD. Na przykład “Dodaj_ znak_ do_ bufora”, “wyczyść_bufor”.
Zauważmy, diagram stanów wprowadza nowy element do diagramów DFD - podaje, kiedy proces ma być aktywowany
Ilustrujący przykład kodu:
int state=NOIDENTIFIER; for(;;){ // pobranie znaku i identyfikację typu pomijamy w specyfikacji int c=getc(); int type=getType(); switch(state){ case: NOIDENTIFIER: if(type==WHITESPACE){...} else if(type==LETTER){state=IDENTIFIER;dodajZnakDoBufora(buf,c);} // przejscie else if(type==DIGIT){...} else if(type==WHITESPACE){...} else {...} break; case: IDENTIFIER: if(type==WHITESPACE){state=NOIDENTIFIER;wypiszBufor(buf);czyscBufor(buf);} else if(type==LETTER){....} else if(type==DIGIT){...} else if(type==WHITESPACE){...} else {} break; } }
Diagram stanów dla projektu
Zastanów się, gdzie można wykorzystać diagram stanów w poprzednio wybranym projekcie.
Wskazówki:
- Diagram może opisywać stany całego systemu (tak jak w opisie metody WardaMellora http://home.agh.edu.pl/~pszwed/se/sart/kss09.html ). Raczej nie dotyczy zaproponowanych tematów, typowe dla systemów wbudowanych.
- Diagram może opisywać stany obiektów przetwarzanych przez system, np.:
Zamówienie złożone, zaakceptowane, w trakcie realizacji, zrealizowane;
- Diagram stanów może opisywać interakcję systemu z użytkownikiem,
- Diagram stanów może bezpośrednio opisywać interfejs użytkownika, np..: poszczególne stany mogą odpowiadać formularzom, oknom dialogowym, wyświetlanym stronom HTML, itd
Wybierz jedną z możliwości 2,3,4 i uzupełnij wcześniej sporządzoną specyfikację.
Dodatkowo...
Przemyśl, jak zamodelować maszyny dla takich tematów
- bankomat komunikujący się z systemem bankowym
- maszyna vendingowa
- automat do sprzedaży biletów
- dystrybutor paliwa na stacji benzynowej
- parking na AGH
Wiele innych podobnego typu: http://pszwed.kis.agh.edu.pl/kss/index.html → http://pszwed.kis.agh.edu.pl/kss/tematy.html
Rysowanie diagramów stanu jest dobrym tematem egzaminacyjnym. Typowe konstrukcje:
- Dwie lub trzy komunikujące się maszyny skończeniestanowe
- Ograniczenia czasowe (after)
- Zagnieżdżone stany, płytka i głęboka historia (UML), itd.