Diagram stanów to graf pokazujący
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:
Przejścia pomiędzy stanami następują w wyniku zdarzeń:
Bardzo często stany służą do przechowywania w skondensowanej formie historii zdarzeń.
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
Oba elementy mają być umieszczone w sprawozdaniu z zadnia 2.
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 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:
// ... EndOfLine
oraz
/* .... komentarz .... */
Narysuj diagram stanów parsera.
Zdarzeniem jest typ pojedynczego znaku. Na przykład CYFRA, LITERA, BIAŁY_ZNAK
W Visio:
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.
Jest to wywołanie pewnej funkcji lub metody klasy. Na przykład “Dodaj_ znak_ do_ bufora”, “wyczyść_bufor”.
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==SLASH){...} else {...} break; case IDENTIFIER: if(type==WHITESPACE){state=NOIDENTIFIER;wypiszBufor(buf);czyscBufor(buf);} else if(type==LETTER){....} else if(type==DIGIT){...} else if(type==SLASH){...} else {} break; } }
Zastanów się, gdzie można wykorzystać diagram stanów w poprzednio wybranym projekcie.
Wskazówki:
Zamówienie złożone, zaakceptowane, w trakcie realizacji, zrealizowane;
Wybierz jedną z możliwości 2,3,4 i uzupełnij wcześniej sporządzoną specyfikację.
Przemyśl, jak zamodelować maszyny dla takich tematów
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: