====== Zadanie 5 Diagramy sekwencji ====== Celem zadania jest wykonanie dwóch diagramów: *diagramu struktury klas (uzupełnienie modelu dziedziny) *sekwencji (przebiegu) – ang. //sequence diagram//, //message sequence chart// Diagram sekwencji obrazuje podstawowy paradygmat modelowania/programowania obiektowego: system jest siecią połączonych ze sobą obiektów, które komunikują się za pomocą przesyłanych komunikatów. Diagramy sekwencji pokazują scenariusz wymiany komunikatów pomiędzy obiektami. Mogą na nich występować zarówno obiekty wchodzące w skład systemu, jak i obiekty zewnętrzne (aktorzy). Diagramy opisujące interakcję powinny być spójne z diagramami opisującymi strukturę: *Obiekt może przyjąć tylko te komunikaty, które są zdefiniowane w jego interfejsie. Interfejs jest zdefiniowany przez wyliczenie metod. Widoczne atrybuty mogą być opakowane przez metody set() i get(). *Wysłanie komunikatu jest utożsamiane z wywołaniem metody. *Aby nadawca mógł przesłać komunikat do odbiorcy, obie strony muszą być połączone jakąś formą kanału komunikacji. Implikuje to istnienie w modelu struktury związku typu asocjacja (agregacja, kompozycja) lub zależność. *W praktycznej implementacji - aby móc przesłać komunikat do obiektu, czyli wywołać jego metodę, musi być on *obiektem globalnym (zależność), *parametrem metody nadawcy (zależność), *atrybutem nadawcy typu wskaźnik, referencja (ascocjacja lub agregacja) *polem nadawcy (kompozycja). ===== Do przeczytania ===== -[[http://home.agh.edu.pl/~pszwed/pub/uml/refman.pdf|UML Reference Manual (1.0) - str 85-92]] -[[http://home.agh.edu.pl/~pszwed/pub/uml/UML-2.0-Tutorial.pdf|Wykład UML 2.0 w języku angielskim str 176-201]] -[[http://chomikuj.pl/kitek04/UML/wyklady/InteractDiagram04,2707287.pdf|Wykład prof. Szmuca gdzieś w sieci...]] ===== Do zrealizowania ===== Zamodeluj **realizację** scenariuszy dwóch przypadków użycia w postaci diagramów klas i diagramów sekwencji. Podczas modelowania realizacji przypadku użycia system nie jest traktowany, jak czarna skrzynka. Należy pokazać, że obiekty są tworzone, wyszukiwane, dodawane, wiązane. Równocześnie, uzupełniaj zbudowany wcześniej diagram struktury klas: *dodaj klasy interfejsu za pomocą których komunikuje się aktor *dodaj klasy odpowiedzialne za koordynację prztwarzania (tzw. logikę biznesową) *dla istniejących klas dodawaj metody i związki. *możesz dodać kontenery obiektów :!: [[http://plantuml.com/starting|PlantUML --narzedzie do generacji diagramów]] z opisów tekstowych [[http://www.plantuml.com/plantuml|otwórz...]] ===== Przykład ===== ==== Diagram klas ==== {{:amo:biblioteka-klasy.png?450|Diagram klas}} Na rysunku pokazano diagram klas. Logicznie obejmuje on trzy grupy klas: *interfejsu: //FormularzWypożyczeń// *przetwarzania: //ObsługaWypozyczeń// *modelu dziedziny oraz przechowywania danych (wszystkie pozostałe zaznaczone na niebiesko) Na diagramie klas zaznaczono metody. **Metody będą komunikatami na diagramie sekwencji.** ==== Diagram sekwencji ==== {{:amo:biblioteka-sekwencja.png?450|Diagram sekwencji}} Diagram pokazuje realizację rejestracji wypożyczenia (ale bez przebiegów alternatywnych). -Aktor (bibliotekarz) wywołuje funkcję formularza wypożyczeń //wypoż_form// -Formularz woła metodę ''wypożycz()'' obiektu klasy //ObsługaWypozyczeń//. Zwróć uwagę, że wołana jest metoda **docelowego** obiektu i jest widoczna jako komunikat -Następnie wyszukiwany jest egzemplarz: ''egz=znajdzEgzemplarz(sygn)'' w katalogu -Dalej szukany jest czytelnik ''znajdzCzytelnika(id_czyt)'' w bazie czytelników -Następnie, tworzone jest wypożyczenie i ustawiane są jegoparametry: ''<>'' -Na końcu następuje zwrócenie wartości ''true'' do formularza, który wywołuje swoją metodę ''reportSuccess()'' [[http://www.plantuml.com/plantuml/png/XP51RhCm48NtFWLB8eKBMFbHz5SzGHTTHXCp9GxOHcEx22zxhcvphz8Gqf6ZgZlxlNaVy_3U1w0GJIzyf-q01AOuWMr6qY6WBG95P9PnrgaJEOEB0oeuAlxhOwzTm0ue2NufgheOfy5TFWzlZemi2C_ev-JvzQfEAg7LM6w-GVeT0l9nmSwCv8x-yX5RaEFAA7LpK6aAMp-rbh6oWCZkLTr1WDwr4jlqBrauD-cvJMY67YYL6UmsAnhCfKVk4H9SDv8BzMa-Oczr1-kg37mVPcWcPl1TLVtGrSeLYd1jd6v_zN4jxihTRidKzH-3qGSOo_kdjjYcpI-LPrKc6BHF9KVaPMTlxSer_jvppVov0qNaiSpdwQfc5qauE0elKIdqljo8FTeccluB|Przykład w PlantUML]]. Aby edytować skopiuj link i wklej w edytorze PlanUML. ==== Modelowanie przebiegów alternatywnych ==== Do modelowania przepływu sterowania w UML 2.0 stosujemy regiony: *''alt'' - pokazuje co najmniej dwie możliwości, odpowiednik if-else *''opt'' - fragment wykonywany opcjonalnie (odpowiednik if) *''loop'' - pętla *''ref'' - wywołanie innego diagramu sekwencji (można odwzorować konstrukcję ''<>'' przypadków użycia) {{:amo:sekwencja-alt.png?450|Przykład regionu alt}} Uwaga: w Visio 2007/2010 do narysowania regionów na diagramach sekwencji można skorzystać z zewnętrznego przybornika : [[http://softwarestencils.com/sysml/index.html|Wykorzystaj zewnętrzny przybornik dla SysML]]