Sequenzdiagramme mit Rational XDE

In diesem Beispiel werden ein paar grundlegende Sequenzdiagramm-Tricks gezeigt. Es basiert auf einer Standard-MFC-Anwendung (SDI-Anwendung, CView als Basisklasse der View). Sie fängt Mausklicks ab, speichert die Punkte in einer Liste im Document und stellt die Anzahl der Klicks in der View dar.
Das Beispiel plus Diagramm gibt es hier: RationalSequenzdiagramm.zip

Diagramm anlegen

Zuerst einmal ein Rational-Projekt erzeugen und mit der Anwendung synchronisieren lassen.
Dann im ModelExplorer per Rechtsklick -> "Add Diagramm" -> "Sequence: Instance" ein neues Sequenzdiagramm zufügen.
Aus der Rational-Hilfe:
Types of Sequence Diagrams
A sequence diagram belongs to an interaction in a collaboration or an interaction instance in a collaboration instance. If you are working with an interaction in a collaboration you use a sequence role diagram. If you are working with an interaction instance in a collaboration instance you use a sequence instance diagram.


Definition von "Collaboration Instance":
A collaboration instance is a model element that contains a group of objects that work together to realize a behavior that is specified by a use case, class, or operation.
Das heißt für die Darstellung von Use Cases benötigen wir ein "Sequence: Instance"-Diagramm.

Schritt 1: Aktor ins Spiel bringen:

Wir benötigen ein Use-Case-Diagramm. Das Diagramm des Beispiels ist ziemlich trivial: es gibt einen Aktor "Benutzer" und einen Use-Case "Klick".
Use-Case-Diagramm
Da der Use Case des Sequenzdiagramms von einem Aktor angestoßen wird, gehen wir in den Model-Explorer und ziehen den Aktor ins Diagramm. Rational legt automatisch eine Instanz des Aktors an, mit dem Default-Namen "Object1". Da wir nur einen Aktor haben löschen wir den Instanz-Namen wieder, so dass nur ":Aktorname" im Diagramm übrig bleibt.
Aktor

Schritt 2: Die erste Message

Über die Methode "OnLButtonDown" wird der UseCase "Klick" gestartet. Wir ziehen also die View-Klasse aus dem ModelExplorer ins Diagramm und löschen auch hier den automatisch vergebenen Namen "Object1". Aus der Toolbox zieht man eine "Message" ins Diagramm zwischen den Aktor und die View-Klasse. Die Message erhält den Default-Namen "CalledOperation". Sie bietet beim Editieren eine Auswahlliste aller vorhandenen Methoden an, und da finden wir auch "OnLButtonDown" mitsamt allen Parametern.
OnLButtonDown
Das Spielchen wiederholen wir für die Document-Klasse und "AddPoint" (korrekte Parameter werden zugefügt).
Die Anzeige der Parameter können wir konfigurieren, indem wir den Message-Pfeil (nicht den Message-Namen) auswählen und in die Properties gehen. Unter "MessageSignature" finden wir verschiedene Möglichkeiten der Anzeige, u.a. "nur Parameternamen" und "Parameternamen und -Typ".
Parameteranzeige
"AddPoint" wiederum ruft als erstes "ContainsPoint" auf, wird also als "Self Message" aus der Toolbox zugefügt. Für die Verknüpfung der neu zugefügten Message mit der Methode wählen wir die Methode im ModelExplorer und ziehen sie auf die Message. Achtung: das hat bei mir nicht funktioniert wenn gerade irgendetwas im Diagramm gewählt war !
Nach Rücksprung in die View wird die Basisklassen-Methode "InvalidateRect" (von CWnd) aufgerufen und wir sind fertig.
Das Ergebnis sieht so aus:
Sequenzdiagramm

Weiteres

Weitere Features:
Return Messages gibt es zwar, allerdings ohne weitere Kommentare. Hier müssen wir also "Text" zufügen.
Bedingungen für Methodenaufrufe können beim Methodenbearbeiten in die eckigen Klammern vor dem Methodennamen eingetragen werden, oder aber in den Properties als "Guard Condition". Beispielsweise könnte man in diesem Beispielprogramm "ContainsPoint" in der View aufrufen und nur bei Rückgabewert "FALSE" die Methode "AddPoint" aufrufen. Dies würde zu folgender Guard Condition führen: "bContainsPoint == FALSE". (bContainsPoint sei eine Variable, die den Rückgabewert von "ContainsPoint" enthält).
Constraints: Im Sequenzdiagramm können wir OCL-Constraints an Messages (bzw. an die Pfeile) hängen. Allerdings habe ich die nicht mit gültiger Syntax hinbekommen (Menü "Diagram" -> "Validate Diagram") gab immer die Fehlermeldung "The context of OCL constraint {....} should be a classifier, or an element owned by a classifier (typically, an operation or a transition)."


Version 1.0.0.0, Stand 31.05.2005
Historie:
1.0.0.0 (31.05.2005) Zugefügt