Sequence diagram - sekvenční diagram

Základy

Sekvenční diagram spolu s diagramem komunikací (communication diagram), diagramem přehledu interakcí (interaction overview diagram) a diagramem časování (timing diagram) patří do skupiny interakčních diagramů (interaction diagrams).
Přitom sekvenční d. a d. komunikací jsou téměř izomorfní - tj. dají se převádět z jednoho tvaru na druhý (často i automatizovaně) (to však platí jen pro jednoduché sekvenční diagramy, které nepoužívají struktorované mechanismy jako interaction use a combined fragment - vysvětleny níže v sekci další podrobnosti).
Použití sekvenčního diagramu bývá vhodnější v těch případech, kde jsou důležité časové souvislosti interakcí, ovšem nevidíme v něm zobrazené vztahy mezi objekty.

Objekty si mohou posílat zprávy. Sekvenční diagram zobrazuje jejich časovou posloupnost.

Příklad sekvenčního diagramu

jednoduchý sekvenční diagram, 11 kB
jednoduchý sekvenční diagram (klikni pro otevření v novém okně)

Jedná se o jednoduchý sekvenční diagram. Časová osa je svislá (čas běží zhora dolů), na vodorovné ose jsou rozmístěny objekty :

  • lifeline (čára života) reprezentuje participanta v interakci:
    • Participant je většinou konkrétní objekt.
    • Lifeline také ukazuje, kdy participant žije - v tomto diagramu všechny objekty existovaly už před posláním první zprávy, a dále existují po dokončení sekvenčního diagramu (resp. nevíme, kdy který objekt zanikne nebo nás to v tuto chvíli nezajímá)
    • execution specification, focus of control (aktivita objektu) vyjádřená zdvojeným úsekem (obdélníkem) na lifeline : ukazuje periodu, kdy je který objekt aktivní, neboli kdy provádí nějakou činnost, nějak se chová, včetně "podřízeného" chování dalších objektů (tj. u aktivního objektu vyznačuje celý jeho život, u pasivního objektu časový interval, kdy je prováděna operace objektu, včetně čekání na návrat ze zavolané operace; v programátorském světě je to analogické době, po kterou je určitá hodnota ve "stack" - v zásobníku) by )
  • zpráva :
    • v našem příkladě máme jen jednoduché obyčejné zprávy : u nich se zpráva zobrazuje plnou čárou a plnou šipkou a v našem příkladu je znázorněno např. ohledně zprávy zpravaA(x) : objekt obj1 posílá (tedy je to sender) zprávu zpravaA s jedním argumentem, který je je naplněn hodnotou atributu x, objektu obj2 (to je tedy receiver)
    • zobrazení návratové zprávy není povinné (vždy si ji lze "domyslet"), ale může přidat na přehlednosti : zobrazuje se šipkou s čárkovnou čárou
    • návratová zpráva může, ale nemusí vracet hodnotu : po poslání zpravaA(x) a po té, co obj2 dokončí svou činnost, tak vrátí zpět návratovou hodnotu 123, kterou si obj1 převezme do svého atributu y
V diagramu je znázorněna tato sekvence :
  1. objekt obj1 je hned na počátku aktivován (má focus) a poslal zprávu zpravaA s parametrem x objektu obj2 : obj1 přeruší zpracování (ztratí focus a předá řízení obj2) a čeká, až obj2 odpoví na zpravaA(x)
  2. obj2 získává focus a spustí vlastní metodu
  3. v jistém bodě zpracování posílá obj2 zprávu zpravaB do obj3 - obj2 započne čekat na odpověď od obj3
  4. obj3 získává focus (a spouští vlastní metodu)
  5. obj3 dokončí své zpracování, pak vrátí peška (předá řízení zpět) do obj2
  6. obj2 pokračuje v práci, a posílá další zrávu do obj3
  7. obj3 dokončí zpracování, tak vrátí řízení zpět do obj2
  8. obj2 pokračuje v práci a až skončí, tak vrátí řízení do obj1, přitom ale vrátí návratový návratovou hodnotu 123
  9. obj1 si převezme návratovou hodnotu do atributu y

Další podrobnosti

V UML 2.0 byly přidány velmi silné strukturované řídící konstrukce: combined fragment a interaction use. Tímto je umožněno skládání sekvenčních diagramů z jednotlivých bloků a i z jiných sekvenčních diagramů. Tento princip je pak použit i v jiných typech diagramů (interaction overview).

Pokud je to žádoucí, mohou být obě osy (svislá a vodorovná) přehozeny.

Pořadí participantů na vodorovné ose nemá žádný věcný význam (je vhodné seřadit je tak, aby byl diagram co nejpřehlednější).

Obecně časová osa nemá měřítko - tj. na základě délky obdélníku a vdálenosti mezi jednotlivými zprávami se nedá usuzovat na délky času ani na to, který čas bude delší či kratší než jiný čas. Lze jen vyčíst, která zpráva je mezi dvěmi (případně více) komunikujícími objekty poslána dříve a která později.
Pokud je ovšem v sekvenčním diagramu více aktivních objektů, které mezi sebou nekomunikují, tak jsou irelevantní relativní poměry délek jejich focusů.
Pokud však modelujeme systém, kde čas potřebujeme specifikovat přesněji (např. real-time systém), tak můžeme časové ose měřítko zavést.

Jméno participanta má syntaxi :
jméno [selector] : typ dekompozice
kde

  • jméno : jméno individuálního participanta
  • [selector] : výraz identifikující určitý objekt, pokud má multiplicitu > 1
  • typ : typ objektu (třída)
  • dekompozice : pokud je lifeline dekomponována v jiné interakci, zapíše se to pomocí ref jméno-interakce
  • [selector] i dekompozice nejsou povinné
  • jméno i typ nejsou povinné, ale alespoň jeden z nich musí být uveden
  • pokud je použit typ, musí být uvedena i dvojtečka

Jméno zprávy (message) má syntaxi :
jméno-opeace-nebo-signálu(argumenty)

přitom návratová zpráva může mít (nepovinně) uvedeny i přiřazení návratové hodnoty do atributu a návratovou hodnotu, takže celá syntaxe pak je :
atribut=jméno-opeace-nebo-signálu(argumenty):návratová-hodnota
kde

  • jméno-opeace-nebo-signálu : jméno operace, která je spuštěna ve volaném objektu, nebo jméno signálu, který je volanému objektu poslán
  • atribut : do něj si převezme volající objekt návratovou hodnotu z volaného objektu
  • návratová-hodnota : prostě návratová hodnota
  • (argumenty) : nepovinný seznam argumentů oddělených čárkou, jejich syntaxe je :
    jméno-parametru= hodnota-argumentu
    kde :
    • jméno-parametru= : jméno parametru pro volaný objekt; toto nemusí být uvedeno - může být uvedena jen hodnota argumentu
    • hodnota-argumentu : jedna hodnota jednoho argumentu - může to být atribut volajícího objektu, může to být přímo hodnota, ....
    • pokud jsou uvedeny i jména parametru, může kterýkoliv z nich chybět (tzn. jakákoliv jeho hodnota je přípustná), pokud jsou uvedeny jen hodnoty, tak chybějící hodnota se musí uvést pomocí "-" (pomlčka)

zvláštní název zprávy je * : vyjadřuje, že přípustná je jakákoliv zpráva

příklady zpráv :

  • tiskni
  • vynasob(a, b)
  • vynasob(a, b):soucin
  • vypocet=vynasob(a, b):soucin
  • spocitej(1, b, c)
  • spocitej(x=1, z=c)
  • spocitej(1, -, c)
  • *

Následující sekvenční diagram ukazuje některé další konstrukce :

složitější sekvenční diagram, 19 kB
další konstrukce v sekvenčním diagramu ( klikni pro zvětšení v novém okně)

V diagramu jsou ukázány další elementy a notace sekvenčního diagramu:

  • frame (rám) : celý sekvenční diagram je vlastně ohraničen rámem (obdélníkem), kde v levém horním rohu je malý pětiúhleník (pentagon - obdélník s "ohnutým" rohem), v němž je uvedeno sd název-sekvenčního-diagramu (parametr, parametr, ....) (parametry nejsou povinné)
  • asynchronní zpráva je vyjádřena (prostou) šipkou: po zaslání této zprávy klient pokračuje dále ve zpracování (nemusí čekat, až server vrátí focus zpět), vlastně dojde k vytvoření nového vlákna;
    zde tedy po zprávě nalej nečeká objekt třídy Host na výsledek zracování objektu třídy Číšník, ale ihned po odeslání zprávy nalej pokračuje v práci - tj. od tohoto bodu paralelně pracuje jak volaný objekt, tak i volající objekt
  • combined fragment : konstrukce vložená do interakce - do sekvenčního diagramu (nebo do jiného fragmentu). Je zobrazena jako obdélník, v levém horním rohu má pětiúhleník s klíčovým slovem (keyword). Má jeden či více operandů zobrazených jako subfragmenty - jako části fragmentu oddělené vodorovnou čárkovanou čárou. Pětiúhelník může obsahovat více klíčových slov pro indikaci dalších, do fragmentu vložených fragmentů.
    V diagramu je obsažen fragment loop : má jeden subfragment, který obashuje guard (zde : [má peníze]), tzn. subfragment je tak dlouho prováděn, dokud host má peníze (dokud je splněn logický výraz obsažený v guardu). U loop může být uveden min. počet opakování, nebo i max.počet opakování (např. pro 1-4 piva : loop(1,4); pokud si chce dát právě dvě piva : loop(2) ).
    Dále je zde fragment alt : má dva (či více) operandů (tj. dva či více subragmentů), každý s vlastním guardem. Podle toho, který guard je splněn, tak je proveden odpovídající subragment. Zde pokud je pravda, že host chce desítku, tak číšník vytvoří objekt desítka (který je třídy Pivo); pokud však je pravda, že host chce dvanáctku, tak číšník vytvoří objekt dvanáctka. Jeden z guardů může mít podmínku else. Pokud je splněno více guardů, volba je nedeterministická.
    Existují i další klíová slova pro další typy kombinovaných fragmentů, ta jsou prozatím uvedena v sekci náměty na další stufium
  • create : zvláštní typ komunikace, který vytváří novou instanci
  • part decoposition, decomposed lifeline : lifeline je dekomponována v jiné interakci - zde HazardníHra je dekomponována v samostatném diagramu Průběh hry, v něm samozřejmě budou obsaženy i další lifelines s dalšími participanty.
  • interaction use : reference na jinou interakci - zde část sekvenčního diagramu pro komunikace ohledně jídla je rozkreslena v samostatném sekvenčním diagramu, ve kterém budou participanty opět host a číšník, ale mohou v něm být přidány i další lifelines s dalšími participanty

Náměty na další studium

  • další combined fragment
    • assert :asertion
    • break
    • consider
    • critical : critical region, kritická sekce
    • ignore
    • neg : negative, neplatný průběh, nemůže nastat
    • opt : option, volitelnost
    • par : parallel, souběh
    • seq : weak sequencing
    • strict : strict sequencing
  • element gate
  • element continuation
  • element general ordering
  • coregion area
  • local attribute : lokální atribut
  • kompletní syntaxe jména interaction use
  • lost message, found message
  • inner connectable element
  • state invariant
  • symbol stop : zánik objektu
  • duration constraint, duration observation, time constraint, time observation
  • zprávy, jejichž přenos trvá "dlouho"
  • aktivní objekty
  • volání sebe sama (self delegation)
  • rekurze
  • participant s názvem self