Diagram ukazuje komunikaci mezi dvěma účastníky - instancí třídy B (anonymní) a objektem A třídy A.
sequenceDiagram participant B as :Třída B participant A as Objekt A:Třída A B ->> A: asynch. zpráva() B ->>+ A: synch. zpráva() A -->>- B:
Jsou zde znázorněny dva typy zasílání zpráv:
- asynchronní zpráva - odesílatel nečeká na odpověď a pokračuje dál
- synchronní zpráva - odesílatel čeká na návrat řízení zpět (znázorněno přerušovanou šipkou zpět)
- :Třída B je nepojmenovaný objekt, Objekt A:Třída A má jméno Objekt A
- bez dvojtečky by to byla statická třída
Návratová hodnota
Existují 2 různé způsoby, jak znázornit návratovou hodnotu v sekvenčním diagramu.
sequenceDiagram participant A as :Třída A participant B as :Třída B A->>B: vysledek= zprava() A->>B: zprava() B-->>A: vysledek
- První způsob zachytí návratovou hodnotu přímo v zápisu volání zprávy ve formátu
vysledek= zprava(). - Druhý způsob odešle zprávu
zprava()a návratová hodnotavysledekje vrácena samostatnou přerušovanou šipkou zpět volajícímu.- přehlednější je ten druhý způsob
Vytvoření a zrušení objektu
Sekvenční diagram ukazuje dva klíčové jevy v životním cyklu objektu:
- Vytvoření objektu - znázorněno stereotypem
«create», kdy instance Třídy A dynamicky vytvoří nový objekt Třídy B během běhu programu - Zrušení objektu - znázorněno stereotypem
«destroy», po němž životní linie objektu končí symbolem ×
sequenceDiagram participant A as :Třída A participant B as Nový objekt:Třída B A->>+B: «create» A->>B: zpráva() A->>B: «destroy» note over B: ×
Sekvenční diagram - speciální typy zpráv
Slide popisuje dva speciální koncepty sekvenčního diagramu:
- Nalezená zpráva (Found Message/Endpoint) - zpráva, jejíž odesílatel není v diagramu znám, znázorňuje se plným kruhem na začátku šipky
- Zaslání zprávy sám sobě (Self Message) - objekt volá vlastní metodu, šipka se vrací zpět na stejný životní pruh
Příklad ukazuje třídu TřídaB, kde metodaB1() interně volá this.metodaB2() a uloží výsledek - jde tedy o Self Message.
sequenceDiagram participant B as :TřídaB note over B: Found Message (zdroj neznámý) B->>B: metodaB1() activate B B->>B: vysledek = metodaB2() deactivate B
Odpovídající kód třídy:
class TřídaB {
public void metodaB1() {
vysledek = this.metodaB2();
}
public int metodaB2() {...}
}- “něco” zavolalo metoduB1 - ukazuje se reakce :Třídy B
- volání metody sám na sobě
Sekvenční diagram - fragmenty
Fragment umožňuje zachytit podmíněné chování a opakování v sekvenčním diagramu. Rozlišujeme tyto druhy fragmentů:
- větvení (alt) - podmíněné větvení podle hodnoty podmínky
- cyklus (loop) - opakování zprávy dokud platí podmínka
- další typy jako opt (volitelné) a par (paralelní)
Iterace přes prvky kolekce se zapisuje jako loop fragment s podmínkou ve tvaru for cyklu, např. for i=0; i<size(objekty); i++, přičemž zpráva se odesílá na konkrétní prvek kolekce označený indexem.
sequenceDiagram participant B as :Třída B participant A as Objekt A:Třída A participant C as Objekty[i] : Třída C alt [a>b] B->>A: zpráva A() else [a<=b] B->>A: zpráva B() end loop [a<b] B->>A: zpráva A() end loop iterace přes prvky kolekce [for i=0, i<size, i++] B->>C: zpráva C() end
- pro větvení se používá ALT, pokud je tam i else větev, pokud je tam jenom if, tak mohu použít OPT
Ukázka: sekvenční diagram VypujceniVytisku
Diagram zachycuje průběh výpůjčky výtisku mezi objekty systému.
sequenceDiagram participant vytisk as vytisk :VytiskDTO participant stav as :StavVolny participant kniha as knihaVypujcek :KnihaVypujcek participant vypujcka as vypujcka vytisk->>stav: lZpracuj(Ctenar, VytiskDTO) stav->>kniha: zapisVypujcku(VytiskDTO, Ctenar) kniha->>vypujcka: new() kniha->>vypujcka: setVytisk(VytiskDTO) kniha->>vypujcka: setCtenar(Ctenar) kniha->>vypujcka: setVypujcenaDo(Date) Note over vypujcka: objekt zaniká (×) kniha-->>stav: návrat stav-->>vytisk: setStav(new StavVypujceny())
Průběh scénáře:
- Objekt
vytiskvolá na stavu metodulZpracujs parametry čtenáře a výtisku - Stav zavolá na knize výpůjček metodu
zapisVypujcku - Kniha vytvoří nový objekt
vypujckaa nastaví mu výtisk, čtenáře a datum vypůjčení do - Po dokončení se vrátí řízení zpět a stav výtisku se změní na
StavVypujceny