Archiv für den Monat: Januar 2015

Reihenfolge von Nachrichten in Sequenzdiagrammen

Ein Sequenzdiagramm beinhaltet Lesenslinien von Objekten und Nachrichten, die zwischen den Objekten ausgetauscht werden. Dabei gilt das Kausalitätsprinzip: Eine Nachricht kann erst empfangen werden nachdem sie gesendet wurde. Davon abgesehen ist die Reihenfolge von Nachrichten nur pro Lebenslinie definiert; bei mehreren aktiven Objekten (oder bereits mit der Verwendung von asynchronen Nachrichten) legt ein Sequenzdiagramm weniger fest als intuitiv erwartet wird. Weiterhin kann zwischen dem Senden einer Nachricht und deren Empfang Zeit vergehen. Das ein Sequenzdiagramm die Reihenfolge nicht strikt festlegt ist ein Feature. Denn ansonsten müssten für die verschiedenen Möglichkeiten der Nachrichten-Reihenfolgen mehrere Sequenzdiagramme angelegt werden.

Sequenzdiagramm ohne Reihenfolge

Sequenzdiagramm ohne Reihenfolge

In diesem Beispiel ist nicht definiert, ob getMetaData() vor getNumberOfPlans() aufgerufen wird.
Um genau das zu definieren, also eine Reihenfolge zwischen Nachrichten lebenslinienübergreifend festzulegen, bietet UML das Konstrukt „GeneralOrdering“.
Das folgende Bild zeigt die Verwendung von GeneralOrdering (zugegeben, das Beispiel ist fachlich unglücklich).

Sequenzdiagramm mit Reihenfolge über GeneralOrdering

Sequenzdiagramm mit Reihenfolge über GeneralOrdering

Die Aussage des Diagramms: Der Empfang von getMetaData findet vor dem Empfang von getNumberOfPlans statt, über die Reihenfolge des Versands dieser Nachrichten wird keine Festlegung getroffen.
Für die Verwendung von GeneralOrdering gibt es zwei Gegenanzeichen:

  1. die Frage, ob die Zielgruppe das Diagramm noch versteht
  2. wird GeneralOrdering nicht von allen UML-Tools komfortabel unterstützt

Davon abgesehen bieten Sequenzdiagramme mit GeneralOrdering eine mächtige Möglichkeit, Szenarien zu definieren. Ein Sequenzdiagramm steht für eine Menge von Nachrichtenreihenfolgen, und mit GeneraOrdering kann zwischen einigen dieser Nachrichten eine Art „Precondition“ definiert werden.