UML sekvenční diagramy
Diagram chování, který lidé opravdu kreslí. Účastníci nahoře, čas plynoucí dolů a každá zpráva v pořadí, v jakém nastane - včetně větví, cyklů a volání, která selžou.
15 min čteníUML 2.5.18 z 35
Krátká odpověď
- Sekvenční diagram odpovídá na to, co se děje, v jakém pořadí a mezi kým. Čas plyne dolů a svislá vzdálenost neříká nic o trvání.
- Plná hlava šipky znamená, že volající čeká; otevřená, že pokračuje dál. Právě tento jediný rozdíl je to nejužitečnější, co notace o distribuovaném systému řekne.
- Podmínky a opakování jsou kombinované fragmenty - alt, opt, loop, par, ref - každý jako rámeček s operátorem v levém horním rohu.
- Když je šťastná cesta na papíře, selhání jdou spočítat: u každé zprávy se ptejte, co když odpověď nepřijde, co když přijde chyba a co když přijde dvakrát.
01Co ukazuje#
Sekvenční diagram přesně odpovídá na jednu otázku: co se děje, v jakém pořadí a mezi kým. Je to diagram, který nakreslíte, když se dva lidé neshodnou, která služba volá kterou, nebo když tok prochází čtyřmi systémy a nikdo nemá celou cestu v hlavě.
Všechnu práci udělá rozvržení. Účastníci sedí podél horního okraje. Čas běží dolů - ne zleva doprava a ne v měřítku. Zpráva níž na stránce nastane po zprávě výš na stránce, a to je celé pravidlo čtení.
02Čáry života, aktivace, zprávy#
Tři kusy nábytku, a všechno ostatní je jejich obměna.
Čára života je hlavička nahoře plus přerušovaná svislá čára, která z ní běží dolů. Hlavička pojmenovává účastníka. Může to být název třídy, objekt (: Checkout), aktér nakreslený jako panáček nebo role se stereotypem jako «boundary» či «control». Cokoli si vyberete, buďte konzistentní po celém diagramu.
Aktivační pruh - někdy nazývaný výskyt vykonávání - je tenký obdélník položený na čáře života. Označuje období, během kterého ten účastník něco dělá. Vnořené pruhy znamenají, že účastník zavolal zpět sám sebe. Aktivace jsou v UML nepovinné a vyplatí se je kreslit: dělají zřejmým, že Checkout stále čeká, zatímco brána pracuje.
Zpráva je vodorovná šipka. Její styl říká, o jaký druh volání jde, a to je ta část, kterou se vyplatí zapamatovat.
03Druhy zpráv#
| Prvek | Notace | Co znamená |
|---|---|---|
| Synchronní | Plná čára, vyplněná šipka. Volající je blokován, dokud nedostane odpověď. Běžná metoda nebo blokující HTTP volání. | |
| Asynchronní | Plná čára, otevřená šipka. Volající jde okamžitě dál. Publikování do fronty nebo vyvolání události. | |
| Odpověď | Přerušovaná čára, otevřená šipka. Návrat. Označte ji tím, co se vrací, ne slovem „return“. | |
| Create | Přerušovaná šipka končící na hlavičce čáry života, která začíná někde níž. Označená «create». | |
| Destroy | křížek na konci čáry života | Účastník přestává existovat; jeho čára života končí u křížku. |
Rozdíl mezi vyplněnou a otevřenou šipkou je ten, který má skutečnou váhu. Je to rozdíl mezi „volající je teď blokován“ a „volající šel dál“, a je to ta nejužitečnější věc, kterou sekvenční diagram řekne čtenáři o distribuovaném systému.
04Větvení: kombinované fragmenty#
Skutečné toky mají podmínky i opakování. UML řeší oboje kombinovaným fragmentem: boxem nakresleným kolem série zpráv, s operátorem ve štítku v jeho levém horním rohu.
alt- alternativy. Rozdělený přerušovanou čarou na přihrádky, každá se stráží v hranatých závorkách. Proběhne právě jedna. Tohle je if/else.opt- nepovinné. Jedna přihrádka se stráží; buď proběhne, nebo ne. Tohle je if bez else.loop- opakování. Stráž udává podmínku nebo meze, jako vloop [1..*]neboloop [dokud jsou další stránky].par- paralelně. Přihrádky běží souběžně, bez zaručeného pořadí.ref- odkaz na interakci definovanou na jiném diagramu. Takhle zabráníte tomu, aby jeden sekvenční diagram narostl na tři stránky.critical- oblast, která se nesmí proplést s ničím jiným.
05Rámec, brány a zprávy odnikud#
Všechno výše sedí v boxu, který většina diagramů kreslí a málokdo si ho všimne: rámec interakce, obdélník kolem celého diagramu se štítkem v levém horním rohu, na kterém je sd a název interakce. Vypadá jako výzdoba a není - je to to, co interakci dává jméno, a právě jméno umožňuje ref. Bez něj nemůžete dlouhý tok rozřezat na kusy, což znamená, že každý tok se musí vejít na jednu stránku.
| Prvek | Notace | Co znamená |
|---|---|---|
| Rámec | sd AuthorizePayment | Box kolem diagramu a název interakce v něm. To, na co ukazuje ref na jiném diagramu. |
| Brána | šipka končící na rámci | Zpráva, která překračuje hranici rámce místo toho, aby začínala či končila na čáře života. Je to seznam parametrů interakce: takhle ref cokoli přijímá a vrací. |
| Nalezená zpráva | vyplněný kroužek na ocasu | Přichází od odesílatele, kterého diagram nemodeluje - kliknutí uživatele, plánovač, webhook. Poctivé a mnohem lepší než vymýšlet čáru života pro vnější svět. |
| Ztracená zpráva | vyplněný kroužek na hlavě | Poslaná příjemci, kterého diagram nemodeluje, nebo opravdu nikdy nedorazí. Vzácná na návrhovém diagramu, užitečná na tom, který popisuje selhání. |
| Omezení trvání | { < 200ms } | Omezení ve složených závorkách překlenující dva body na čáře života. Jediný způsob, jak sekvenční diagram umí říct cokoli o čase, když svislá vzdálenost neříká nic. |
| Stavový invariant | { order = PLACED } | Podmínka napsaná na čáře života, která v tom bodě musí platit. Užitečná přímo nad zprávou, jejíž celý důvod existence je právě ta podmínka. |
Seznam fragmentů v předchozí sekci je pracovní sada, ne celá. Existují další čtyři operátory a tři z nich si občas své místo zaslouží: break opustí zbytek obklopujícího fragmentu, když platí jeho stráž, což je přirozený tvar časného návratu při chybě; strict vynutí pořadí svých přihrádek tam, kde je obyčejné seq nechává volné; neg označuje interakci, která nesmí nastat, což je způsob, jak do obrázku zapsat negativní test. assert, ignore a consider patří do formální specifikace a klidně je přeskočte, dokud vás k nim něco nedotlačí.
06Jak z něj vyčíst cesty selhání#
Nejcennější na sekvenčním diagramu není zdokumentování šťastné cesty. Je to to, že když je šťastná cesta jednou na papíře, selhání jde spočítat - a tok přes čtyři systémy jich má mnohem víc, než kdokoli z hlavy odhadne.
Projděte diagram dolů a u každé zprávy si položte tři otázky v pořadí. Odpovědi jsou vaše rozšířené cesty a každá z nich je buď fragment, který máte nakreslit, nebo rozhodnutí, které musí někdo udělat.
- Co když nepřijde odpověď? Každá synchronní zpráva je místo, kde volající může blokovat navždy. Někde existuje hodnota vypršení; pokud ji nikdo v místnosti nezná, tohle je to zjištění. Nakreslete to jako
altse stráží[timeout]a číslo skončí na diagramu, kde se o něm dá polemizovat. - Co když je odpovědí selhání? Odlišné od žádné odpovědi a znepokojivě velkým množstvím produkčního kódu zpracované stejně. Zamítnutá autorizace a mrtvá akviziční banka potřebují jiné ošetření a právě na diagramu se ten rozdíl zviditelní.
- Co když se tohle doručí dvakrát? Ptejte se na to u každé asynchronní zprávy, protože fronty doručují znovu a klienti opakují. Pokud je odpovědí „zákazníkovi se strhne dvakrát“, našli jste požadavek na idempotenci, který v ticketu nebyl.
Pak si diagram přečtěte ještě jednou, pozpátku, kvůli otázce, kterou průchod dopředu nikdy nezachytí: co se už stalo a teď se to musí vrátit zpět? Selhání u čtvrté zprávy nechává účinky prvních tří na místě. To je kompenzační logika a sekvenční diagram je nejlevnějším místem na světě, kde zjistíte, že nějakou potřebujete.
07Kdy takový diagram kreslit#
Sáhněte po něm, když
- Tok prochází několika službami a pořadí volání není zřejmé
- Potřebujete rozhodnout spor o tom, kdo je zodpovědný za volání koho
- Dokumentujete protokol, handshake nebo integraci pro jiný tým
- Zjišťujete, kde jsou režimy selhání - diagram zviditelní chybějící chybové cesty
Sáhněte po něčem jiném, když
- Interakce jsou dva účastníci a tři zprávy - napište prostě tu větu
- Zajímá vás uplynulý čas nebo termíny - použijte časovací diagram
- Otázkou je struktura, ne pořadí - použijte diagram tříd nebo komponent
- Tok je většinou větvící logika - diagram aktivit bude mnohem čitelnější
Sekvenční diagram je také nejúčinnějším UML artefaktem pro revizi návrhu dřív, než se postaví, protože vytlačuje nepříjemné otázky na světlo. Co se stane, když bráně vyprší čas? Kdo to opakuje? Je to volání blokující? Diagram nejde nakreslit, aniž byste na ně odpověděli.
08Časté chyby#
- Každá šipka nakreslená plná a vyplněná. Pokud všechno vypadá synchronně, diagram zahodil své nejužitečnější rozlišení. Na „pošli a zapomeň“ použijte otevřené hlavy.
- Šipky odpovědi na všechno. Odpověď na synchronní volání je často implicitní a jde vynechat. Kreslete ji, když na vrácené hodnotě záleží.
- Míchání úrovní abstrakce. Čára života pro celou platební platformu vedle čáry života pro jednu pomocnou třídu. Vyberte si jednu výšku.
- Žádná chybová cesta. Samotná šťastná cesta je ta méně zajímavá polovina. Právě
alts větví vypršení dělá diagram hodným revize. - Dvacet čar života. Zhruba nad sedm se diagram přestane vejít na obrazovku a začne se spíš rolovat než číst. Rozdělte ho a použijte
ref.
Po jednom řádku na každé
- 01Účastníci podél horního okraje, čas dolů; svislá vzdálenost není trvání.
- 02Vyplněná šipka je synchronní a blokující, otevřená šipka je asynchronní.
- 03Přerušované šipky jsou odpovědi; přerušovaná do snížené hlavičky je «create».
- 04Aktivační pruhy ukazují, kdo je zaneprázdněn, a stojí za tu námahu.
- 05alt, opt, loop, par a ref pokryjí větvení; nikdy nevnořujte hlouběji než dvě úrovně.
- 06Nakreslete cestu selhání - je to ta polovina, která dělá diagram užitečným.
09Časté dotazy#
Co je čára života v sekvenčním diagramu?
Přerušovaná svislá čára pod každým účastníkem, která představuje jeho existenci v čase. Čas plyne dolů, takže zpráva nakreslená níž na stránce nastane později než ta nad ní.
Jaký je rozdíl mezi synchronní a asynchronní zprávou?
Synchronní zpráva má plnou vyplněnou šipku a znamená, že odesílatel čeká na návrat volání. Asynchronní zpráva má otevřenou čárovou šipku a znamená, že odesílatel pokračuje okamžitě. Odpověď na synchronní volání je přerušovaná čára s otevřenou šipkou.
Co znamenají alt, opt, loop a par?
Jsou to kombinované fragmenty: pojmenované rámy obepínající část interakce. alt je větvení se strážemi, opt je jediná větev, která nemusí proběhnout, loop opakuje svůj obsah a par znamená, že se jeho oblasti mohou prokládat. Název stojí v pětiúhelníku vlevo nahoře.
Co je pruh aktivace?
Úzký obdélník kreslený na čáře života, dokud účastník něco dělá, formálně specifikace vykonávání. Začíná, když účastník dostane zprávu, a končí, když se vrátí - a právě proto jsou vnořená volání vidět jako naskládané pruhy.
Kdy použít sekvenční diagram místo komunikačního?
Sekvenční, když jde o pořadí zpráv: protokol, chybová cesta, vypršení času. Komunikační, když jde o strukturu, tedy kdo je s kým spojen. Oba nesou stejnou informaci a liší se jen rozložením.
V této sérii
- 01Co je UML?
- 02Symboly UML
- 03Výběr diagramu
- 04Diagramy tříd
- 05Příklady diagramů tříd
- 06Jak nakreslit diagram tříd
- 07Symboly diagramu tříd
- 08Sekvenční diagramy
- 09Příklady sekvenčních diagramů
- 10Jak nakreslit sekvenční diagram
- 11Diagramy případů užití
- 12Příklady případů užití
- 13Diagramy aktivit
- 14Příklady aktivit
- 15Stavové diagramy
- 16Příklady stavových diagramů
- 17Diagramy komponent
- 18Příklady komponent
- 19Kreslení diagramu komponent
- 20Symboly komponent
- 21Diagramy nasazení
- 22Příklady nasazení
- 23Diagramy objektů
- 24Diagramy balíků
- 25Diagramy složené struktury
- 26Komunikační diagramy
- 27Sekvenční vs komunikační
- 28Časové diagramy
- 29Diagramy přehledu interakcí
- 30Diagramy profilů
- 31UML pomocí AI
- 32Příklad e-shopu
- 33Příklad banky
- 34Příklad mikroslužeb
- 35Příklad AWS
Související články
Základy
Diagramy chování
Diagramy chování
Diagramy struktury
Základy
Diagramy chování