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

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

  • 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 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.htmlhttp://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.
io/zadanie_2.txt · Last modified: 2012/10/30 11:51 by pszwed
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0