Table of Contents

Zadanie 3 Diagramy stanów

O diagamach stanów

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 przeczytania

Do wykonania

Do rysowania diagramu stanów używamy Visio / UML. Oprogramowanie i baza danychDiagram 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.

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 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.

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:

Jak wprowadzić akcję?
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 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;
 
    }
 
}

Diagram stanów dla projektu

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ę.

Dodatkowo...

Przemyśl, jak zamodelować maszyny dla takich tematów

Wiele innych podobnego typu: http://pszwed.kis.agh.edu.pl/kss/index.htmlhttp://pszwed.kis.agh.edu.pl/kss/tematy.html

Rysowanie diagramów stanu jest dobrym tematem egzaminacyjnym. Typowe konstrukcje: