Diagramy interakcji Jarosław Kuchta Dokumentacja i Jakość Oprogramowania
Podstawowe pojęcia Interakcja (interaction) Przepływ komunikatów pomiędzy obiektami konieczny dla wykonania określonego zadania. Interakcja występuje w kontekście kolaboracji. Kolaboracja (collaboration) Zespół powiązań między obiektami umożliwiający ich interakcję dla wykonania określonego zadania. Komunikat (message) Przepływ informacji między obiektami pojawiający się w konsekwencji wystąpienia określonego zdarzenia. Zdarzenie (event) Wystąpienie sytuacji istotnej z punktu widzenia systemu. Zdarzenie zachodzi w pewnym niepodzielnym momencie czasu. Konsekwencją zdarzenia jest komunikat. DiagramyInterakcji Diagramy interakcji 2/20
Rodzaje diagramów interakcji Diagramy kolaboracji (kooperacji, współpracy) powiązania między obiektami przepływ komunikatów wzdłuż powiązań Diagramy sekwencji (przebiegu) linie życia obiektów przepływ komunikatów uporządkowany w czasie DiagramyInterakcji Diagramy interakcji 3/20
Zastosowanie diagramów interakcji Opis działania systemu Opis przypadków użycia Opis scenariusza przypadku użycia Opis operacji klasy DiagramyInterakcji Diagramy interakcji 4/20
Elementy diagramu kolaboracji numer porządkowy aktor komunikat 1: DoSomething() znacznik kierunku obiekt anobject:aclass Klient powiązanie DiagramyInterakcji Diagramy interakcji 5/20
Uwagi do diagramu kolaboracji (1/2) Występujący aktorzy muszą być powiązani z danym przypadkiem użycia Obiekty reprezentują obiekty globalne (dla całego systemu) lub lokalne (np. parametry operacji, zmienne lokalne) Powiązania reprezentują drogi przepływu komunikatów. Komunikaty mogą być przesyłane pomiędzy dwoma aktorami, aktorem a obiektem lub pomiędzy dwoma obiektami. Komunikat reprezentuje przekazanie informacji (w przypadku aktora jako odbiorcy) lub wywołanie operacji (w przypadku obiektu jako odbiorcy). W tym drugim przypadku operacja musi być zdefiniowana w klasie odbiorcy. DiagramyInterakcji Diagramy interakcji 6/20
Uwagi do diagramu kolaboracji (2/2) Przez jedno powiązanie może być przekazywanych wiele komunikatów w różne strony i w różnym czasie. Kierunek przepływu komunikatu określa strzałka. Kolejność przepływu komunikatu określają numery porządkowe. Zamiast numeru porządkowego można podać zaawansowaną specyfikację przesłania komunikatu W przypadku, gdy aspekt czasowy jest bardziej istotny, korzystniej jest użyć diagramu sekwencji. DiagramyInterakcji Diagramy interakcji 7/20
Opis komunikatu (1/3) Numer porządkowy może składać się z kilku segmentów, każdy segment jest liczbą całkowitą określającą kolejność na danym poziomie zagłębienia, np.: 1.2.1 poprzedza 1.2.2 oraz poprzedza 1.3 komunikaty współbieżne określane są przez dodanie litery za numerem porządkowym, np.. 1.2a i 1.2b są współbieżne Określenie komunikatu poprzedzającego Zamiast numeru porządkowego danego komunikatu można podać numery porządkowe komunikatów poprzedzających (lista numerów oddzielonych przecinkami i zakończona znakiem / ). Dany komunikat zostanie przesłany tylko wówczas, gdy wszystkie poprzedzające go komunikaty zostaną przesłane (synchronizacja) DiagramyInterakcji Diagramy interakcji 8/20
Opis komunikatu (2/3) Warunek strzegący, dozoru (guard condition) Warunek strzegący to warunek, który musi być spełniony dla przesłania komunikatu. Warunek strzegący podaje się w nawiasach kwadratowych, np. [n<10] Określenie iteracji Podanie klauzuli iteracji w nawiasach kwadratowych poprzedzonych znakiem * oznacza wielokrotne przesłanie komunikatu. Klauzulę iteracji podaje się w określonym języku programowania lub w pseudokodzie, np.: *[i:=1..10] DiagramyInterakcji Diagramy interakcji 9/20
Opis komunikatu (3/3) Zwracany wynik wynik := nazwa operacji (lista argumentów) Lista argumentów Jest listą wartości oddzielonych przecinkami, które są po kolei przypisywane do parametrów operacji. Wartości są wyrażeniami w określonym języku programowania lub w pseudokodzie. W wyrażeniach mogą występować wartości zwrotne z poprzedzających komunikatów DiagramyInterakcji Diagramy interakcji 10/20
Przykłady komunikatów 1.2a: DoSomething() 3, 5/7: DoSomething() 4: [action=new] NewDocument(SelectType()) DiagramyInterakcji Diagramy interakcji 11/20
Elementy diagramu sekwencji aktor Klient obiekt linia życia anobject:aclass komunikat DoSomething() wektor przepływu komunikatu skupienie sterowania odpowiedź DiagramyInterakcji Diagramy interakcji 12/20
Uwagi do diagramu sekwencji Diagram sekwencji i diagram kolaboracji są semantycznie równoważne. Kierunek przepływu komunikatu określa zwrot wektora przepływu przy jednym wektorze może wystąpić tylko jeden komunikat. Numery porządkowe są zbędne kolejność przepływu komunikatów określa uporządkowanie wektorów przepływu komunikatów w pionie wzdłuż linii życia. Można stosować warunki strzegące i specyfikacje iteracji. Wektor odpowiedzi nie opisuje się jeśli istotna jest wartość zwrotna, to przy wektorze zapytania podaje się zaawansowaną sygnaturę komunikatu. Zamiast wektora odpowiedzi można zastosować zwykły wektor przepływu komunikatu. Skupienie sterowania (focus of control) reprezentuje czas, w którym obiekt jest w stanie przyjmować i nadawać komunikaty (czas aktywności). DiagramyInterakcji Diagramy interakcji 13/20
Tworzenie i niszczenie obiektu Create() anobject:aclass DiagramyInterakcji Diagramy interakcji 14/20
Równoległe wątki sterowania anobject:aclass DiagramyInterakcji Diagramy interakcji 15/20
Rekurencja anobject:aclass DiagramyInterakcji Diagramy interakcji 16/20
Dokładne określenie czasu {t2-t1<1 min} t1 t2 {t3 -t3<10 ms} t3 t3 DiagramyInterakcji Diagramy interakcji 17/20
Przykład diagramu sekwencji Lista klientów: Lista Rachunki niezapłacone: Lista Klient Sprzedawca 1: Zgłoszenie() 3:[nie jest] Podaj dane() 2: jest := Wyszukanie() 4: 3/ jest := Nowy klient() 6: akcja := Potwierdzenie zgłoszenia(nzap) 5: [jest] nzap:=wyszukanie() 7a:[akcja=nowy] Create() Zamówienie: Zamówienia DiagramyInterakcji Diagramy interakcji 18/20
Przykład diagramu kolaboracji Klient 1: Zgłoszenie() 3:[nie jest] Podaj dane() 6: akcja := Potwierdzenie zgłoszenia (nzap) Sprzedawca 2: jest := Wyszukanie() 4: 3/ jest := Nowy klient() 5: [jest] nzap:=wyszukanie() 7a:[akcja=nowy] Create() Lista klientów: Lista Rachunki niezapłacone: Lista Zamówienie: Zamówienia DiagramyInterakcji Diagramy interakcji 19/20
Literatura Booch G, Rumbaugh J, Jacobson I: UML. Przewodnik użytkownika, WNT, Warszawa 2002 Dennis A., Haley Wixom B., Tegarden D.: System Analysis & Design. An Object-Oriented Approach with UML, John Wiley & Sons, Inc., USA 2001 DiagramyInterakcji Diagramy interakcji 20/20