Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Polsko-Japońska Wyższa Szkoła Technik Komputerowych Warszawa Diagramy interakcji (współpracy i sekwencji) Tomasz Górski Jakub Fogiel Bartosz Czech.

Podobne prezentacje


Prezentacja na temat: "Polsko-Japońska Wyższa Szkoła Technik Komputerowych Warszawa Diagramy interakcji (współpracy i sekwencji) Tomasz Górski Jakub Fogiel Bartosz Czech."— Zapis prezentacji:

1 Polsko-Japońska Wyższa Szkoła Technik Komputerowych Warszawa Diagramy interakcji (współpracy i sekwencji) Tomasz Górski Jakub Fogiel Bartosz Czech

2 Diagramy interakcji Nie dla wszystkich przypadków użycia może zachodzić potrzeba konstruowania diagramów interakcji, ale mogą okazać się szczególnie użyteczne np. do komunkacji wewnątrz zespołu projektowego (jak zresztą wszystkie rodzaje diagramów) czy też do rozważenia opcjonalnych realizacji w trudnych przypadkach. Ponadto, niektóre narzędzia CASE potrafią wykorzystać te diagramy do generacji kodu, co może stanowić ważny powód dla ich konstruowania. UML posiada dwa rodzaje diagramów interakcji: Oba rodzaje diagramów, bazując na danym diagramie klas, pokazują prawie tą samą informację, w nieco inny sposób. Niektóre narzędzia CASE potrafią generować jedne z tych diagramów z drugich. Decyzja, który rodzaj diagramów konstruować, zależy od pożądanego aspektu interakcji. diagramy współpracy (kolaboracji) diagramy sekwencji. Diagramy interakcji, stanowiące jeden z rodzajów diagramów dynamicznych, pozwalają na utworzenie opisu interakcji obiektów systemu podczas realizacji danego zadania: przypadku użycia czy jednego konkretnego scenariusza danego przypadku użycia.

3 Diagramy współpracy; przykład Prosty diagram współpracy, bez uwidaczniania interakcji między obiektami, stanowi coś w rodzaju wystąpienia fragmentu diagramu klas; pokazuje aktora, relewantne obiekty i powiązania między nimi. Możliwe jest pokazanie więcej niż jednego obiektu danej klasy. Diagramy współpracy pokazują w jaki sposób system realizuje dany przypadek użycia. Współpracujące obiekty, połączone linkami, stanowią rodzaj kolektywu, zwanego tu kolaboracją. Linki odpowiadają powiązaniom, czyli wystąpieniom asocjacji z diagramu klas, a to oznacza, że odpowiednia asocjacja musi istnieć na diagramie klas. :Personel bibl. :Członek bibl. inicjator :Egzemplarz książki :Książka kierunek nawigowania, nazwy linków, itp. Na diagramie współpracy może pojawiać się informacja taka, jak na diagramie klas, np.: pod warunkiem, że zwiększy, a nie zmniejszy czytelność diagramu.

4 Interakcja na diagramach współpracy (1) Komunikaty przedstawiane są tu w postaci etykiet strzałek rysowanych wzdłuż linków między współpracującymi przy realizacji przypadku użycia obiektami. Diagramy współpracy mogą dodatkowo pokazywać interakcje zachodzące między obiektami zaangażowanymi w realizację danego przypadku użycia. Sekwencja interakacji oznacza tu sekwencję komunikatów przesyłanych między współpracującymi obiektami. :Personel bibl. :Członek bibl. :Egzemplarz książki :Książka Pożycz (egzemplarz) 1: CzyMożnaPożyczyć 2: Pożycz 3: ZaznaczWypożyczenie komunikat wysyłany od aktora do obiektu klasy Członek bibl. (z reguły nie numerowany)

5 Interakcja na diagramach współpracy (2) Na diagramach współpracy nie pokazuje się odpowiedzi na wysyłane komunikaty. Komunikaty mogą być numerowane, albo kolejnymi liczbami naturalnymi (jak na poprzednim diagramie), albo stosując tzw. numerację zagnieżdżoną. :Personel bibl. :Członek bibl. :Egzemplarz książki :Książka Pożycz (egzemplarz) 1: CzyMożnaPożyczyć 2: Pożycz 2.1: ZaznaczWypożyczenie Numeracja zagnieżdżona, oznacza, że jeśli obiekt O otrzyma komunikat o numerze np. n to ten numer będzie dołączany jako prefix do każdego komunikatu wysyłanego w trakcie realizacji komunikatu n przez O.

6 Podsumowując Diagramy współpracy Opisują współpracę/interakcję między obiektami w wybranym kontekście Teoretycznie opisujemy tą samą systuację co przy pomocy diagramu sekwencji, ale z innej perspektywy (struktury klas) Brak osi czasu, możemy ją zastąpić numerując komunikaty Z drugiej strony mamy dzięki temu większą swobodę, uwaga skupia się na obiektach i wymianie komunikatów między nimi, a nie chronologii ich wysyłania Obiekty komunikujące się muszą być z sobą w związku asocjacji Mając diagram klas nanosimy obiekty danych klas z ich związkami i dodajemy komunikaty na związku Komunikat to również wywołanie metody, więc klasy współpracujących obiektów muszą zawierać metody, które będą wywoływane

7 Diagramy sekwencji Diagramy sekwencji nie pokazują linków między współpracującymi obiektami, można to wydedukować w oparciu o wysyłane komunikaty. :Personel bibl. :Egzemplarz książki :Członek bibl. :Książka Pożycz (egzemplarz) 1: CzyMożnaPożyczyć 2: Pożycz 2.1: ZaznaczWypożyczenie linia życia obiektu czas aktywne życie obiektu Kolejność obiektów jest bez znaczenia, ale warto zadbać o czytelność diagramu.

8 Nakładanie ograniczeń na przepływ czasu (1) Dwa sposoby opisywania czasu: oznaczanie skali czasowej lub nakładanie ograniczeń na upływ czasu. :Personel bibl. :Egzemplarz książki :Członek bibl. :Książka Pożycz (egzemplarz) 1: CzyMożnaPożyczyć 2: Pożycz 2.1: ZaznaczWypożyczenie A c {C-A < 5 sek.} { ZaznaczWypożyczenie - Pożycz < 1 sek.} gdy interesuje nas czas potrzebny na przesłanie komunikatu

9 Tworzenie i usuwanie obiektów (1) Czasami przydaje się uwidocznienie wartości zwracanej przez komunikat, poprzez instrukcję przypisania. Umożliwia to późniejsze wykorzystanie tej wartości, np. jako argumentu dla innego komunikatu. Może też być wykorzystana do specyfikowania warunku czy iteracji. :Sekretariat ds. nauczania :Wykładowca n := PobierzNazwisko :Szef wykładowców UtwórzNowegoSzefaWykładowców (n) usuń X koniec życia obiektu nowy obiekt pojawia się na diagramie w miejscu korespondującym z czasem jego utworzenia Wykładowca Szef wykładowców

10 Tworzenie i usuwanie obiektów (2) Musi być wyspecyfikowane, kto jest odpowiedzialny za usuwanie obiektów, aby zapobiec wyciekaniu pamięci. Niektóre języki, takie jak np.Java czy SmallTalk, posiadają wbudowane mechanizmy zbierania nieużytków (garbage collectors). Z grubsza, polega to na usuwaniu (w jakimś czasie) wszystkich obiektów, do których nie ma żadnych referencji w systemie. :Sekretariat ds. nauczania :Szef wykładowców {nowy} :Wykładowca {usuwany} 2: UtwórzNowegoSzefaWykładowców (n) 1: n := PobierzNazwisko 3: usuń własność Komunikaty wysyłane od aktora są w tym wypadku numerowane, aby możliwe było ustalenie ich wzajemnej kolejności.

11 Generyczne diagramy interakcji (1) W UML, generyczny diagram interakcji ma specyfikować wszystkie możliwe sekwencje interakcji dla danego przypadku użycia, a nie tylko dla jednego z prawdopodobnych scenariuszy. Diagram dla pojedynczego scenariusza jest nazywany wystąpieniem generycznego diagramu interakcji. Przedstawianie zachowań warunkowych Wysłanie komunikatu może być uzależnione od spełnienia wyspecyfikowanego warunku. :K [i = 0] x [i = 1] y :K [i = 0] x [i = 1] y W zależności od wartości i oba komunikaty x i y mogą być wysłane. Może być wysłany albo komunikat x albo y. Może też nie być wysłany żaden z nich. ten sam punkt w czasie dwa różne punkty w czasie {warunki muszą się wykluczać dla interakcji sekwencyjnej} jeśli i zostanie zmienione w międzyczasie

12 Generyczne diagramy interakcji (2) Warunek, zapisany wewnątrz nawiasów [ ] stanowi wyrażenie typu Boolean i może być wyrażony w języku naturalnym, w języku ustrukturalizowanym (np. OCL), w języku programowania czy innej notacji. :K1 7.1: [i = 0] x 7.2: [i = 1] y :K2 Linia życia dla wystąpienia klasy K2 uległa rozgałęzieniu, aby podkreślić fakt, że stan obiektu może wyglądać inaczej w zależności od tego, który komunikat zostanie odebrany. Budzi wątpliwości numeracja komunikatów, ponieważ dla interakcji sekwencyjnej może zostać wysłany tylko jednen z nich. Być może oba powinny być oznaczone przez 7.1.

13 Generyczne diagramy interakcji (3) Przedstawianie iteracji UML umożliwia oznaczenie komunikatu, który ma być wysłany wiele razy, poprzez poprzedzenie symbolem * warunku określającego zakończenie iteracji. Przykłady iteracji: *[i := 1..10] - komunikat będzie wysłany 10 razy, *[x < 10] - komunikat będzie wysyłany dopóki x będzie < 10, *[pozycja znaleziona] - komunikat będzie wysyłany do momentu, gdy pozycja nie zostanie znaleziona (gdy warunek przyjmie wartość FALSE) Jeśli w trakcie wielokrotnego wysyłania komunikatu x, będzie wysyłany także komunikat y, to zostanie on wysłany tyle razy, ile razy wysyłane jest x. Zachowanie spójności diagramów nie wymaga powtarzania symbolu iteracji dla komunikatu y. Wyrażanie warunków na diagramach współpracy jest także możliwe,ale bez ilustrowania rozgałęzienia linii życia obiektu. Wydaje się, że poza najprostszymi sytuacjami, diagramy sekwencyjne lepiej modelują realizację bardziej złożonych (z opcjonalnymi scenariuszami) przypadków użycia.

14 Generyczne diagramy interakcji (4) :K1:K2:K3 3.1: *[i := 1..2] x 3.1.1: y :K1:K2:K3 3.1: *[i := 1..2] x 3.1.1: *[j := 1..3] y xyxy xyyyxyyy sekwencja komunikatów

15 public class Kaseta { String typ; Film f; boolean wypozyczony; public Kaseta(String typ,Film f) { this.typ = typ; this.f = f; f.egzemplarze.add(this); wypozyczony = false; } public void wypozycz(Klient k) { wypozyczony = true; k.wypozyczone.add(this); } public void zwroc() { wypozyczony = false; } import java.util.*; public class Klient { String nazwisko; String imie; LinkedList wypozyczone; public static void main(String[] args) { Klient k = new Klient("Jan","Kowlalski"); Film f = new Film("Przeminęło z wiatrem"); Nosnik n = new Nosnik("DVD",f); k.wypozycz(f); } public Klient(String imie,String nazwisko) { this.imie = imie; this.nazwisko = nazwisko; wypozyczone = new LinkedList(); } public void zwroc(Film f) { wypozyczone.remove(f); } public void wypozycz(Film f) { if(czyMoznaWypozyczyc() && f.czyFilmDostepny()) f.wypozycz(this); } public boolean czyMoznaWypozyczyc() { return wypozyczone.size() > 3; } import java.util.*; public class Klient { String nazwisko; String imie; LinkedList wypozyczone; public static void main(String[] args) { Klient k = new Klient("Jan","Kowlalski"); Film f = new Film("Przeminęło z wiatrem"); Nosnik n = new Nosnik("DVD",f); k.wypozycz(f); } public Klient(String imie,String nazwisko) { this.imie = imie; this.nazwisko = nazwisko; wypozyczone = new LinkedList(); } public void zwroc(Film f) { wypozyczone.remove(f); } public void wypozycz(Film f) { if(czyMoznaWypozyczyc() && f.czyFilmDostepny()) f.wypozycz(this); } public boolean czyMoznaWypozyczyc() { return wypozyczone.size() > 3; } Implementacja

16 import java.util.*; public class Film { String tytul; LinkedList egzemplarze; public Film(String tytul) { this.tytul = tytul; egzemplarze = new LinkedList(); } public boolean czyFilmDostepny() { Iterator i = egzemplarze.iterator(); while(i.hasNext()){ Kaseta kaseta = (Kaseta)i.next() if(kaseta.wypozyczony) return true; } return false; } public void wypozycz(Klient k) { Iterator i = egzemplarze.iterator(); while(i.hasNext()){ Kaseta n = (Kaseta)i.next(); if(!n.wypozyczony) n.wypozycz(k); } public class Kaseta { String typ; Film f; boolean wypozyczony; public Kaseta(String typ,Film f) { this.typ = typ; this.f = f; f.egzemplarze.add(this); wypozyczony = false; } public void wypozycz(Klient k) { wypozyczony = true; k.wypozyczone.add(this); } public void zwroc() { wypozyczony = false; } import java.util.*; public class Klient { String nazwisko; String imie; LinkedList wypozyczone; public static void main(String[] args) { Klient k = new Klient("Jan","Kowlalski"); Film f = new Film("Przeminęło z wiatrem"); Nosnik n = new Nosnik("DVD",f); k.wypozycz(f); } public Klient(String imie,String nazwisko) { this.imie = imie; this.nazwisko = nazwisko; wypozyczone = new LinkedList(); } public void zwroc(Film f) { wypozyczone.remove(f); } public void wypozycz(Film f) { if(czyMoznaWypozyczyc() && f.czyFilmDostepny()) f.wypozycz(this); } public boolean czyMoznaWypozyczyc() { return wypozyczone.size() > 3; }

17 import java.util.*; public class Film { String tytul; LinkedList egzemplarze; public Film(String tytul) { this.tytul = tytul; egzemplarze = new LinkedList(); } public boolean czyFilmDostepny() { Iterator i = egzemplarze.iterator(); while(i.hasNext()){ Kaseta kaseta = (Kaseta)i.next() if(kaseta.wypozyczony) return true; } return false; } public void wypozycz(Klient k) { Iterator i = egzemplarze.iterator(); while(i.hasNext()){ Kaseta n = (Kaseta)i.next(); if(!n.wypozyczony) n.wypozycz(k); } public class Kaseta { String typ; Film f; boolean wypozyczony; public Kaseta(String typ,Film f) { this.typ = typ; this.f = f; f.egzemplarze.add(this); wypozyczony = false; } public void wypozycz(Klient k) { wypozyczony = true; k.wypozyczone.add(this); } public void zwroc() { wypozyczony = false; } import java.util.*; public class Klient { String nazwisko; String imie; LinkedList wypozyczone; public static void main(String[] args) { Klient k = new Klient("Jan","Kowlalski"); Film f = new Film("Przeminęło z wiatrem"); Nosnik n = new Nosnik("DVD",f); k.wypozycz(f); } public Klient(String imie,String nazwisko) { this.imie = imie; this.nazwisko = nazwisko; wypozyczone = new LinkedList(); } public void zwroc(Film f) { wypozyczone.remove(f); } public void wypozycz(Film f) { if(czyMoznaWypozyczyc() && f.czyDostepny()) f.wypozycz(this); } public boolean czyMoznaWypozyczyc() { return wypozyczone.size() > 3; }

18 :Klient :Film :Kaseta Wypozyc(Film) 2: czyFilmDostepny() 3: wypozycz(Klient) 3.1: wypozycz(Klient) :Klient 1: czyMoznaWypozyczyc()

19 Dziekujemy za Uwagę Koniec


Pobierz ppt "Polsko-Japońska Wyższa Szkoła Technik Komputerowych Warszawa Diagramy interakcji (współpracy i sekwencji) Tomasz Górski Jakub Fogiel Bartosz Czech."

Podobne prezentacje


Reklamy Google