DE | EN | CN

Ausführlicheres zur Zustandsmaschine

Die UML-Zustandsdiagramme gehen auf die von David Harel in den 1980er Jahren entwickelten Zustandsautomaten zurück.

Bei den Basiskonzepten haben Sie gelernt, dass Objekte Zustände besitzen. Das UML-Zustandsdiagramm ist ein Ausdrucksmittel, welches immer dann angewendet werden sollte, wenn im Mittelpunkt der Betrachtung ein komplexes zustandsorientiertes Problem steht. Des Weiteren ist die softwareseitige Implementation einer Zustandsmaschine nicht trivial. SiSy ist in der Lage, aus dem UML-Zustandsdiagramm den entsprechenden Quellcode zu generieren. Die automatisch generierte Zustandsmaschine verringert den Aufwand und reduziert die Fehleranfälligkeit gegenüber einer manuellen Implementation enorm. Zustandsmaschinen sind oft zyklisch und laufen, solange ein Objekt existiert. Die Zustandsänderungen sind in der Regel an Ereignisse und Bedingungen geknüpft. Das Zustandsdiagramm zeigt nur Zustände und Zustandswechsel eines Objektes, jedoch keine objektübergreifenden Sachverhalte. Ein Objekt kann aber durchaus mehrere Zustandsmaschinen gleichzeitig, also parallel, besitzen.

Zustandsdiagramme zeigen mögliche Zustände und Zustandswechsel EINES Objektes.

Das folgende Zustandsdiagramm zeigt welchen Zustand und welche Zustandswechsel ein Objekt mindestens hat auch ohne eine explizit realisierte Zustandsmaschine.

Die wichtigsten Modellierungselemente des Zustandsdiagramms sind:

  • Zustände
  • Zustandsübergänge
  • Pseudozustände: Startknoten, Endknoten
  • Zustandsaktionen: entry, do, exit

Zustände

Ein Objektzustand repräsentiert zu einem oder mehreren determinierten, konkreten Eigenschaftswerten (Zustandsattribute) zuordenbares Verhalten (Aktivitäten). Die dem Zustand zuordenbaren Aktivitätstypen sind zum Beispiel:

  • entry, einmaliges Verhalten beim Einnehmen des Zustandes
  • do, wiederholtes Verhalten während des Zustandes
  • exit, einmaliges Verhalten beim Verlassen des Zustandes

Die Notation von Zuständen erfolgt wie bei der Aktion und Aktivität als Rechteck mit abgerundeten Ecken. Zusätzlich ist es üblich, den Zustand detailliert darzustellen. Ähnlich wie bei der Klasse wird das Zustandssymbol unterteilt und es können zustandsbestimmende Attribute und Aktionen angegeben werden. Wichtig ist, dass ein Zustand nicht als etwas statisches angesehen wird. Ein Objekt führt während es sich in einem Zustand befindet auch immer das dem zustand zugeordnete Verhalten aus. Deshalb ist es üblich die Zustandsaktivitäten auch mit zu modellieren.

Pseudozustände

inital node, Startknoten

Der Startknoten repräsentiert in nicht hierarchisierten Zustandsdiagrammen im einfachsten Fall den Zustand bevor das Objekt existiert. Zweckmäßigerweise sollte immer nur eine ausgehende Kante modelliert werden. Die Notation des Startknotens ist ein kleiner, ausgefüllter Kreis.

final node, Endknoten

Ein Endknoten repräsentiert in einer einfachen Zustandsmaschine den Zustand nach dem das Objekt zerstört wurde. Es ist möglich und auch üblich Zustandsmaschinen als endlose zyklische Automaten zu modellieren. In dem Falle wird das zerstören des Objektes nicht modelliert und der Endknoten fehlt in der Darstellung. Die Notation des Endknotens ist ein kleiner ausgefüllter Kreis im Kreis.

Zustandsübergänge

transition, Zustandsübergang

Der Übergang von einem Zustand in den anderen bedeutet in jedem Fall Verhalten. Es passiert also etwas und der Übergang verbraucht auch Zeit. Es wird konkretes Verhalten ausgeführt und damit finden wir die Zustandsübergänge im Programmcode als eine entsprechende Codesequenz. Die Zustandsübergänge können durch Ereignisse und Bedingungen ausgelöst werden. Das Ereignis spezifiziert wann der Übergang stattfindet. Letztlich ist ein Ereignis im Quellcode eine Operation der Klasse des Objektes. In eingebetteten Systemen kann das auch eine dem Objekt zugeordnete Interrupserviceroutine (ISR) sein. Bedingungen (Guards) drücken aus unter welchen Konditionen ein Übergang zulässig ist. Die Notation von Zustandsübergängen erfolgt durch eine gerichtet Linie (Pfeil) mit Beschriftung (Ereignis [Bedingung] / Aktion).

Mit dem Zustandsdiagramm in SiSy programmieren

Der folgende ScreenCast vermittelt Ihnen einen Eindruck davon, wie mit dem Modellierungswerkzeug SiSy lauffähige Zustandsdiagramme erstellt werden können. Dafür sind in diesem Beispiel keine tiefgreifenden C++ Kenntnisse nötig. Viel Spaß beim nachvollziehen und erweitern ;-)

Zurück

Notationsübersicht

  • Zustand

  • Beginn

  • Ende

  • Transition