UML - Zustandsdiagramm

UML - Zustandsdiagramm
Name
1
AnPr
Klasse
Datum
Allgemeines
Die Zustandsdiagramme in UML basieren im Wesentlichen auf den Statecharts von David Harel. Der Grundgedanke ist, das Verhalten eines endlichen Zustandsautomaten grafisch zu modellieren. Bei Zustandsautomaten gelten folgende Grundregeln:
 der Zustandsautomat befindet sich zu jeder Zeit in einem der definierten Zustände
 der Zustandsautomat kann niemals in zwei Zuständen gleichzeitig sein
 es gibt eine endliche Menge an Zuständen
 jeder Zustand kann eingenommen werden
Im Rahmen von UML wurde das Statechart jedoch erweitert, um das Zustandsdiagramm breiter nutzbar zu
machen. So ist es im UML Zustandsdiagramm durchaus möglich, dass ein Zustandsdiagramm zwei Zustände
gleichzeitig darstellen kann, wobei man dies dergestalt interpretiert, dass man einen inneren Prozess betrachtet,
der in sich zwei eigenständige Systeme aufweist („nebenläufige Teilzustände“). Da dies jedoch im Regelfall
für Verwirrung sorgt, wird dieses Feature selten genutzt. Aus diesem Grunde werden wir uns an dieser Stelle
„nur“ mit den elementaren Symbolen des Zustandsdiagramms beschäftigen.
Für die Programmierung hat das Zustandsdiagramm insofern eine hohe Bedeutung, als dass komplexe Systeme
mit Hilfe einer „Statemachine“ programmiert werden, welche auf Signale wie Buttonclicks unterschiedlich
reagiert:
private void stateMachine(ActionObject actionInfo) {
switch(this.currentState) {
case: STATE_IDLE:
handleButtonClick(actionInfo);
break;
case: STATE_BLOCK:
// do nothing
break;
case: STATE_BUSY:
showInfoMessage(actionInfo);
break;
}
}
Die Instanzvariable „currentState“ bestimmt also das zentrale Verhalten des Programms. Dieses kann somit
sehr einfach mit Hilfe eines Zustandsdiagramms dokumentiert werden.
Eine andere Alternative zu der zentralen Zustandsauswertung ist es, in den einzelnen Methoden den aktuellen
Zustand für die Bewertung der Weiterverarbeitung heranzuziehen:
private void saveButtonClicked() {
switch(this.currentState) {
case: IMAGE_DIALOG:
saveCurrentImage();
break;
case: TEXT_DIALOG:
saveCurrentText();
break;
}
}
AnPr_UML_Zustandsdiagramm_v01.docx
Seite 1
UML - Zustandsdiagramm
AnPr
In diesem Beispiel wird beim Klick des Save Buttons die Methode saveButtonClicked() aufgerufen und je
nachdem, in welchem Zustand sich das Programm befindet, wird entweder ein Bild, oder ein Text gespeichert.
Hier noch ein einfaches Beispiel für eine Fußgängerampel. Sie kennt
die drei Zustände Rot (Normalzustand), Starttimer läuft (und zwar
wenn ein Fußgänger den Knopf gedrückt hat) und nach Ablauf dieses
Timers folgt die Grünphase, welche erst nach Ablauf des Grüntimers
wieder beendet wird. Dadurch wird der Zustand „Rot“ wieder eingenommen.
Wie man erkennen kann, beeinflusst der Knopf unseren Zustandsautomaten nur im Zustand „Rot“. In allen anderen Zuständen hat der Knopf
keine Auswirkung.
Anmerkung: Dieses Diagramm ist in gewisser Weise ein Sonderfall, da es weder einen Start- noch einen Endpunkt besitzt.
2
UML-Zustandsdiagramm, Notation
Hier die wichtigsten Elemente des Zustandsdiagramms.
Symbol
Seite 2
Beschreibung
Startzustand: Markiert, in welchem Zustand das System zu existieren beginnt. Da
er kein richtiger Zustand ist, bezeichnet man ihn auch als „Pseudozustand“. Im
Regelfall besitzt ein Zustandsdiagramm einen Startzustand, es können aber auch
mehre sein.
Dies ist ein eigentlicher Zustand. Er wird eindeutig benannt und das System kann
eine begrenzte Zeit in diesem Zustand verharren.
Alternative Notation mit Verhaltensspezifikationen. Hier können verschiedene
Aktionen notiert werden, welche im Falle des Eintritts in den Zustand (entry),
nach dem Eintritt in den Zustand (do), Austritt aus dem Zustand (exit) oder einem
definierten Ereignis (event) durchgeführt werden. Ereignisse werden jedoch üblicherweise an der ausgehenden Transition notiert.
Eine Transition führt immer von einem Zustand zu einem anderen (wobei auch
reflexive Transitionen erlaubt sind, also ein Zustand wechselt in sich selbst). An
einer Transition werden noch folgende Informationen notiert:
 Ereignis, welches den Zustandswechsel triggert (erforderlich)
 Bedingung für das Ereignis in eckigen Klammern (optional)
 Aktion, welche ausgeführt wird, wenn die Transaktion durchlaufen wird
(optional)
Wenn Aktionen angegeben werden, so spricht man von einem „vollen Zustandsübergang“ und das Zustandsdiagramm bezeichnet man somit als Verhaltensmaschine (im Gegensatz zur Protokollmaschine, welche lediglich die Transitionen
inklusive Ereignis aufweisen).
Endzustand: Markiert das Ende des Systems – also die Terminierung. Es kann
pro Zustandsdiagramm mehrere Endzustände geben. Wie der Startzustand ist der
Endzustand ein Pseudozustand.
AnPr
3
UML - Zustandsdiagramm
Beispiel
Im Folgenden Beispiel werden die wichtigsten Elemente eines UML Diagramms dargestellt:
Seite 3
UML - Zustandsdiagramm
4
AnPr
Aufgabenstellung
Zeichnen Sie ein UML Zustandsdiagramm für eine Schleusenanlage, bei der Schiffe vom Unterwasser in Richtung Oberwasser bzw. umgekehrt transportiert werden können. Folgende Signalgeber existieren:
Signalname:
S1_open
S1_close
S2_open
S2_close
S_down
S_up
Schleuse 1 zu
Schleuse 1 auf
Schleuse 2 zu
Schleuse 2 auf
Oberwasser
Unterwasser
Verwenden Sie dabei folgende Elemente:
Seite 4
Bedeutung:
Knopf: „Öffne Schleuse 1“
Knopf: „Schließe Schleuse 1“
Knopf: „Öffne Schleuse 2“
Knopf: „Schließe Schleuse 2“
Knopf: „Senke Wasser“
Knopf: „Hebe Wasser“
Endschalter: „Schleuse 1 komplett zu“
Endschalter: „Schleuse 1 komplett auf“
Endschalter: „Schleuse 2 komplett zu“
Endschalter: „Schleuse 2 komplett auf“
Schwimmschalter: „Wasserstand ganz oben“
Schwimmschalter: „Wasserstand ganz unten“
AnPr
5
UML - Zustandsdiagramm
Lizenz
Diese(s) Werk bzw. Inhalt von Maik Aicher (www.codeconcert.de) steht unter einer
Creative Commons Namensnennung - Nicht-kommerziell - Weitergabe unter gleichen
Bedingungen 3.0 Unported Lizenz.
Seite 5