Diagram sekwencji w Netbeans UML.doc

(1323 KB) Pobierz
NetBeans 6.0.1 podręcznik UML

 

 

Diagram INTERAKCJI-DIAGRAM SEKWENCJI (Przebiegu)

Sequence Diagram - to diagram, który uwypukla kolejność komunikatów w czasie; ma postać tabeli, w której obiekty są ułożone wzdłuż osi X a komunikaty wzdłuż osi Y, uporządkowane według czasu ich wysyłania. W diagramach tych kładzie się nacisk na sposób przekazywania komunikatów w miarę ich pojawiania się, diagramy te są szczególnie przydane w kontekście scenariusza przypadków użycia.

 

 

 

 

Zadanie

W systemie wspomagającym zarządzanie miejskiej firmy kurierskiej do wyboru sposobu przewiezienia przesyłki przeprowadzana jest symulacja czasu przewiezienia różnymi środkami transportu (rower, motor, samochód, ciężarówka). W tym celu obiekt klasy Analityk chcąc poznać najlepszy śr. transportu, tworzy obiekt tymczasowy klasy Szacowanie, który po zakończeniu szacowania jest usuwany. Czas potrzebny na przewiezienie zależy od wielkości paczki i odległości (np. nie każdą paczkę można zawieźć rowerem, a do zawiezienia listu nie potrzeba ciężarówki). Narysuj diagram przebiegu dla opisanej sytuacji.
Klasy i metody do wykorzystania:


ŚrodkiTransportu        Ilość() – zwraca ilość śr. transportu
                                     Podaj(nr) – zwraca śr. transportu z pozycji o zadanym numerze
 

Środek                         CzyPrzewiezie(przesyłka) – czy można przewieźć taką przesyłkę tym środkiem transportu
 

PlanMiasta                  Czas(start, koniec, srodek) – zwraca czas potrzebny do osiągnięcia celu zadanym śr. transportu
 

Szacowanie                 Szacowanie(start, koniec, przesylka) – konstruktor, oblicza czasy dla różnych możliwości
                                        PodajNajszybszy() – zwraca najszybszy środek transportu w danym przypadku

 

Rozwiązanie

Na początku musimy wybrać diagram przebiegu w tym celu wybieramy go z okna Create New Diagram i klikamy Finish tak jak na rys 135:





Rysunek 135

 

Pojawia nam się okno edytora z dobrze znaną paletą narządzi dzięki którym stworzymy nasz diagram (widok na rys. 136).

 



Rysunek 136

 

Wczytując się w treść zadania widzimy że na pewno musimy stworzyć obiekt aktora oraz cztery linie życia dla obiektów klasy Szacowanie, SredekTransportu, Srodek oraz PlanMiasta, z czego obiekt klasy Szacowanie zostanie stworzony przez aktora. Zacznijmy więc od stworzenia aktora w tym celu z okna palety wybieramy opcję:. Klikamy LPM na obszarze przeznaczonym do edycji i wyniku otrzymujemy widok:



Rysunek 137

 

Widzimy że aktor został stworzony jednak nie ma on żadnej nazwy ani przydzielonej klasy.  W tym celu klikamy na obszar zaznaczony strzałką na rys. 137 dwa razy LPM i otrzymujemy obszar przygotowany do edycji (jak na rys. 138).

 



Rysunek 138

 

Wpisując nazwę analityk:Analityk i zatwierdzając ja ENTER-em pojawi nam się komunikat (jeżeli wcześniej mieliśmy już stworzoną klasę Analityk nie zobaczymy takiego komunikatu):

 



Rysunek 139

 

Wystarczy tylko zatwierdzić wciskając YES, w tym momencie stworzymy klasę Analityk a w oknie edytora zobaczymy następujący widok:



Rysunek 140

 

Stwórzmy teraz trzy linie życia dla obiektów klasy SrodekTransportu, Srodek oraz PlanMiasta obiektem klasy Szacowanie zajmiemy się za chwilkę. Zacznijmy więc od obiektu pierwszej klasy. W oknie palety wybieramy opcję: i klikamy LPM w dowolnym miejscu na obszarze edytora. Powinniśmy w efekcie otrzymać następujący widok:

 



Rysunek 141

Znowu widzimy puste pole w nazwie obiektu i jego klasie, więc analogicznie do przypadku z aktorem klikamy 2xLPM na ten obszar i wpisujemy srodT:SrodkiTransporu. Zatwierdzamy ENTER-em (ponownie może wyskoczyć komunikat z wiadomością że taka klasa jeszcze nie istnieje, wiemy jak sobie z tym poradzić) i oto stworzyliśmy linię życia obiektu (patrz rys. 142).

 



Rysunek 142

 

Podobnie postępujemy z pozostałymi dwoma liniami życia i  w efekcie otrzymujemy poniższy widok:

 





Rysunek 143

 

Widzimy że utworzyliśmy trzy linie życia. Zauważyć również można że w miejscu oznaczonym na rys. 127 strzałką utworzyły się pomocnicze nazwy z obiektami i ich klasami. Bardzo przydatna opcja w momencie kiedy nasz diagram jest bardzo obszerny i nie widzimy z czym związana jest poszczególna linia życia.

Zacznijmy dodawać teraz do naszego diagramu poszczególne metody zgodnie z kolejnością ich pojawiania się. Zaczynamy więc od wywołania metody Szacowanie(), która jest zarazem konstruktorem klasy Szacowanie i stworzy nam obiekt tej klasy. W tym celu wybieramy z palety opcję . Pojawia nam się dobrze już nam znana różdżka. Najpierw klikamy 1xLPM na linie życia aktora a potem na dowolne miejsce w polu edycji otrzymując w ten sposób rezultat jak na rys. 144

 



Rysunek 144

Nazwijmy nowo powstały obiekt sz:Szacowanie. W ten sposób otrzymamy wynik jak na rys. 145

 



Rysunek 145

Widzimy że połączenie stworzyło sie bez żadnych problemów, jednak przydałoby sie je podpisać żeby było wiadomo jaką metodę wywołujemy w tym momencie, oraz jaki jest stereotyp tej metody w naszym przypadku będzie to <<create>>. Najłatwiej te dwie rzeczy jest zmienić klikając PPM na połączenie i wybierając opcje Properties jak na rys. 146.

 



Rysunek 146

 

Pojawi nam się okno jak poniżej:

 





Rysunek 147

Tutaj w polu Name możemy wybrać nazwę metody, a klikając na … (oznaczone strzałką na rys. 147) przy opcji Stereotypes wpisać stereotyp <<create>>.

W wyniku nasze okno powinno wyglądać następująco:

 



Rysunek 148

 

Klikamy na Close i w wyniku w edytorze widzimy następujący widok:

 



Rysunek 149

 

Nie pokazał nam sie stereotyp, ale to niestety jest jedna z wad Netbeansa. Jeżeli na początku nie widzimy również i nazwy metody Szacowanie(), wtedy należy kliknąć PPM na połączenie i wybrać opcję Labels -> Show Message Name jak na rys. 150.

 



Rysunek 150

 

Teraz wywołamy synchroniczną metodę Ilosc(), która zwróci nam zmienną N. Początek wywołania będzie z obiektu sz koniec w obiekcie srodT. Do tego celu z palety wybieramy opcję:. Pojawia nam się różdżka, najpierw klikamy 1xLPM na linie życia obiektu sz, potem ponownie LPM na linie życia obiektu srodT. W wyniku otrzymujemy:

 



Rysunek 151

 

Widzimy że linie nie są podpisane. Musimy nadać im nazwy , postępujemy tak jak przed chwilą, w wyniku otrzymujemy:

 



Rysunek 152

Teraz chcemy wykonywać metodę w pętli od 1 do wartości N zwróconej przez metodę Ilosc(). W tym celu wybieramy z palety opcję: . I na obszarze edytora zaznaczamy gdzie chcemy umieścić nasz blok. Otrzymamy w ten sposób widok jak na rys. 153.



Rysunek 153

 

Chcemy żeby nasz blok był typu LOOP, zmienić możemy to we właściwościach bloku, klikając PPM na obramowanie chodzimy w opcje Properties i pojawia się okno:

Rysunek 154

W opcjach operator zmieniamy na loop (widoczne na rysunku 155)

 



Rysunek 155

 

Teraz chcielibyśmy dodać opis że pętla wykonuje się od 1 do N. W tym celu klikamy na blok PPM i wybieramy opcję Interaction Opernd -> Edit Interaction Constraint (jak na rys. 156).

 



Rysunek 156

 

W oknie edytora pojawi nam się teraz widok z rys. 157.



Rysunek 157

 

Na rys. 157 widzimy zaznaczone pole [<expression>], klikamy na ten napis 2xLPM i poprawiamy to na i=1..N. Otrzymujemy poniższy widok:

 



Rysunek 158

 

Teraz w analogiczny sposób dodajemy pozostałem metody i blok OPT. Jeżeli wszystko zrobimy prawidłowo powinniśmy otrzymać wynik jak na rys. 159 .

 



Rysunek 159

Warto się tutaj na chwilkę zatrzymać i zwrócić uwagę na metodę czas. Widzimy że jest ona asynchroniczna. Jak to zrobiliśmy, bardzo podobnie do metody synchronicznej tylko trzeba wybrać odpowiednią opcję z palety – mianowicie .  Teraz możemy spokojnie przejść do napisania asynchronicznej metody PodajNajszybszy() oraz destruktora ~Szacowanie() (koniecznie nie zapomnijmy dodać stereotypu <<destroy>> - wiemy jak to zrobić). Po dodaniu dwóch metod musimy zniszczyć linię życia elementu sz. W tym celu wystarczy kliknąć w palecie opcję: i po pojawieniu się różdżki kliknąć LPM na koniec linii życia obiektu sz.  W wyniku otrzymamy widok jak rys 160:

 



Rysunek 160

GRATULACJE!!! Właśnie stworzyłeś (-aś) diagram sekwencji.

 

2

 

...
Zgłoś jeśli naruszono regulamin