TU Wien:Objektorientierte Modellierung VU (Kappel)/Kapitel Zustandsdiagramm

Aus VoWi
Zur Navigation springen Zur Suche springen

Folien; Wikifizierung (in Bearbeitung) von Media:TU Wien-Objektorientierte Modellierung VU (Kappel) - Zusammenfassung Zustandsdiagramm.pdf

Ein Zustandsdiagramm (state machine diagram) beschreibt die mögliche Folge von Zuständen eines Modellelements.

  • Zwischen Zuständen gibt es Zustandsübergänge (Transitionen) welche durch Ereignisse (Events) ausgelöst werden.
  • In Zuständen und Zustandsübergängen können Aktivitäten ausgeführt werden.

Zustände[Bearbeiten | Quelltext bearbeiten]

  • echter Zustand (System kann dauerhaft verweilen)
    • normaler Zustand
╭─────────╮
│Name     │
├─────────┤
│... / ...│
╰─────────╯
    • Endzustand ⦿
  • Pseudozustand
    • Startzustand ●
    • flacher/tiefer History-Zustand
    • Parallelisierungsknoten & Synchronisierungsknoten
    • Terminierungsknoten
    • Entscheidungsknoten

Aktivitäten[Bearbeiten | Quelltext bearbeiten]

Syntax: Eventname / Aktivität

Vordefinierte Events:

entry
Beim Eingang in den Zustand ausgeführt.
do
Wird kontinuierlich während des Zustands ausgeführt (kann aber auch zeitlich beschränkt sein).
exit
Beim Verlassen des Zustands ausgeführt.

Transitionen[Bearbeiten | Quelltext bearbeiten]

Ein Zustandsübergang (Transition) erfolgt, wenn das Ereignis eintritt (eine evt. andauernde Aktivität im Vorzustand wird unterbrochen) und die Bedingung (Guard) erfüllt ist.

Entscheidungsknoten sollten vermieden werden weil man bei ihnen hängen bleiben kann, wenn die Guard-Bedingungen nicht den gesamten Lösungsraum abdecken.

Bei Nicht-Erfüllung einer Bedingung geht das nicht konsumierte Ereignis verloren.

Defaults:

  • kein Ereignis: Aktivität abgeschlossen (in der Übung soll man immer ein Ereignis angeben)
  • keine Bedingung: [true]

Syntax: Ereignis(Argumente) [Bedingung] / Aktivität

keine spezifische Syntax für Aktivitäten

Ereignisarten[Bearbeiten | Quelltext bearbeiten]

CallEvent
Empfang einer Nachricht (Operationsaufruf), z.B set()
SignalEvent
Empfang eines Signals, z.B. ok-button-down
ChangeEvent
Eine Bedingung ist wahr, z.B. when(x < y), when(x = 1), when(taskDone)
TimeEvent
Zeitablauf oder Zeitpunkt, z.B. after(5 sec.), when(date=06.05.2019)

Innere Transitionen[Bearbeiten | Quelltext bearbeiten]

(= Transitionen die in Zuständen angegeben werden)

Werden wie äußere Transitionen von Ereignissen ausgelöst, verlassen den aktuellen Zustand aber nicht.

Sind äquivalent zu Selbsttransitionen, sofern keine entry / exit-Aktivitäten vorhanden.

Gleiche Aktivitäten können in den Zustand hineingezogen werden.

Komplexe Zustände[Bearbeiten | Quelltext bearbeiten]

= Zustände, die aus mehreren Subzuständen zusammengesetzt sind (geschachteltes Zustandsdiagramm)

default: Oder-Verfeinerung

In einem orthogonalem Zustand sind die Subzustände nebenläufig.

Gruppen-Transitionen
Transitionen des übergeordneten Zustands (Subzustände sind egal)

History-Zustand[Bearbeiten | Quelltext bearbeiten]

Merkt sich, in welchem Subzustand sich das System beim Verlassen eines übergeordneten Zustandes befunden hat, wenn es wieder in diesen Zustand zurückkehrt.

  • flacher History-Zustand H merkt sich eine Ebene
  • tiefer History-Zustand H* merkt sich alle Ebenen

Orthogonaler Zustand[Bearbeiten | Quelltext bearbeiten]

Und-Verfeinerung: wenn der orthogonale Zustand aktiv ist, ist in jeder seiner Regionen gleichzeitig ein Zustand aktiv. Regionen werden durch strichlierte Linien getrennt.