Dziś przygotowałem dla Was artykuł o Diagramie Sekwencji. Dowiecie się z niego jakie korzyści płyną z jego używania. Jestem przekonany, że ten diagram spodoba się wszystkim programistkom i programistom.
Inne artykułu na blogu traktujące o UML:
- - Diagram Sekwencji w UML (przykłady w JavaScript)
- - Diagram Klas w UML (przykłady w JavaScript)
- - Po co mi UML?
Po co stosować Diagram Sekwencji?
Diagram Sekwencji, który jest podtypem Diagramu Interakcji, służy do opisania ścieżki algorytmu, bez zagłębiania się w detale. Wykorzystywany, aby zamodelować proces lub ścieżkę algorytmu w sposób przystępny i ustandaryzowany.
Diagram Sekwencji nie zawiera szczegółów implementacyjnych, więc idealnie służy do projektowania.
Dodatkowym plusem, który jest cechą wszystkich diagramów, jest oczywiście to, że diagramy są agnostyczne względem języka oraz technologii.
Co to jest UML?
Jeśli nie wiesz, to zapraszam do artykułu nt. UML na tym blogu.
Diagram Sekwencji w Specyfikacji UML
Wersja aktualna na dzień pisania artykułu to v2.5.1. Opublikowana w grudniu 2017.
Do pobrania w wersji PDF: https://www.omg.org/spec/UML/2.5.1/PDF
Rozdział, który nas interesuje to “17.8 Sequence Diagrams” (na stronie 595).
Notacja
Lista elementów, które są używane na Diagramach Sekwencji wraz ze znaczeniami:
Linia życia - prostokąt z pionową linią
- Prostokąt:
- Reprezentuje
encję
z opisywanego procesu - W prostokącie możemy użyć nazwę klasy jako element dziedziny problemu
- Ale również możemy użyć nazwy obiektu, stworzonego za pomocą klasy
- Reprezentuje
- Pionowa linia:
- Reprezentuje czas życia opisywanego elementu
- Kolejne linie życia tworzymy TYLKO po prawej stronie w kolejności użycia
- Atomowa operacja
- Jeśli chcemy zaznaczyć, czas trwania obsługi komunikatu możemy stworzyć na linii życia dodatkowy prostokąt
-
Zakończenie linii życia - Wielki znak iks użyty na linii życia informuje, że czas życia danej
encji
został właśnie zakończonyNa diagramie powyżej można zobaczyć wizualizację zakończenia linii życia.
Komunikat - pozioma strzałka z podpisem
- Podpis:
- Zawiera nazwę czynności uruchomionej na
encji
, do której strzałka kieruje.
- Zawiera nazwę czynności uruchomionej na
- Strzałka:
- Mamy do dyspozycji kilka typów, ale najpopularniejsze z nich to:
-
- linia ciągła połączona z wypełnionym grotem
- oznacza synchroniczne wywołanie
-
- linia ciągła połączona z pustym grotem
- oznacza asynchroniczne wywołanie
-
- linia przerywana połączona z pełnym grotem
- oznacza odpowiedź
-
- Mamy do dyspozycji kilka typów, ale najpopularniejsze z nich to:
- Komunikat zwrotny
- Jeśli chcemy zaznaczyć, że encja coś procesuje, możemy utworzyć wiadomość w której nadawca i odbiorca będę pochodzić z tej samej linii życia
Fragment - prostokąt, który zawiera pewien zakres czynności
- Tworzy obszar z warunkiem, pętlą lub jednoczesnym uruchomieniem więcej niż jednej czynności
- Rozróżniamy kilka typów fragmentów:
-
- alt
- Alternatywa: tylko ten, którego warunek jest prawdziwy, zostanie wykonany (możemy zdefiniować blok
else
)
-
- opt
- Opcjonalnie: fragment jest wykonywany tylko wtedy, gdy podany warunek jest prawdziwy (taki
alt
, ale bezelse
`)
-
- par
- Równolegle: każdy fragment jest uruchamiany równolegle
-
- loop
- Pętla: fragment może być wykonywany wielokrotnie, a warunek wskazuje podstawę iteracji
-
- region
- Obszar krytyczny: fragment może być wykonywany tylko przez jeden wątek jednocześnie
-
- neg
- Negatywny: fragment wykazuje nieprawidłową interakcję
-
- ref
- Odniesienie: odnosi się do interakcji zdefiniowanej na innym diagramie. Ramka jest rysowana tak, aby obejmowała linie życia zaangażowane w interakcję. Można zdefiniować parametry i wartość zwracaną
-
- sd
- Diagram sekwencji: używany do otaczania całego diagramu sekwencji.
-
Jakiego typu informacje zamieszczamy na Diagramie Sekwencji?
Umieszczamy:
- Nazwy elementów dziedziny problemu oraz ich linie życia
- Komunikaty wysyłane między liniami życia (wywołania i odpowiedzi)
- Obszary, które zmieniają przepływ algorytmu, tj. pętle, warunki
Opcjonalnie umieszczamy:
- Tworząc komunikat, możemy dodać podpis nad strzałką będący nazwą funkcji wraz z listą argumentów, jakie do niej przekazujemy
Nie umieszczamy:
- Implementacji funkcji
Przykład
Chcemy zbudować listę zadań (to będzie nasza domena). Jakie elementy będę występować w domenie problemu?
- Lista zadań
- Zadanie
Przykładowy kod (stworzony tylko na potrzeby lepszego zrozumienia przykładu):
class TaskList { /* logic */ }
class Task { /* logic */ }
function main() {
new TaskList();
}
main();
Zatem, jak będzie wyglądał Diagram Sekwencji? Czy możemy zaplanować jak będzie wyglądała komunikacja między elementami tej domeny? Tak!
A teraz jak to wygląda w praktyce? Poniżej możecie zobaczyć listę akcji zdefiniowanych w prostokątach wraz z ich implementacją na GitHubie:
W jakich narzędziach tworzymy Diagramy Sekwencji?
Konwertery kodu na diagram:
- (🌟 Polecam) https://websequencediagrams.com/ - [Przykłady]
- https://sequencediagram.org/
- https://planttext.com/
- https://bramp.github.io/js-sequence-diagrams/
- UWAGA: to narzędzie używa delikatnie innej składni niż poprzednie
- [Wspierana składnia]
Edytory WYSIWYG, tj. budowanie diagramów za pomocą pointera:
Narzędzie VSCode Sequence Diagrams - plugin do VSC
Ten plugin do Visual Studio Code to ciekawa alternatywa do wcześniej wymienionych narzędzi, która pozwala renderować Diagram Sekwencji wewnątrz edytora.
Ważne!
Plugin VSCode Sequence Diagrams korzysta z js-sequence-diagrams. dzięki czemu musimy korzystać z tej wspieranej składni.
Książki
Lista książek, z których można dowiedzieć się więcej na temat Diagramu Sekwencji:
- 🇵🇱 (ebook) “Skrzynka narzędziowa architekta oprogramowania” Michael Keeling
- Data wydania ebooka: 2021-08-17
- 🇵🇱 (ebook) “Modelowanie systemów informatycznych w języku UML 2.1” Andrzej Stasiak, Włodzimierz Dąbrowski, Michał Wolski
- Data wydania ebooka: 2020-06-29
- 🇵🇱 (ebook) “Zostań architektem oprogramowania” Michael Keeling
- Data wydania ebooka: 2019-12-03
Filmy
Lista filmów, z których można dowiedzieć się na temat Diagramu Sekwencji:
- 🇺🇸 How to Make a UML Sequence Diagram
- 🇵🇱 Po co używamy diagramu sekwencji
- 🇺🇸 (Udacity) UML Behavioral Diagrams: Sequence - Georgia Tech - Software Development Process
Słownik trudnych słówek
-
- dziedzina problemu
- obszar, w którym poruszana jest dyskusja
Przykład: proces logowania użytkownika w serwisie
-
- encja
- dowolny element z dziedziny problemu
Przykład: użytkownik w procesie logowania
-
- algorytm
- pewien ciąg zdarzeń następujących po sobie.
Zdarzenie uruchomione w zdefiniowany sposób realizują jakąś funkcjonalność.
Przykład:
- pobieranie danych z formularza,
- budowanie obiektu, który posłuży jako payload w żądania do serwera,
- wysłanie zapytania HTTP
- parsowanie odpowiedzi
- obsługa odpowiedzi
- prezentacja komunikatu błędu
- przekierowane na stronę główną z informacją o pomyślnym zalogowaniu
Zadania na przećwiczenie
-
- Zadanie 1.
- Za pomocą Diagramu Sekwencji, opisz proces kupowania jabłek w sklepie spożywczym.
-
- Zadanie 2.
- Za pomocą Diagramu Sekwencji, opisz proces uwierzytelniania użytkownika.
Bibliografia
- https://www.omg.org/spec/UML/2.5.1/PDF
- Specyfikacja UML
- https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-sequence-diagram/
- Świetnie przedstawiony opis Diagramu Sekwencji
- https://pl.wikipedia.org/wiki/Unified_Modeling_Language
- Strona o UML na polskiej Wikipedii
- https://www.uml-diagrams.org/sequence-diagrams.html
- Przyjemna dokumentacja Diagramu Sekwencji
- https://marketplace.visualstudio.com/items?itemName=AleksandarDev.vscode-sequence-diagrams
- 🔨
VSCode Sequence Diagrams
- plugin do Visual Studio Code
- 🔨