Sequenzdiagramm: Unterschied zwischen den Versionen

Aus FLBK-Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Einführung ==
== Einführung ==
Die [[UML]] kennt insgesamt 14 Diagrammtypen. Ein Sequenzdiagramm ist ein Diagrammtyp der UML. Das Wort Sequenz beschreibt laut Duden eine Reihenfolge oder kurz Folge von Dingen. In Sequenzdiagrammen wird eine zeitliche Folge von Kommunikationsbeziehungen zwischen [[Objekt|Objekten]] grafisch dargestellt. Ein Kommunikationsbeziehungen ist das Senden einer Nachricht von einem [[Objekt|Objekten]] zu einem anderen. Denn [[Objekt|Objekte]] tauschen Nachrichten aus, um miteinander zu kommunizieren. (Heide Balzert Lehrbuch der Objektmodellierung. Analyse und Entwurf S. 71 ff).
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 [[Objekt|Objekten]] grafisch dargestellt. Eine Kommunikationsbeziehung ist das Senden einer Nachricht von einem [[Objekt]] zu einem anderen. Denn [[Objekt|Objekte]] tauschen Nachrichten aus, um miteinander zu kommunizieren (Heide Balzert: Lehrbuch der Objektmodellierung. Analyse und Entwurf S. 71 ff).


* Was zeigt ein Sequenzdiagramm?
'''Was zeigt ein Sequenzdiagramm?'''
* Interaktionen: Es visualisiert, wie [[Objekt|Objekte]] miteinander kommunizieren und in welcher Reihenfolge Nachrichten ausgetauscht werden.
* '''Interaktionen:''' Es visualisiert, wie [[Objekt|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.
* '''Zeitliche Abfolge:''' Die vertikale Achse repräsentiert die Zeit, sodass man den Ablauf der Interaktionen gut nachvollziehen kann.
* Objekte: Jedes [[Objekt]] wird als eine Lebenslinie dargestellt.
* '''Objekte:''' Jedes [[Objekt]] wird durch eine Lebenslinie repräsentiert.
* Nachrichten: Nachrichten, die zwischen [[Objekt|Objekten]] gesendet werden, sind als Pfeile dargestellt.
* '''Nachrichten:''' Nachrichten, die zwischen [[Objekt|Objekten]] gesendet werden, sind als Pfeile dargestellt.


'''Was ist der Hauptzweck?'''
'''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 [[Methode|Methoden]] zurückgegeben werden.
Der Hauptzweck eines Sequenzdiagramms besteht darin, den Ablauf von Prozessen darzustellen, nicht die konkreten Werte, die bei der Ausführung von [[Methode|Methoden]] zurückgegeben werden.
Abstraktion: [[Methode#Rückgabeparameter|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.
Abstraktion: [[Methode#Rückgabeparameter|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.
<html>
 
<iframe width="560" height="315" src="https://www.youtube.com/embed/-ZswbawGWzg?si=zu_6uaJfhKTpUDIe" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></html>
{{#ev:youtube|-ZswbawGWzg}}


== Grundsätzlicher Aufbau ==
== Grundsätzlicher Aufbau ==
Ein Sequenzdiagramm besitzt zwei Dimensionen: Die Vertikale repräsentiert die Zeit, auf der Horizontalen werden die [[Objekt|Objekte]] eingetragen. Die Zugehörigen [[Klasse|Klassen]] werden mit aufgeführt. Die Lebensdauer eines jeden [[Objekt|Objektes]] wird durch eine gestrichelte Linie - die Lebenslinie oder Objektlinie - dargestellt. Diese Linie repräsentiert die Existenz eines Objekts während einer bestimmten Zeit.  
Ein Sequenzdiagramm besitzt zwei Dimensionen: Die Vertikale repräsentiert die Zeit (von oben nach unten verlaufend), auf der Horizontalen werden die beteiligten Teilnehmer (meist [[Objekt|Objekte]] oder Akteure) angeordnet. Die zugehörigen [[Klasse|Klassen]] werden mit aufgeführt. Die Lebensdauer eines jeden [[Objekt|Objektes]] wird durch eine gestrichelte Linie die sogenannte Lebenslinie dargestellt. Diese Linie repräsentiert die Existenz eines Objekts während einer bestimmten Zeit.
[[Datei:Schematische Darstellung Sequenzdiagramm.png|mini]]
 
[[Datei:Beschriftetes Beispiel Sequenzdiagramm.png|mini]]
[[Datei:Schematische Darstellung Sequenzdiagramm.png|mini|Schematische Darstellung der Elemente eines Sequenzdiagramms]]
=== Objekte ===
[[Datei:Beschriftetes Beispiel Sequenzdiagramm.png|mini|Beschriftetes Beispiel mit Akteur, Lebenslinien und Nachrichten]]
Die [[Objekt|Objekte]] werden durch Rechtecke visualisiert. Im [[Instanz|Objekt]] steht der zugehörige [[Klasse]]nname (zum Beispiel Mail). Falls erforderlich, wird auch der Objektname ( zum Beispiel Bestellung) aufgeführt. Objektname und Klassenname werden durch einen Doppelpunkt getrennt ( zum Beispiel Bestellung: Mail).  
 
=== Objekte und Lebenslinien ===
Die [[Objekt|Objekte]] (bzw. Teilnehmer) werden am oberen Rand durch Rechtecke visualisiert. Im Rechteck steht typischerweise der [[Klasse]]nname. 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 <u><code>Bestellung: Mail</code></u> oder einfach <code>:Mail</code> für ein anonymes Objekt). Akteure (wie z. B. ein Nutzer) werden als Strichmännchen dargestellt.


Von den Objekten gehen die senkrechten Lebenslinien aus. Sie werden durch gestrichelte Linien dargestellt. Die Nachrichten werden durch waagerechte Pfeile zwischen den Objektlebenslinien beschrieben. Auf diesen Pfeilen werden die Nachrichtennamen in der Form: Nachricht(Argumente) notiert. Die Angabe von Argumenten ist optional.
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 <code>Nachricht(Argumente)</code> notiert. Die Angabe von Argumenten ist optional.


=== Nachrichten ===
=== Nachrichten ===
Durch eine Nachricht wird meist eine [[Methode]] des Empfängers aufgerufen. Hier kann auch die Übergabe von [[Methode#Eingabeparameter|Eingabeparametern]] kenntlich gemacht werden. Es wird zwischen synchronen und asynchronen Nachrichten unterschieden.
Durch eine Nachricht wird meist eine [[Methode]] des Empfängers aufgerufen. Hier kann auch die Übergabe von [[Methode#Eingabeparameter|Eingabeparametern]] kenntlich gemacht werden. Es wird prinzipiell zwischen synchronen und asynchronen Nachrichten unterschieden.
[[Datei:Nachrichten im Sequenzdiagramm.png|mini]]


'''synchrone Nachrichten''': Dabei stellt der aufrufende Kommunikationspartner die
[[Datei:Nachrichten im Sequenzdiagramm.png|mini|Darstellung gefundener und verlorener Meldungen]]
[[Datei:Synchrone und Asychrone Nachrichten.png|mini]]
Programmfortführung ein, bis er eine Antwort erlangt hat. Synchrone Nachrichten werden durch einen Pfeil mit  gefüllter Spitze dargestellt.


'''asynchrone Nachrichten''': Dabei führt der Sender sein Programm fort. Trifft die Antwort ein, wird der Programmfluss unterbrochen und die Antwort verarbeitet. Sie werden durch einen Pfeil mit offener Spitze dargestellt.  
'''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.


=== Antworten ===
[[Datei:Synchrone und Asychrone Nachrichten.png|mini|Vergleich: Synchrone vs. Asynchrone Operationsaufrufe]]
Die Darstellung der Antworten ist optional. Antworten werden durch eine gestrichelte Linie mit offener Pfeilspitze dargestellt. Das Erzeugen und Entfernen von Objekten kann in Sequenzdiagrammen ebenfalls dargestellt werden. Die [[Konstruktor|Konstruktion]] eines neuen Objektes wird durch eine Nachricht, die auf ein Objektsymbol trifft, angezeigt.


Die Entscheidung, ob Antworten in einem Sequenzdiagramm dargestellt werden, ist eine gestalterische Entscheidung, die vom jeweiligen Anwendungsfall abhängt. Es gibt keine strikten Regeln, sondern vielmehr Richtlinien, die es ermöglichen, klare und aussagekräftige Diagramme zu erstellen.  
'''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.


=== Statische Aufrufe ===
=== Antworten ===
Statische (static) Methodenaufrufe werden mit unterstrichenem Methodennamen dargestellt. Der Aufruf erfolgt dann auf einer [[Klasse]] und nicht auf einem [[Objekt]].  
Die explizite Darstellung von Antworten ist optional. Antworten auf vorherige Nachrichten (insbesondere bei synchronen Aufrufen) werden durch eine '''gestrichelte Linie mit offener Pfeilspitze''' dargestellt.


=== Dekonstruktion ===
Das Erzeugen und Entfernen von Objekten kann in Sequenzdiagrammen ebenfalls modelliert werden:
Die Destruktion bzw. Zerstörung eines Objektes wird durch ein Kreuz am Ende der Lebenslinie angezeigt.
* '''Objekterzeugung:''' Die [[Konstruktor|Konstruktion]] (Instanziierung) eines neuen Objektes wird durch eine Nachricht (oft mit <code><<create>></code> oder <code>erzeugen</code> beschriftet) 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.


=== Aktivierung ===
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.
Die Überlagerung der gestrichelten Lebenslinien durch breite, senkrechte Balken symbolisiert die Aktivierung, d.h. es zeigt, welches Objekt gerade aktiv ist und somit für den Kontrollfluss des Programms verantwortlich ist.


=== Kontrollstrukturen ===
=== Statische Aufrufe ===
[[Datei:Bespiel Kontrollstrukturen im Sequenzdiagramm.png|mini]]
Statische (static) Methodenaufrufe können dargestellt werden, indem die Nachricht an die [[Klasse]] selbst und nicht an eine spezifische [[Instanz|Objektinstanz]] gesendet wird.
Auch [[Kontrollstruktur|Kontrollstrukturen]] lassen sich durch ein Sequenzdiagramm darstellen (siehe Zeichnung).  


==== Verzweigung ====
=== 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.


Der mit alt (für alternative) markierte Block beschreibt eine Alternative ([[Verzweigung|Verzwei­gung]]). Ist die Bedingung [b=wahr] erfüllt, wird der Bereich oberhalb der gestrichelten Linie in dem alt-Block ausgeführt. Im else-Fall wird der Bereich unterhalb der gestrichelten Linie ausgeführt.
=== Kontrollstrukturen (Kombinierte Fragmente) ===
[[Datei:Bespiel Kontrollstrukturen im Sequenzdiagramm.png|mini|Kombinierte Fragmente für Alternativen (alt) und Schleifen (loop)]]
Auch [[Kontrollstruktur|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.


==== Schleife ====
==== Verzweigung (alt) ====
Der mit <code>alt</code> (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. <code>[pwd ok]</code>). Es wird nur derjenige Bereich ausgeführt, dessen Bedingung zum Ausführungszeitpunkt wahr (true) ist. Der unterste Bereich wird oft mit <code>[else]</code> markiert.


Der Teil des Sequenzdiagramms, der sich im Kasten mit dem Titel [[Schleife|loop]] befindet, wird solange ausgeführt, solange die Ausführbedingung in den eckigen Klammern [] wahr ist.
==== Schleife (loop) ====
Der Teil des Sequenzdiagramms, der sich in einem Rahmen mit dem Operator <code>loop</code> befindet, wird wiederholt ausgeführt. Die Ausführungsbedingung (Schleifenbedingung) steht in eckigen Klammern (z. B. <code>[pwd != ok]</code>). Der Inhalt des Rahmens wird so lange wiederholt, wie diese Bedingung wahr ist.


== Zeitliche Ordnung der Ereignisse ==
== Zeitliche Ordnung der Ereignisse ==
Ein Sequenzdiagramm beschreibt das Verhalten eines Systems, indem es die zeitliche Ordnung von Ereignisauftritten spezifiziert. Nicht der präzise Zeitpunkt, wann ein Ereignis auftritt, ist dabei ausschlaggebend, sondern welche Ereignisse vor und welche nach einem bestimmten Ereignisauftritt auftreten müssen (Quelle https://de.wikipedia.org/wiki/Sequenzdiagramm).
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.
[[Datei:Zeitliche Eindordnung Nachrichten im Sequenzdiagramm.png|mini]]
Die Abbildung links zeigt ein Sequenzdiagramm mit zwei synchronen Operationsaufrufen. Blau eingekreist sind die vier Ereignisauftritte. S1 und E1 stehen für das Sende- und das Empfangs-Nachricht-Ereignis für die Nachricht m1, S2 und E2 für die entsprechenden Ereignisse, die mit m2 in Verbindung stehen. Die Zeitachse läuft in einem Sequenzdiagramm von oben nach unten, sollte aber nicht als absolute Zeit verstanden werden.


Zu den Ereignisauftritten in diesem Sequenzdiagramm lassen sich folgende Aussagen machen:
[[Datei:Zeitliche Eindordnung Nachrichten im Sequenzdiagramm.png|mini|Zeitliche Einordnung und Ordnungsbeziehungen von Ereignisauftritten]]


E1 tritt nach S1 auf, weil das Empfangs- immer nach dem Sende-Nachricht-Ereignis vorkommt. Analog tritt E2 nach S2 auf.
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.


S2 tritt nach S1 auf, weil S2 unter S1 gezeichnet ist
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 Sequenzdiagramm also eine Interaktion, die durch genau eine Folge von Ereignisauftritten spezifiziert ist: <S1, E1, S2, E2>.
Alles in allem modelliert dieses erste Sequenzdiagramm also eine Interaktion, die durch exakt eine zulässige zeitliche Abfolge von Ereignisauftritten spezifiziert ist: <code><S1, E1, S2, E2></code>.


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 Sequenzdiagramm in der Abbildung links unterscheidet sich nur geringfügig vom vorangehenden Sequenzdiagramm. Der einzige Unterschied besteht darin, dass statt zwei synchronen zwei asynchrone Nachrichten dargestellt sind. Hier gilt weiterhin, dass E1 nach S1 und E2 nach S2 auftritt, weil das Empfangs- immer nach dem Sende-Nachricht-Ereignis vorkommt. Weil es sich um asynchrone Kommunikation handelt, könnte E1 hier jedoch nicht nur vor, sondern auch erst nach S2 oder E2 vorkommen.
Das asynchrone Sequenzdiagramm spezifiziert somit eine Interaktion, in der drei verschiedene Abfolgen von Ereignisauftritten logisch zulässig sind:
1. <code><S1, E1, S2, E2></code>
2. <code><S1, S2, E1, E2></code>
3. <code><S1, S2, E2, E1></code>


Das Sequenzdiagramm spezifiziert also eine Interaktion, in der drei Folgen von Ereignissauftritten zulässig sind: <S1, E1, S2, E2>, <S1, S2, E1, E2> und <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.


Falls nötig, kann man die zulässigen Abfolgen von Ereignisauftritten mit zusätzlichen Ordnungsbeziehungen einschränken. Eine Ordnungsbeziehung spezifiziert nicht eine Nachricht, die zwischen zwei Lebenslinien ausgetauscht wird, sondern die Tatsache, dass ein Ereignisauftritt nach einem anderen Ereignisauftritt vorkommen muss. Im Beispiel modelliert die Ordnungsbeziehung, dass S2 immer nach E1 erfolgt.
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: <code><S1, E1, S2, E2></code>.


Mit dieser zusätzlichen Einschränkung stellt dieses Sequenzdiagramm erneut eine Interaktion mit genau einer zulässigen Folge dar: <S1, E1, S2, E2>.
[[Kategorie:Modellierung]]
[[Kategorie:Programmierung]]
[[Kategorie:FI_I_TP2]]
[[Kategorie:AHR_I_Informatik_LK]]

Aktuelle Version vom 5. Juni 2026, 07:36 Uhr

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.

Schematische Darstellung der Elemente eines Sequenzdiagramms
Beschriftetes Beispiel mit Akteur, Lebenslinien und Nachrichten

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.

Darstellung gefundener und verlorener Meldungen

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.

Vergleich: Synchrone vs. Asynchrone Operationsaufrufe

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>> oder erzeugen beschriftet) 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)

Kombinierte Fragmente für Alternativen (alt) und Schleifen (loop)

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.

Zeitliche Einordnung und Ordnungsbeziehungen von Ereignisauftritten

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>.