Diagramy interakcji Jacek Górski gr. 652.
Diagram interakcji (interaction diagram) - diagram ułatwiający zrozumienie zależności w przepływie sterowania. Metody realizujące to sterowanie są rozproszone w wielu klasach, co powoduje trudności ze zrozumieniem ich wzajemnej zależności i interakcji. Jest to powód sporządzania diagramów interakcji. Służą one do opisu zależności przy przesyłaniu komunikatów dla pewnej grupy obiektów. Często stanowią bardziej precyzyjny opis pojedynczego przypadku użycia. Istnieje wiele wariantów diagramów interakcji o różnych odmianach syntaktycznych. UML wprowadza dwa rodzaje takich diagramów: diagramy sekwencji i diagramy kolaboracji (współpracy). z książki: Kazimierz Subieta, "Słownik terminów z zakresu obiektowości", Akademicka Oficyna Wydawnicza PLJ, Warszawa 1999
Do czego służą? Diagramy interakcji są jednym z rodzajów diagramów dynamicznych. Bazują na istniejącym diagramie klas i opisują one sposób w jaki obiekty współpracują ze sobą w celu zrealizowania konkretnej funkcji systemu (przypadku użycia lub scenariusza danego przypadku użycia). Pozwalają na lepsze zrozumienie zdarzeń zachodzących pomiędzy nimi. Ponadto mogą służyć jako model do generowania gotowego kodu programu przez, niektóre narzędzia typu CASE.
rodzaje diagramów interakcji: diagramy sekwencji. diagramy kolaboracji (współpracy). Oba typy ilustrują ten sam problem, jednak przedstawiają go w innym kontekście, dlatego wybór odpowiedniego diagramu zależy od sposobu w jaki chcemy daną sytuację opisać.
Realizowany use case: «include» «include» «extends» Sprawdzenie czy można wypożyczyć «include» Sprawdzenie czy tytuł jest dostępny «include» Wypożyczenie książki pracownik biblioteki «extends» Zaznaczenie wypożyczenia książki
Diagram klas: wypozycz() czyMoze() czyWolny() zaznWyp() Osoba Książka Pracownik biblioteki Wypożyczający wypozycz() czyMoze() wypożycza jest_wypożyczany 1..* 1..* * Egzemplarz czyWolny() zaznWyp() 0..1
:Pracownik biblioteki diagramy sekwencji: Ukazuje sposób realizacji danego przypadku użycia oraz interakcję pomiędzy obiektami biorącymi w nim udział. Obiekty są połączone linkami, które odwzorowują asocjacje pomiędzy poszczególnymi obiektami. :Pracownik biblioteki 1: Pożycz :Wypożyczający :Egzemplarz 1.2: Czy wolny 1.3: Zaznacz wypożyczenie 1.1: Czy można pożyczyć
Konwencja zapisywania obiektów jest następująca: Obiekt:NazwaKlasy Konwencja zapisywania obiektów jest następująca: Obiekt:NazwaKlasy. Jeśli występuje tylko nazwa klasy po dwukropku( :NazwaKlasy) oznacza to, iż wszystkie obiekty danej klasy zachowują się w ten sam sposób. Przekazywane między obiektami komunikaty są zaznaczane w postaci etykiet ze strzałkami, które pokazują kierunek ich przekazywania. W praktyce oznacza to ilustrację wywoływania poszczególnych metod w klasach. Nie zaznacza się na diagramie odpowiedzi na komunikaty. Stosuje się dwie metody numeracji przekazywanych komunikatów: używając kolejnych liczb naturalnych (1,2,3,4,...) oraz numeracji zagnieżdżonej (1, 1.1, 1.2, 2, 2.1,...). Druga metoda posiada tą zaletę, że w ten sposób można dodatkowo zdefiniować strukturę komunikatów, czyli np. komunikaty 2.1, 2.2 są konsekwencją wysłania komunikatu 2.
Wyodrębnienie ze złożonego modelu subkolaboracji Subkolaboracja Podczas opisywania diagramem kolaboracji bardziej złożonej i rozbudowanej struktury, można posługiwać się mechanizmem wyróżniania subkolaboracji. Metoda ta polega na wyodrębnieniu z modelu grupy elementów i zamienianie ją na pakiet. pakiet Wyodrębnienie ze złożonego modelu subkolaboracji Zastąpienie subkolaboracji pakietem Pakiet nie posiada własnego interfejsu, dlatego nie można połączyć wysyłanego do pakietu komunikatu z obiektem w jego wnętrzu.
diagramy sekwencji: W odróżnieniu od diagramów kolaboracji, diagramy sekwencji kładą nacisk na czasowe uporządkowanie komunikatów. Dodatkowo wyraźniej w nich można pokazać przekazywanie sterowania. :Pracownik biblioteki :Wypożyczający :Egzemplarz 1: Pożycz 1.1: Czy można pożyczyć 1.2: Czy wolny 1.3: Zaznacz wyp.
Notacja: Linie przerywane oznaczają czas życia obiektu. Zapełnione prostokąty oznaczają aktywność obiektu. Puste prostokąty oznaczają, że sterowanie zostało przekazane do innego obiektu i oczekiwanie na zwrot sterowania po, np. otrzymaniu odpowiedzi na wysłany komunikat. Strzałki ciągłe oznaczają komunikaty, a przerywane odpowiedzi. Koniec życia obiektu oznacza się znakiem X. Diagramy sekwencji w bardziej przejrzysty sposób ilustrują cykle życia obiektów w kontekście upływającego czasu. Dodatkowo można poddawać je ograniczeniom czasowym, np. odpowiedź na jakiś komunikat ma być zwrócona po czasie nie dłuższym niż 5 sek.
Diagramy generyczne. Ich zadaniem jest zobrazowanie wszystkich możliwych sekwencji interakcji, a nie tylko jednego z możliwych scenariuszy. :O [i = 0] x [i = 1] y W zależności od wartości zwracanej warunku zawartego w kwadratowych nawiasach możliwe jest wysłanie danego komunikatu. Diagramy generyczne są często bardzo skomplikowane, dlatego mogą sprawiać wiele problemów z ich poprawnym przedstawieniem. Problem stanowi numeracja komunikatów, np. w zależność od warunku w wysyłany jest komunikat x lub y. Jeśli zaznaczymy je kolejnymi cyframi, np. 5 i 6, to dla któregoś ze scenariuszy sekwencja komunikatów nie zachowa kolejności numeracji.
Istnieją dwa rodzaje interakcji: Sekwencyjna Współbieżna Sekwencyjna cechuje się tym, iż powstaje pewna sekwencja działań, które wykonują się kolejno: aktor inicjuję jakąś akcję, obiekt x komunikat do obiektu y. Chociaż oba są aktywne obiekt x jest zawieszony i czeka na zwrot komunikatu od obiektu y. W tym czasie obiekt y może wysłać komunikat do kolejnego obiektu i sam zostanie zawieszony do czasu otrzymania odpowiedzi, itd. Systemy wykorzystujące taką strategię noszą nazwę jednowątkowych. Współbieżna jest wolna od ograniczeń opisanych powyżej i pozwala na aktywne działanie wielu obiektów, które mogą wysyłać wiele komunikatów jednocześnie. Takie asynchroniczne działanie jest wykorzystywane w systemach wielowątkowych (np.. w systemach rozproszonych).
Notacja: Rodzaj interakcji Symbol Znaczenie Nadawca zawiesza działanie, dopóki odbiorca nie zwróci sterowania.. synchroniczna (synchronous) Oznacza zakończenie komunikatu i przekazanie sterowania do nadawcy. Powrót nie jest komunikatem. powrót (return) Nadawca komunikatu przekazuje sterowanie do odbiorcy oraz kończy własną działalność nie oczekując na odpowiedź. jednostronna (flat) asynchroniczna (asynchronous) Nadawca komunikatu nie oczekuje na odpowiedź odbiorcy, ale też i nie kończy własnej aktywności, co oznacza, że nadal przetwarza i może wysyłać komunikaty.
Podsumowanie diagramów interakcji Diagramy interakcji, czyli diagramy kolaboracji i sekwencji, jako główne zadanie mają wspomożenie projektanta w procesie konstruowania modelu obiektowego (konkretnie diagramu klas). Pomoc polega na analizie zachowania systemu w trakcie realizacji jego zadań i identyfikowaniu nowych czy też korekcie już istniejących elementów modelu, np.: klas, ich atrybutów czy metod oraz asocjacji między klasami. Struktura, opisywana przez model obiektowy, musi zapewnić możliwość realizacji zadań postawionych przed systemem. Oba rodzaje diagramów przedstawiają bardzo podobną informację, w nieco inny sposób. Diagramy kolaboracji, stanowiące w pewnym sensie wystąpienia fragmentu diagramu klas, lepiej przedstawiają związki między obiektami biorącymi udział w realizacji danego przypadku użycia. Łatwiej też można tu odwzorować efekty oddziaływania na pojedynczy obiekt. Diagramy sekwencji lepiej przedstawiają zależności czasowe, bardziej niż diagramy kolaboracji nadają się do modelowania systemów czasu rzeczywistego i złożonych scenariuszy.