Sequenzdiagramme

Inhalt

Sequenzdiagramme starten und enden mit den Tags: @start-seqd und @end-seqd. Direkt nach dem Starttag folgt in Anführungszeichen der Titel des Sequenzdiagramms. An zweiter Stelle folgt das default package "RootElement" das mit rootPackage deklariert wird.

@start-seqd "MeinTitel"
    rootPackage RootElement
@end-seqd

Reihenfolge

Die Reihenfolge innterhalb eines Sequenzdiagrammes ist fest vorgegeben: Zuerst werden die beteiligten Teilnehmer definiert, gefolgt von den Nachrichten in chronologischer Reihenfolge.

Teilnehmer

Teilnehmer werden mit dem Schlüsselwort act definiert. Auf das Schlüsselwort folgt ein Bezeichner, gefolgt von einem Doppelpunkt und der Angabe des Typs.

act Name:Teilnehmer

Der Bezeichner muss in Anführungszeichen stehen, sofern Leerzeichen oder Umlaute verwendet werden. In diesem Fall ist auch ein Alias mit dem Schlüsselwort as anzugeben, wodurch das Element im Diagramm eindeutig referenziert werden kann.

act "Langer Name":Teilnehmer as lang

Ein Alias muss ebenfalls angegeben werden, wenn anonyme Teilnehmer definiert werden.

act:Teilnehmer as teilnehmer

Teilnehmer können durch Stereotype näher spezialisiert sein. Diese Form der Spezialisierung wird mit dem Schlüsselwort role und dem entsprechenden Attribut in eckigen Klammern angegeben.

act Giraffe role[tier]
act Besucher role[mensch]

Weitere Stereotypen sind Kontrolleinheiten (controls), Entitäten (entity) und Datenbanken.

Es kann auch angegeben werden, dass ein Teilnehmer erst erzeugt werden soll, wenn eine Nachricht an diesen geschickt wird. Dieses Verhalten wird bei der Definition des Teilnehmers mit dem Schlüsselwort def für defer angegeben.

def act : Teilnehmer as aufgeschobenerTeilnehmer

Nachrichten

Synchrone Nachrichten werden mit dem Schlüsselwort sync, asynchrone mit dem Schlüsselwort async und Antwortnachrichten mit dem Schlüsselwort reply eingeleitet. Auf das Schlüsselwort folgt der Bezeichner der Nachricht und darauf folgen, in runden Klammern, die beteiligten Teilnehmer.

sync "synchrone Nachricht von Bob an Alice" (Bob,Alice)
async "asynchrone Nachricht von Bob an Alice" (Bob,Alice)
reply "gestrichelte Linie als Antwortnachricht" (Bob,Alice)

Reflexive Nachrichten werden analog dargestellt, nur die Operanden sind identisch.

sync "synchrone Nachricht von Alice an Alice" (Alice,Alice)

Darüber hinaus gibt es verlorene und gefundene Nachrichten. Diese werden mit dem Schlüsselwort lost bzw. found näher beschrieben. Je nachdem ob gefunden oder verloren, wird anschließend der anonyme Teilnehmer mit einem Unterstrich angegeben.

found sync "Nachricht ohne Sender an Alice, gefundene Nachricht" (_,Alice)
lost sync "Nachricht von Alice ohne Empfänger, verlorene Nachricht" (Alice,_)

Zeitbedingungen

Für Nachrichten können verschiedene Zeitbedingungen definiert werden, was mit dem Schlüsselwort time gefolgt von der Bedingung in eckigen Klammern angegeben wird.

sync "Dauer der Nachricht 2 min" (Alice,Bob) time[d=2min]
sync "Maximale Dauer der Nachricht 1 sec" (Alice,Bob) time[max=1sec]
async "Senden, Empfangen explizit angegeben" (Alice, Bob) time[t=now, t+1sec]

Die Angabe der Zeitbedingung wird als Attribut hinter die eigentliche Nachricht geschrieben. Einzige Ausnahme bildet die "Rufen/Anschreien Bedingung", bei der die Zeitbedingung angibt, welche Zeit maximal zwischen mehreren Nachrichten vergehen kann. Hier wird die Zeitbedingung vor einen Block gestellt, welcher die relevanten Nachrichten umfasst.

time[max=5min] {
sync rufen (Alice,Bob)
sync anschreien (Alice,Bob)
}

Argumente von Nachrichten

Nachrichten können neben einem Bezeichner auch Argumente haben. Dies entspricht den Funktionsparametern in der Programmierung. In der UML4ALL Syntax werden diese Argumente als String hinter dem Nachrichtenbezeichner angegeben.

sync "keine Argumente" (Alice, Bob)
sync "Einfache Werte(10,8)" (Alice, Bob)
sync "Variablenzuweisung(var1=10,var22=8)" (Alice, Bob)
sync "Wert nicht spezifiziert(Alter=-)" (Alice, Bob)
sync "Argumente nicht spezifiert(-)" (Alice, Bob)

Die Angabe von Rückgabewerten erfolgt analog zu der von Funktionsparametern. Im Prinzip gibt es keine vorgegebene Semantik. Es wird jedoch folgende UML-Schreibweise empfohlen:

NameNachricht:Rueckgabewert
reply "Konkrete Werte(10,8):18" (Alice, Bob)
reply "Variablen Zuweisung(10,8):sum" (Alice, Bob)
reply "Wert und Variablen Zuweisung(10,8,out sum:18)" (Alice,Bob)
reply "Wert Zuweisung(-,-):18" (Alice,Bob)

Lebenslinien

Teilnehmer werden typischerweise erst aktiv wenn diese auch tatsächlich benötigt werden. Aus diesem Grund werden bei UML4ALL die Ausführungsbalken (auch Aktivierungsbalken genannt) bei Lebenslinien nicht explizit modelliert. Diese Ausführungsbalken sind in erster Linie ein visuelles Konzept welches kennzeichnet, wann ein Teilnehmer aktiv ist und wann nicht. Dies wird implizit durch die Nummerierung der Nachrichten modelliert

Einzige Ausnahme bildet das Schlüsselwort dest für destroy, mit dem man die Zerstörung der Lebenslinie erreichen kann. Die Zerstörung wird dabei durch ein "X" am Ende der Lebenslinie angezeigt.

act Alice:Besucher
dest Alice

Zusammengesetzte Fragmente

Ein Fragment wird mit einem Schlüsselwort eingeleitet. Danach folgt ein Block in geschweiften Klammern, welcher die zugehörigen Nachrichten gruppiert. Je nach Typ des Fragmentes werden weitere Beschriftungen und Attribute angegeben.

Fragmente können individuell definiert werden, es gibt aber auch bereits vordefinierte Fragmente. Im Folgenden wird die Notation für einige vordefinierte Fragmente vorgestellt.

Alternative Ausführung - alt/else

Bei alternativen Ausführungen werden die Schlüsselwortörter alt und else verwendet um die alternativen Nachrichten zu modellieren. Nach dem Schlüsselwort alt folgt in eckigen Klammern die Angabe der Bedingung.

@start-seqd"Beispiel ALT"
rootPackage RootElement

act Besucher:Besucher
act Pfleger:Pfleger

sync "Hallo" (Besucher,Pfleger)

alt[Zoo==offen]{
    sync "Herzlich Willkommen" (Pfleger,Besucher)
} else {
    sync "Leider geschlossen" (Pfleger,Besucher)
}
@end-seqd

Optionale Ausführung - opt

Bei optionalen Ausführungen wird das Schlüsselwort opt angegeben, gefolgt von der Angabe der Bedingung in eckigen Klammern. Eine alternative Ausführung über else ist hier nicht erlaubt.