AGH, EAIE, Informatyka Winda - tutorial Systemy czasu rzeczywistego Mirosław Jedynak, Adam Łączyński
Spis treści 1 Wstęp... 2 2 Przypadki użycia (Use Case)... 2 3 Diagramy modelu (Object Model Diagram)... 3 4 Diagramy stanów (Statecharts)... 5 5 Implementacja... 6 6 Konfiguracja... 7 6.1 Wybór klas do inicjalizacji... 8 6.2 Dodawanie zewnętrznych bibliotek... 9 7 Uruchomienie... 9 7.1 Animowane diagramy stanów... 10 7.2 Animowane diagramy sekwencji... 10 8 Bibliografia... 11 9 Spis ilustracji... 11 1 Wstęp Tutorial ten ma na celu pokazanie sposobu tworzenia projektu Elavator w systemie Rhapsody w oparciu o język Java. Przy tworzeniu tuto riala wykorzystania została wersja 7.1.1.0. Projekt Elevator ma na celu zamodelowanie działania systemu sterowania dwoma windami w biurowcu. Modelowany system powinien działać w taki sposób, aby użytkownik mógł dojechać na jedno z wybranych pięter biurowca. Czas oczekiwania i przejazdu powinien być jak najkrótszy. Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu. Należy uruchomić aplikację Rhapsody in J i stworzyć nowy projekt (File > New) podając jego nazwę (Elevator). 2 Przypadki użycia (Use Case) Pierwszym etapem projektu jest stworzenie diagramów przypadków użycia. Przypadki użycia reprezentują wymagania funkcjonalna stawiane systemowi oraz aktorów wchodzących w interakcje z systemem. Aby utworzyć diagram przypadków użycia należy: W drzewku projektu wybrać Add New > Use Case Diagram Następnie dodać aktorów wchodzących w interakcje z systemem oraz przypadki użycia Poniżej znajduje się rysunek (Rysunek 1) reprezentujący stworzony diagram. 2
Rysunek 1 Diagram przypadków użycia. 3 Diagramy modelu (Object Model Diagram) Diagram modelu (OMD) jest logicznym widokiem przedstawiającym statyczną strukturę klas i instancji w systemach obiektowych oraz relacje między nimi. Jest to kolejny etap tworzenie projektu po zdefiniowaniu przypadków użycia, gdy już znamy wymania funkcjonalne. Aby dodać diagram modelu należy: W drzewku projektu wybrać Add New > Object Model Diagram Dodanie diagramów Modelu (Rysunek 2, Rysunek 3) Aby dodać nowy element do diagramu (klasa, interfejs, pakiet, ) należy wybrać odpowiednia ikonkę na pasku (standardowa notacji UML). Dodanie nowego elementu do diagramu powoduje automatyczne dodanie do węzła pakietów (Packages). 3
Rysunek 2 Diagram modelu (OMD). Rysunek 3 Diagram modelu dotyczący GUI. 4
4 Diagramy stanów (Statecharts) Diagram stanów definiuje zachowanie poszczególnych klas systemu. Dodanie klas następuje na etapie modelowania poprzez dodanie ich do diagramów modelu. Diagramy stanów (automaty stanowe) składają się z następujących elementów: Stany każdy stan opisany jest nazwą oraz zawiera kod na wejściu (actions on entry) and i wyjściu (actions on exit) ze stanu. Dodatkowo stan składa się z reakcji, które są podobne do przejść tylko bez zmiany stanu. Przejścia przejścia umożliwiają przejścia z jednego stanu do drugiego podczas działania systemu. Każde przejście ma: o Trigger o Strażnika (opcjonalnie) o Kod do wykonania (opcjonalnie) Kiedy stan otrzymuje zdarzenie równe typowi triggera następuje przejście (gdy wyspecyfikowany jest strażnik musi on zezwolić na przejście zwrócenie wartości logicznej true). Domyślny connector oznacza stan początkowy dla danego diagramu. Poniżej znajduje się diagram stanów (Rysunek 4) dla klasy Elevator reprezentującej windę. Rysunek 4 Diagram stanów dla klasy Elevator. Diagram stanów może składać się z kilku maszyn stanowych. Realizuję się to przez dodanie przerwanej linii oznaczającej granice maszyn stanowych. W powyższym diagramie (Rysunek 4) występują dwie maszyny stanowe. 5
Sub-Statechart każdy ze stanów może mieć dodatkowo zagnieżdżony diagram stanów. Oznaczone jest to specjalnym znaczkiem na obiekcie reprezentującym stan. Dla diagramu (Rysunek 4) występują dwa poddiagramy stanów (Rysunek 5, Rysunek 6). Rysunek 5 Poddiagram dla stanu stop. Rysunek 6 Poddiagram dla stanu running. 5 Implementacja Etap tworzenia diagramów stanów przeplata się z implementacją akcji na wejściu, wyjściu do stanów, kodu strażników itd. Implementacja zależna jest od wybranego języka programowania (w naszym przypadku jest to Java). Poniżej znajduje się okienko dialogowe z kodem (Rysunek 7), jaki zostanie wykonany w momencie wejścia do stanu running dla klasy Elevator. Implementacje jest analogiczna do implementacji jednej 6
z metod klasy analizowanego diagramu stanów, stąd też mamy dostęp do jej wszystkich pól oraz metod (zarówno prywatnych jak i publicznych). Należy zwrócić uwagę, podczas implementacji kodu związanego z przejściami. W przypadku języku Java kod ten jest częścią klasy wewnętrznej Reactive, stąd też dostęp do zewnętrznej można uzyskać przez wyspecyfikowanie jej nazwy wraz z referencją this (e.g. Elevator.this). Rysunek 7 Okienko dialogowe z kodem na wejście do stanu running dla klasy Elevator. 6 Konfiguracja Po zakończeniu procesu konstrukcji diagramów stanów oraz implementacji pora na sprawdzenie wyników działania. Aby uruchomić projekt w środowisku Rhapsody należy stworzyć nowy komponent (Add New > Component).. Komponent pełni rolę inicjalizatora środowiska uruchomieniowego oraz kreatora instancji wybranych klas. 7
6.1 Wybór klas do inicjalizacji Rysunek 8 Wybór klas, których instancje zostaną utworzone. Powyższa formatka przedstawia sposób, w jaki dokonuje się wyboru klas, których instancje zostaną utworzone przez komponent inicjalizujący. W naszym przypadku tworzona jest jedna instancja obiektu MainFrame, który tworzy pozostałe zależne obiekty wykorzystywane przez system. 8
6.2 Dodawanie zewnętrznych bibliotek Rysunek 9 Formatka pokazująca sposób dodawania bibliotek zewnętrznych. Dodanie bibliotek (kodu) zewnętrznych sprowadza się do poprawnego ustawienia zmiennej CLASSPATH za pośrednictwem formatki pokazanej powyżej. Do wartości tej są następnie doklejane biblioteki wymagane przez system Rhapsody. W naszym przypadku zmienna CLASSPATH ma wartość lib\tablelayout.jar,lib\looks-2.1.4.jar, są to następujące biblioteki: TableLayout.jar Layout manager looks-2.1.4.jar Looks and Feel 7 Uruchomienie W tym momencie jesteśmy już gotowi sprawdzić poprawność naszej implementacji oraz konfiguracji. Proces uruchomienia składa się z: Kompilacji (Make) Uruchomienia (Run) 9
Można też wykonać te czynności razem (Generate/Make/Run). 7.1 Animowane diagramy stanów Rysunek 10 Animowany diagram stanów. Animowany diagram stanów pokazuje, w jakim stanie znajduje się dana instancja wybranej klasy. Aktualny stan obiektu wyszczególniony jest kolorem różowym. Animowany diagram stanów tworzy się na podstawie istniejących już diagramów stanów. 7.2 Animowane diagramy sekwencji Animowany diagram sekwencji służy do pokazania jak komunikują się ze sobą konkretne instancje systemu. Aby utworzyć taki diagram należy: Utworzyć Tools > Animated Sequence Diagram Wygenerować zdarzenie za pośrednictwem generatora zdarzeń Poniżej znajduje się przykładowy diagram wraz z sekwencją wykonanych operacji. 10
Rysunek 11 Animowany diagram sekwencji. 8 Bibliografia [1] Rhapsody User Guide (PDF) [2] Rhapsody Getting Started Guide (PDF) [3] Java Tutorial for Rhapsody (PDF) 9 Spis ilustracji Rysunek 1 Diagram przypadków użycia.... 3 Rysunek 2 Diagram modelu (OMD).... 4 Rysunek 3 Diagram modelu dotyczący GUI.... 4 Rysunek 4 Diagram stanów dla klasy Elevator.... 5 Rysunek 5 Poddiagram dla stanu stop.... 6 Rysunek 6 Poddiagram dla stanu running.... 6 Rysunek 7 Okienko dialogowe z kodem na wejście do stanu running dla klasy Elevator.... 7 Rysunek 8 Wybór klas, których instancje zostaną utworzone.... 8 Rysunek 9 Formatka pokazująca sposób dodawania bibliotek zewnętrznych.... 9 Rysunek 10 Animowany diagram stanów.... 10 Rysunek 11 Animowany diagram sekwencji.... 11 11