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.