Sequenzdiagramm
Einführung
Die UML kennt insgesamt 14 Diagrammtypen. Ein Sequenzdiagramm ist ein Verhaltensdiagramm der UML. Das Wort Sequenz beschreibt laut Duden eine Reihenfolge oder kurz Folge von Dingen. In Sequenzdiagrammen wird eine zeitliche Folge von Kommunikationsbeziehungen zwischen Objekten grafisch dargestellt. Eine Kommunikationsbeziehung ist das Senden einer Nachricht von einem Objekt zu einem anderen. Denn Objekte tauschen Nachrichten aus, um miteinander zu kommunizieren (Heide Balzert: Lehrbuch der Objektmodellierung. Analyse und Entwurf S. 71 ff).
Was zeigt ein Sequenzdiagramm?
- Interaktionen: Es visualisiert, wie Objekte miteinander kommunizieren und in welcher Reihenfolge Nachrichten ausgetauscht werden.
- Zeitliche Abfolge: Die vertikale Achse repräsentiert die Zeit, sodass man den Ablauf der Interaktionen gut nachvollziehen kann.
- Objekte: Jedes Objekt wird durch eine Lebenslinie repräsentiert.
- Nachrichten: Nachrichten, die zwischen Objekten gesendet werden, sind als Pfeile dargestellt.
Was ist der Hauptzweck? Der Hauptzweck eines Sequenzdiagramms besteht darin, den Ablauf von Prozessen darzustellen, nicht die konkreten Werte, die bei der Ausführung von Methoden zurückgegeben werden. Abstraktion: Rückgabeparameter sind oft implementationsspezifische Details, die für das Verständnis des allgemeinen Ablaufs nicht immer relevant sind. Sie können dargestellt werden, falls relevant, müssen es aber nicht.
{{#ev:youtube|-ZswbawGWzg}}
Grundsätzlicher Aufbau
Ein Sequenzdiagramm besitzt zwei Dimensionen: Die Vertikale repräsentiert die Zeit (von oben nach unten verlaufend), auf der Horizontalen werden die beteiligten Teilnehmer (meist Objekte oder Akteure) angeordnet. Die zugehörigen Klassen werden mit aufgeführt. Die Lebensdauer eines jeden Objektes wird durch eine gestrichelte Linie – die sogenannte Lebenslinie – dargestellt. Diese Linie repräsentiert die Existenz eines Objekts während einer bestimmten Zeit.


Objekte und Lebenslinien
Die Objekte (bzw. Teilnehmer) werden am oberen Rand durch Rechtecke visualisiert. Im Rechteck steht typischerweise der Klassenname. Falls erforderlich, wird auch der spezifische Objektname aufgeführt. Objektname und Klassenname werden durch einen Doppelpunkt getrennt und zur Kennzeichnung als Instanz oft unterstrichen (zum Beispiel Bestellung: Mail oder einfach :Mail für ein anonymes Objekt). Akteure (wie z. B. ein Nutzer) werden als Strichmännchen dargestellt.
Von diesen Teilnehmer-Symbolen gehen die senkrechten Lebenslinien aus. Sie werden durch gestrichelte Linien dargestellt. Die Nachrichten werden durch waagerechte Pfeile zwischen den Lebenslinien modelliert. Auf diesen Pfeilen werden die Nachrichtennamen in der Form Nachricht(Argumente) notiert. Die Angabe von Argumenten ist optional.
Nachrichten
Durch eine Nachricht wird meist eine Methode des Empfängers aufgerufen. Hier kann auch die Übergabe von Eingabeparametern kenntlich gemacht werden. Es wird prinzipiell zwischen synchronen und asynchronen Nachrichten unterschieden.

Synchrone Nachrichten: Bei einem synchronen Aufruf blockiert der Sender (der aufrufende Kommunikationspartner pausiert die Programmfortführung), bis er die zugehörige Antwort vom Empfänger erhalten hat. Synchrone Nachrichten werden durch einen Pfeil mit gefüllter, geschlossener Spitze dargestellt.

Asynchrone Nachrichten: Hierbei sendet der Sender die Nachricht und führt sein Programm unmittelbar fort, ohne auf eine Antwort zu warten. Trifft später eine Antwort ein, wird sie vom Sender verarbeitet. Asynchrone Nachrichten werden durch einen Pfeil mit offener Spitze (Linienpfeil) dargestellt.
Antworten
Die explizite Darstellung von Antworten ist optional. Antworten auf vorherige Nachrichten (insbesondere bei synchronen Aufrufen) werden durch eine gestrichelte Linie mit offener Pfeilspitze dargestellt.
Das Erzeugen und Entfernen von Objekten kann in Sequenzdiagrammen ebenfalls modelliert werden:
- Objekterzeugung: Die Konstruktion (Instanziierung) eines neuen Objektes wird durch eine Nachricht (oft mit
<<create>>odererzeugenbeschriftet) angezeigt, deren Pfeilspitze exakt auf den Kopf des neu zu erzeugenden Objektsymbols trifft. - Dekonstruktion: Die Destruktion bzw. Zerstörung eines Objektes wird durch ein großes Kreuz (Stopp-Symbol) am Ende der jeweiligen Lebenslinie angezeigt.
Die Entscheidung, ob Antworten detailliert eingezeichnet werden, hängt vom Zweck des Diagramms ab. Oft werden sie weggelassen, wenn der Rückfluss durch den Methodenaufruf implizit klar ist, um das Diagramm übersichtlich zu halten.
Statische Aufrufe
Statische (static) Methodenaufrufe können dargestellt werden, indem die Nachricht an die Klasse selbst und nicht an eine spezifische Objektinstanz gesendet wird.
Aktivierung (Ausführungspezifikation)
Die Überlagerung der gestrichelten Lebenslinien durch breite, senkrechte Rechtecke (Balken) symbolisiert die Aktivierung. Dieser sogenannte Aktivierungsbalken zeigt an, über welchen Zeitraum das Objekt aktiv an der Interaktion beteiligt ist, also den Kontrollfluss des Programms innehat oder auf die Rückkehr eines synchronen Aufrufs wartet.
Kontrollstrukturen (Kombinierte Fragmente)

Auch Kontrollstrukturen lassen sich in modernen Sequenzdiagrammen mithilfe sogenannter "Kombinierter Fragmente" darstellen. Diese werden als Rahmen mit einem Operator-Schlüsselwort in der oberen linken Ecke gezeichnet.
Verzweigung (alt)
Der mit alt (für alternative) markierte Block beschreibt eine Alternative (Verzweigung). Der Rahmen wird durch gestrichelte Linien in sogenannte Interaktionsoperanden (Teilbereiche) unterteilt. Jeder Bereich ist mit einer Bedingung (Guard) in eckigen Klammern versehen (z. B. [pwd ok]). Es wird nur derjenige Bereich ausgeführt, dessen Bedingung zum Ausführungszeitpunkt wahr (true) ist. Der unterste Bereich wird oft mit [else] markiert.
Schleife (loop)
Der Teil des Sequenzdiagramms, der sich in einem Rahmen mit dem Operator loop befindet, wird wiederholt ausgeführt. Die Ausführungsbedingung (Schleifenbedingung) steht in eckigen Klammern (z. B. [pwd != ok]). Der Inhalt des Rahmens wird so lange wiederholt, wie diese Bedingung wahr ist.
Zeitliche Ordnung der Ereignisse
Ein Sequenzdiagramm beschreibt das Verhalten eines Systems, indem es die zeitliche Ordnung von Ereignisauftritten spezifiziert. Nicht der präzise, absolute Zeitpunkt, wann ein Ereignis auftritt, ist dabei ausschlaggebend, sondern welche Ereignisse zwingend vor und welche nach einem bestimmten Ereignisauftritt stattfinden müssen.

Das obere Diagramm in der Abbildung rechts zeigt ein Sequenzdiagramm mit zwei synchronen Operationsaufrufen (m1 und m2). Blau eingekreist sind die vier maßgeblichen Ereignisauftritte:
- S1 und E1 stehen für das Sende- und das Empfangs-Ereignis der Nachricht m1.
- S2 und E2 stehen für die entsprechenden Ereignisse der Nachricht m2.
Die Zeitachse verläuft in einem Sequenzdiagramm von oben nach unten, stellt jedoch keine absolute Zeitmetrik dar. Zu den Ereignisauftritten in diesem synchronen Beispiel lassen sich folgende feste Aussagen treffen:
- E1 tritt nach S1 auf, da das Empfangs- immer nach dem Sende-Nachricht-Ereignis vorkommen muss. Analog tritt E2 stets nach S2 auf.
- S2 tritt nach S1 auf, weil S2 auf der Lebenslinie von Objekt A unterhalb von S1 eingezeichnet ist.
Alles in allem modelliert dieses erste Sequenzdiagramm also eine Interaktion, die durch exakt eine zulässige zeitliche Abfolge von Ereignisauftritten spezifiziert ist: <S1, E1, S2, E2>.
Das mittlere Sequenzdiagramm unterscheidet sich vom vorangehenden dadurch, dass statt zwei synchronen nun zwei asynchrone Nachrichten (offene Pfeilspitzen) dargestellt sind. Hier gilt weiterhin zwingend, dass E1 nach S1 und E2 nach S2 auftritt. Da es sich jedoch um asynchrone Kommunikation handelt (Objekt A wartet nach dem Senden von m1 nicht), könnte das Empfangsereignis E1 nicht nur vor S2 stattfinden, sondern auch erst nach S2 oder sogar erst nach E2.
Das asynchrone Sequenzdiagramm spezifiziert somit eine Interaktion, in der drei verschiedene Abfolgen von Ereignisauftritten logisch zulässig sind:
1. <S1, E1, S2, E2>
2. <S1, S2, E1, E2>
3. <S1, S2, E2, E1>
Falls erforderlich, kann man die zulässigen Abfolgen von Ereignisauftritten in asynchronen Systemen mit zusätzlichen Ordnungsbeziehungen einschränken (unterstes Diagramm). Eine Ordnungsbeziehung (dargestellt als gepunktete Linie mit Pfeil) repräsentiert keine übertragene Nachricht zwischen den Lebenslinien, sondern modelliert die zwingende Einschränkung, dass ein Ereignisauftritt zwingend nach einem bestimmten anderen stattfinden muss. Im Beispiel modelliert die Ordnungsbeziehung, dass das Sendeereignis S2 immer erst nach dem Empfangsereignis E1 erfolgen darf.
Durch diese zusätzliche Einschränkung stellt das unterste Sequenzdiagramm, trotz der asynchronen Nachrichten, erneut eine Interaktion mit genau einer einzig zulässigen Folge dar: <S1, E1, S2, E2>.