Modelowanie obiektowe w czasie rzeczywistym
Obiektowe modelowanie w czasie rzeczywistym ( ROOM ) to język specyficzny dla domeny .
ROOM został opracowany na początku lat 90. do modelowania systemów czasu rzeczywistego . Początkowo skupiono się na telekomunikacji , mimo że ROOM można zastosować w dowolnym systemie czasu rzeczywistego sterowanym zdarzeniami.
ROOM był wspierany przez ObjecTime Developer (komercyjny) i jest teraz wdrażany przez oficjalny projekt Eclipse eTrice
Kiedy zdefiniowano UML2 (wersja 2 UML z rozszerzeniami czasu rzeczywistego), przyjęto wiele elementów ROOM.
Pojęcia i kluczowe pojęcia POKOJU
ROOM to język modelowania służący do definiowania systemów oprogramowania. Pozwala na kompletne wygenerowanie kodu dla całego systemu z modelu. POKÓJ ma zarówno tekstową, jak i graficzną notację. Zwykle generowanemu kodowi towarzyszy ręcznie napisany kod, np. dla graficznych interfejsów użytkownika ( GUI ). Kod jest kompilowany i łączony z biblioteką wykonawczą, która udostępnia klasy podstawowe i podstawowe usługi (np. przesyłanie wiadomości).
POKÓJ opisuje system oprogramowania w trzech wymiarach: strukturze, zachowaniu i dziedziczeniu. W poniższych sekcjach wyjaśniono te trzy aspekty bardziej szczegółowo.
Struktura
Widok strukturalny w POKOJU składa się z aktorów lub kapsuł . Aktorzy mogą komunikować się ze sobą za pomocą portów . Te porty są połączone za pomocą powiązań . Aktorzy wymieniają komunikaty asynchronicznie za pośrednictwem portów i powiązań. Do każdego portu unikalny protokół jest przypisany. Protokół w POKOJU definiuje zestaw komunikatów wychodzących i zestaw komunikatów przychodzących. Porty mogą być połączone za pomocą powiązania, jeśli należą do tego samego protokołu i są ze sobą sprzężone. Oznacza to, że jeden port wysyła wychodzące komunikaty protokołu i odbiera przychodzące. Ten port nazywa się zwykłym portem. Jego port równorzędny, sprzężony , odbiera komunikaty wychodzące i wysyła przychodzące komunikaty protokołu. Innymi słowy, port jest kombinacją wymaganego i dostarczonego interfejsu w roli (ponieważ jeden i ten sam protokół może być używany przez kilka portów aktora).
Aktor może zawierać innych aktorów (jako kompozycja ). W POKOJU nazywane są one referencjami aktora lub w skrócie referencjami aktora . Pozwala to na tworzenie hierarchii strukturalnych o dowolnej głębokości.
Porty aktora mogą być częścią jego interfejsu (widoczną z zewnątrz) lub częścią jego struktury (używaną przez niego samego) lub jednym i drugim. Porty, które są tylko częścią interfejsu, nazywane są portami przekaźnikowymi . Są one bezpośrednio połączone z portem aktora podrzędnego (delegują do aktora podrzędnego). Porty, które są tylko częścią struktury, nazywane są wewnętrznymi portami końcowymi . Porty, które należą zarówno do struktury, jak i interfejsu, nazywane są zewnętrznymi portami końcowymi .
Zachowanie
Każdy aktor w POKOJU ma swoje zachowanie, które jest zdefiniowane za pomocą hierarchicznej maszyny skończonej lub w skrócie maszyny stanów. Maszyna stanowa jest grafem skierowanym składającym się z węzłów zwanych stanami i krawędzi zwanych przejściami . Zmiany stanu są wyzwalane przez komunikaty przychodzące z wewnętrznego lub zewnętrznego portu końcowego. W tym kontekście komunikaty są czasami nazywane zdarzeniami lub sygnałami . Jeśli przejście określa określony wyzwalacz , mówi się, że uruchamia się jeśli automat stanów znajduje się w stanie źródłowym przejścia i nadejdzie komunikat typu określonego przez wyzwalacz. Następnie stan jest zmieniany na stan docelowy przejścia.
Podczas zmiany stanu wykonywane są określone fragmenty kodu. Programista (lub modelarz) może dołączyć je do stanów i przejść. W ROOM ten kod jest napisany w tzw. języku poziomu szczegółowości , zwykle docelowym języku generowania kodu. Stan może mieć kod wejścia i kod wyjścia . Podczas zmiany stanu najpierw wykonywany jest kod wyjścia stanu źródłowego. Następnie kod akcji przejścia odpalania i na koniec kod wejścia stanu docelowego. Typową częścią tych kodów jest wysyłanie wiadomości przez porty aktora.
Maszyny stanowe w ROOM mają również notację graficzną podobną do wykresów stanu UML . Przykład pokazano na diagramie w tej sekcji.
Maszyna stanów może również mieć hierarchię w tym sensie, że stany mogą mieć podrzędne maszyny stanów. Podobnie jak w przypadku struktury, można ją rozszerzyć na dowolną głębokość. Po szczegóły dotyczące semantyki hierarchicznych maszyn stanowych odsyłamy do oryginalnej książki.
Ważnym pojęciem w kontekście maszyn stanowych jest model wykonania run-to-completion . Oznacza to, że aktor całkowicie przetwarza wiadomość, zanim zaakceptuje następną wiadomość. Ponieważ semantyka run-to-completion jest gwarantowana przez środowisko wykonawcze, programista/modelarz nie musi zajmować się klasyczną synchronizacją wątków. I to pomimo faktu, że typowe systemy ROOM są wysoce współbieżne ze względu na komunikację asynchroniczną. A może warto podkreślić, że asynchroniczność systemów ROOM nie jest przypadkowa, ale odzwierciedla wrodzoną asynchroniczność np. sterowanej przez oprogramowanie maszyny. Zdecydowanie wymaga to innego sposobu myślenia niż ten, który jest potrzebny do programowania funkcjonalnego systemów synchronicznych. Ale po krótkim przyzwyczajeniu stanie się oczywiste, że asynchronicznie komunikujące się maszyny stanowe doskonale nadają się do oprogramowania sterującego.
Dziedzictwo
Podobnie jak inne języki programowania zorientowanego obiektowo, ROOM wykorzystuje koncepcję klas . Aktorzy to klasy, które mogą być wielokrotnie tworzone jako obiekty w systemie. Oczywiście każda instancja klasy aktora śledzi swój własny stan i może komunikować się z innymi instancjami tej samej (i innych) klas.
Podobnie jak inne współczesne języki programowania ROOM umożliwia dziedziczenie klas aktorów. Jest to pojedyncze dziedziczenie, ponieważ klasa aktora może pochodzić od innej klasy aktora (jej klasy bazowej ). Dziedziczy wszystkie funkcje klasy bazowej, takie jak porty i referencje aktorów, ale także maszynę stanów. Pochodna klasa aktora może dodawać kolejne stany i przejścia do klasy dziedziczonej.
Nakładanie warstw
Ostatnią potężną koncepcją POKOJU jest nakładanie warstw . Pojęcie to odnosi się do pionowych warstw systemu oprogramowania składających się z usług i ich klientów. ROOM wprowadza pojęcie punktu dostępu do usługi (SAP) po stronie klienta i punktu świadczenia usługi (SPP) po stronie serwera. Z punktu widzenia implementacji aktora SAP i SPP działają jak porty. Podobnie jak porty, są one powiązane z protokołem. Ale poza portami nie muszą (a nawet nie mogą) być jawnie powiązane. Aktor jest raczej związany z konkretną usługą przez połączenie warstwy i to powiązanie usługi jest rekurencyjnie propagowane do wszystkich aktorów podrzędnych tego aktora. Ta koncepcja jest bardzo podobna do wstrzykiwania zależności .
Literatura
- Bran Selic, Garth Gullekson, Paul T. Ward: „Modelowanie obiektowe w czasie rzeczywistym”, Nowy Jork, John Wiley & Sons Inc, 1994, ISBN 978-0-471-59917-3
Linki zewnętrzne
- Media związane z obiektowym modelowaniem w czasie rzeczywistym w Wikimedia Commons