Sequenzdiagramm

Beim Sequenzdiagramm steht der zeitliche Verlauf der Nachrichten im Vordergrund. Die Reihenfolge der Nachrichten entspricht ihrer horizontalen Position im Diagramm. Es wird festgelegt, wann ein Objekt erstellt wird und wann Nachrichten zu welchem Objekt gesendet werden.

Die beteiligten Objekte werden durch ein Rechteck und eine senkrechte gestrichelte Linie repräsentiert. Beides zusammen wird Lebenslinie (Lifeline) genannt. Nachrichten (Messages) werden durch Pfeile zwischen den Lebenslinien dargestellt. Die Zeit verläuft von oben nach unten. Der zeitliche Verlauf der Nachrichten wird dadurch hervorgehoben.

Abb. 53: Einfaches Beispiel eines Sequenzdiagramms

Das Sequenzdiagramm in der Abbildung zeigt eine Interaktion von drei Objekten. Zu beachten ist, dass das ganze Diagramm eine Interaktion repräsentiert und eine Interaktion nicht nur ein einzelner Nachrichtenaustausch ist.

Im Kopf der Lebenslinie steht der (optionale) Elementname mit der zugehörigen Klasse in der üblichen Deklarationsnotation: name: typ.

Ausführungsfokus

Wenn zwischen Lebenslinien Nachrichten ausgetauscht werden, muss auch ein Verhalten in den zugehörigen Elementen ausgeführt werden. Das wird durch die länglichen Rechtecke auf der Lebenslinie dargestellt. Die Rechtecke repräsentieren den sogenannten Ausführungsfokus (ExecutionOccurence). Anfang und Ende des Ausführungsfokus sind durch sogenannte Ereignisauftritte definiert. Einfacher gesagt, das Senden und Empfangen von Nachrichten bestimmt Anfang und Ende des Ausführungsfokus.

Nachrichtenarten

Die Übertragung einer Nachricht wird mit Pfeilen notiert. Die Beschriftung der Nachrichten erfolgt mit den Namen der zugehörigen Operationen. UML kennt verschiedene Arten von Nachrichten, die durch unterschiedliche Pfeilnotationen dargestellt werden. In der nachfolgenden Auflistung werden die verschiedenen Nachrichtenarten und zugehörige Notationsformen gezeigt.

  • Synchrone Nachrichten (Synchronous Messages) haben eine gefüllte Pfeilspitze. Synchron bedeutet, dass der Aufrufer wartet, bis das aufgerufene Verhalten beendet wurde. Die Antwort (Reply Message) auf einen synchronen Aufruf wird mit einer gestrichelten Linie und offener Pfeilspitze dargestellt.
  • Asynchrone Nachrichten (Asynchronous Messages) haben eine offene Asynchron bedeutet, dass der Aufrufer nicht wartet, sondern unmittelbar nach dem Aufruf fortfährt. Entsprechend gibt es auf asynchrone Aufrufe auch keine Antwortpfeile.
  • Verlorene Nachrichten (Lost Messages) haben eine offene Pfeilspitze, die auf einen ausgefüllten Kreis zeigt. Der Kreis ist nicht mit einer Lebenslinie verbunden. Bei einer verlorenen Nachricht ist der Sender der Nachricht bekannt, aber nicht der Empfänger.
  • Gefundene Nachrichten (Found Messages) haben eine offene Die Linie geht von einem ausgefüllten Kreis aus. Der Kreis ist nicht mit einer Lebenslinie verbunden. Bei einer gefundenen Nachricht ist der Empfänger der Nachricht bekannt, aber nicht der Sender.
  • Eine Nachricht, die ein neues Exemplar erzeugt, wird mit einer Linie und offener Pfeilspitze Die zu dem Exemplar gehörende Lebenslinie beginnt erst an dieser Stelle im Diagramm, d. h., der Pfeil zeigt auf den Kopf der Lebenslinie.

 

 

Durch Voranstellen des Zeichens * modelliert man das wiederholte Senden der Nachricht. Die Nachricht erhält in diesem Fall das Zeichen * vorangestellt.

Auf den Nachrichtenpfeilen wird die Nachricht notiert. Die Syntax lautet [attribut =] name [(argumente)] [: rückgabewert]

Notation von Akteuren

Abb. 54: Notationsformen der verschiedenen Nachrichtenarten

Wobei

  • attribut eine lokale Variable der Interaktion oder ein Exemplar einer Lebenslinie sein kann. Die Attributzuweisung wird nur bei synchronen Nachrichten mit Rückgabewert
  • name der Name der aufzurufenden Nachricht oder der Name des Signals, das gesendet wird, Das Senden eines Signals hat immer asynchronen Charakter.
  • argumente eine kommaseparierte Liste der Parameterwerte ist, die der Nachricht übergeben

Wird über das Absetzen einer Botschaft ein Objekt erzeugt (z. B. über den Aufruf der Methode new), beginnt die Lebenslinie des Objekts erst an dieser Position. Die Auflösung eines Objektes wird durch ein Kreuz auf der Lebenslinie dargestellt.

Symbole

Die folgende Tabelle enthält die Symbole der Sequenzdiagramme.

Name/SymbolVerwendung
Die Systemgrenze isoliert den betrachteten Programmteil vom übrigen Programm. Sie dient meist als Ausgangspunkt des auslösenden Methodenaufrufs. Nicht immer wird der Programmfluss von einem Objekt außerhalb des betrachteten Bereichs ausgelöst, sodass in diesem Fall keine Systemgrenze eingezeichnet werden muss.
Ein Objekt wird mit einem Rechteck, das den Namen enthält, dargestellt. Das Unter­streichen des Namens kann hier entfallen, da keine Verwechselung mit dem Klassen­namen auftreten kann. Klassen werden in diesem Diagramm nicht dargestellt. Die Objekte werden entlang der oberen Blattkante nebeneinander angezeigt.
Jedes Objekt liegt auf einer senkrechten Linie, der Lebenslinie. Die Lebensdauer des Objekts nimmt in Richtung der unteren Blattkante zu. Für Objekte, die zu Beginn des Programmteils bereits existieren, werden die Objektsymbole an der oberen Blattkante gezeichnet. Für Objekte, die innerhalb des Programmteils neu erstellt werden, wird das Symbol in Höhe des Methodenaufrufs gezeichnet, in dessen Folge das Objekt erstellt wird.
Ist ein Objekt an einem Methodenaufruf beteiligt, wird es aktiv. Die Lebenslinie verdickt sich. Ruft ein Objekt eine eigene Methode auf, verdickt sich die Lebenslinie ein weiteres Mal. Diese Aktivitäten werden nicht immer mitgezeichnet.
Ruft ein Objekt eine Methode eines anderen Objekts auf, wird das über einen durchgehenden Pfeil sym­bolisiert, der auf das Objekt zeigt, dessen Methode aufgerufen wird. An dieses Symbol wird der Methodenname geschrieben. Diesem Namen kann in Klammern die Parameter­liste angefügt werden.
Prinzipiell werden nur die Methodenaufrufe in das Sequenzdiagramm eingezeichnet. Möchten Sie dennoch die Rückkehr der Methoden einzeichnen, können Sie dies mit einem Pfeil und unterbrochener Linie vornehmen.
Erstellt eine Methode ein Objekt, endet der Pfeil der Methode an dem rechteckigen Symbol des Objekts. Die Lebenslinie beginnt bei diesem Symbol.

Beispiel

In einem Ticketsystem für ein Schauspielhaus werden auf einer Internetseite Eintrittskarten aus dem Saalplan heraus verkauft. Der Saalplan verwaltet die Sitzplätze einer Veranstaltung.

Wird ein Platz von einem Besucher ausgewählt, ruft das betreffende Objekt aPlatz die Methode „kaufen“ des Objekts aBestellung auf und übergibt eine Referenz auf sich selbst im Parameter.

Das Objekt der Klasse Bestellung ruft die Methode „istFrei“ der Klasse Saalplan auf, um zu überprüfen, ob der im Parameter übergebene Platz noch frei ist. Ist der Platz noch frei, ruft das Saal- plan-Objekt seine eigene Methode „reservieren“ auf. Damit wird der Platz zunächst reserviert.

Anwendungsfall

Abb. 55: Beispiel eines Sequenzdiagramms

Nachdem dies erfolgt ist, wird die Rechnung für den Platz erstellt. Dazu ruft das Saalplan-Objekt die Methode „buchen“ mit dem ausgewählten Platz als Parameter auf. Die Methode „buchen“ gehört zum Objekt aVerkauf. Dieses stellt eine Liste der Rechnungspositionen dar, was hier nicht modelliert ist.

Nachdem die Rechnungspositionen vom Verkaufs-Objekt zusammengestellt wurden, ruft dieses die Methode „erstelleRechnung“ des Objekts aBestellung auf. Um dem Internetbesucher den Erfolg seines Kaufes mitzuteilen, ruft das Bestellungs-Objekt die Methode „bestätigt“ der Klasse Platz auf. Der Besucher bestätigt die Bestellung, und die Methode „bestätigt“ kehrt mit dem Wert „true“ (wahr) zurück. Die Bestellung ist abgeschlossen.