Zustandsdiagramm-Beispiele
Drei Zustandsautomaten, die Sie sofort übernehmen können - ein Bestell-Lebenszyklus, ein Redaktions-Workflow mit Rücksprung und das Fragment, das zeigt, warum ein wartender Zustand kein hängender ist.
8 Min. LesezeitUML 2.5.116 von 35
Die kurze Antwort
- Ein Bestell-Lebenszyklus ist das Beispiel zum Übernehmen: sechs Zustände, ein Auslöser je Übergang und zwei verschiedene Enden statt eines.
- Mehrere Endzustände sind normal. Storniert und zugestellt sind beide abgeschlossen, und beide in dieselbe umringte Scheibe zu führen verwischt den Unterschied.
- Ein Timeout ist ein Übergang mit einem Zeitereignis als Auslöser - after(72 Stunden). Ein Wächter ist unnötig, der Zeitablauf selbst löst aus.
- Ein Zustand ohne aktivierten Übergang ist untätig, nicht defekt. Das ist das Gegenteil des Aktivitätsdiagramms, wo ein Token ohne Ausgang eine Blockade ist.
01Beispiel 1: der Lebenszyklus einer Bestellung#
Hat eine Tabelle in Ihrer Datenbank eine status-Spalte, steckt dieses Diagramm bereits implizit im Code - es ist nur über ein Dutzend Wächterklauseln verteilt, statt einmal gezeichnet. Es explizit zu machen ist die billigste Fehlersuche, die ein Zustandsautomat bietet.
Lesen Sie die Übergänge statt der Kästen. Jeder trägt den Auslöser, der ihn verursacht - checkout, pay, dispatch, deliver - und einer trägt hinter einem Schrägstrich eine Wirkung: dispatch / print label. Diese Beschriftungen sind der Inhalt. Ein Diagramm aus sechs abgerundeten Kästen mit unbeschrifteten Pfeilen sagt nur, dass sich Dinge ändern, und das wusste jeder schon.
Die zwei Endzustände sind Absicht. Storniert und Zugestellt sind beide endgültig und nicht dasselbe Ergebnis, und für beide eine umringte Scheibe zu zeichnen würde sagen, die Bestellung sei zu Ende, ohne zu sagen, wie. Nichts in UML begrenzt Sie auf einen.
02Beispiel 2: ein Ablauf, der rückwärts schleift#
Echte Abläufe laufen selten in eine Richtung. Etwas wird abgelehnt, geht zurück und kommt erneut - und im Rückwärtsübergang wohnen meist die interessanten Regeln.
Der Übergang revise von Abgelehnt nach Entwurfist es, was daraus einen Zustandsautomaten statt einer Checkliste macht. Er sagt, dass ein abgelehnter Artikel nicht fertig ist - er tritt wieder in denselben Zyklus ein, und jeder Zähler wie „zweimal abgelehnt heißt eskalieren“ hängt an diesem Pfeil und nicht an einem Zustand.
Beachten Sie, dass Abgelehnt einen Ausgang hat und Veröffentlicht nicht. Ein Zustand ohne ausgehenden Übergang und ohne Endzustand dahinter behauptet, das Objekt bleibe für immer dort - gelegentlich wahr und häufiger eine Auslassung. Jeden Blattzustand daraufhin zu prüfen ist ein Zwei-Minuten-Review, das echte Lücken findet.
Die Auslösernamen sind Ereignisse aus dem Vokabular der Domäne - submit, approve, reject, revise - keine Methodennamen. Das hält das Diagramm für die Redakteure lesbar, denen der Prozess gehört, und das ist das Publikum, das Ihnen sagen kann, dass es falsch ist.
03Beispiel 3: zwei Ausgänge, die keine Entscheidung sind#
Die häufigste Verwirrung beim Wechsel von Aktivitätsdiagrammen zu Zustandsautomaten ist, was zwei Pfeile aus einem Kasten bedeuten.
Das sind zwei Auslöser, nicht zwei Zweige einer Entscheidung. Die Bestellung sitzt unbegrenzt in Zahlung ausstehend; wohin sie geht, entscheidet das Ereignis, das zuerst eintrifft - pay oder das Zeitereignis timeout(72h). Nichts muss erschöpfend sein und es gibt kein [else], weil Warten ein legitimer Ausgang ist.
Das ist das Gegenteil eines Aktivitätsdiagramms, wo ein Token, das eine Entscheidung ohne freigeschalteten Wächter erreicht, ein stehengebliebener Prozess ist. Gleich aussehende Geometrie, entgegengesetzte Semantik - weshalb die Wahl zwischen beiden Notationen bewusst statt aus Gewohnheit getroffen werden sollte.
04Wann man überhaupt einen zeichnet#
Ein Zustandsautomat ist billig zu zeichnen und teuer zu pflegen, also lohnt sich die Frage, ob das Objekt überhaupt einen Lebenszyklus hat, vor dem ersten Kasten.
Dazu greifen, wenn
- Das Objekt hat ein Statusfeld mit mehr als zwei Werten und Regeln über zulässige Wechsel.
- Manche Übergänge sind verboten und das Verbot zählt - Erstattungen, Stornierungen, Freigaben.
- Mehrere Dienste fassen dasselbe Objekt an und sind uneins darüber, was es als Nächstes darf.
- Fristen oder Verfall ändern das Objekt, ohne dass jemand daran handelt.
Zu etwas anderem greifen, wenn
- Ein Prozess über mehrere Objekte und Rollen - das ist ein Aktivitätsdiagramm.
- Eine Klasse, deren Status aus anderen Feldern abgeleitet statt gespeichert wird.
- Die Konfiguration einer Workflow-Engine, die bereits ein aufgeschriebener Zustandsautomat ist.
- Ein Diagramm für zwei Objekte. Zeichnen Sie einen Automaten je Lebenszyklus.
Spannt der Prozess mehrere Beteiligte auf statt des Lebens eines Objekts, wollen Sie ein Aktivitätsdiagramm oder, für ein Fachpublikum, BPMN. Der Test ist einfach: können Sie das eine Ding nicht benennen, dessen Zustände das sind, ist es kein Zustandsautomat.
05Was zu behalten ist#
In je einer Zeile
- 01Die Übergangsbeschriftungen sind der Inhalt. Unbeschriftete Pfeile zwischen Zuständen sagen nichts.
- 02Mehrere Endzustände sind normal - storniert und zugestellt sind beide endgültig und nicht dasselbe.
- 03Die fehlenden Pfeile sind, wo die Bugs sind. Prüfen Sie jedes Paar, das Sie nicht gezeichnet haben.
- 04Zwei Pfeile aus einem Zustand sind zwei Auslöser, keine zwei Zweige. Nichts braucht ein [else].
- 05Ein Zustandsautomat je Objekt mit echtem Lebenszyklus. Ein Prozess über Rollen hinweg ist ein Aktivitätsdiagramm.
06Häufige Fragen#
Was ist ein gutes Beispiel für ein Zustandsdiagramm?
Ein Bestell-Lebenszyklus: Warenkorb, aufgegeben, bezahlt, versandt, zugestellt, mit einem Storniert-Zweig ab aufgegeben. Sechs Zustände, ein Auslöser je Übergang und zwei verschiedene Enden decken alles ab, was die Notation üblicherweise leisten muss.
Darf ein Zustandsdiagramm mehrere Endzustände haben?
Ja, und meistens sollte es das. Eine stornierte und eine zugestellte Bestellung sind beide abgeschlossen, aber nicht dasselbe Ergebnis, und beide in eine umringte Scheibe zu führen verwischt den Unterschied. UML begrenzt die Zahl der Endzustände nicht.
Wie modelliert man ein Timeout in einem Zustandsdiagramm?
Als Übergang, dessen Auslöser ein Zeitereignis ist, geschrieben etwa timeout(72h) oder after(72 Stunden). Er verlässt den Zustand, in dem das Objekt wartet, und zeigt auf das Ergebnis des Ablaufs. Ein Wächter ist unnötig - der Zeitablauf selbst ist der Auslöser.
Was passiert, wenn kein Übergang aus einem Zustand aktiviert ist?
Nichts, und das ist richtig. Ein Zustandsautomat wartet in seinem Zustand, bis ein Auslöser eintrifft; ein Zustand ohne aktivierten Übergang ist untätig, nicht defekt. Das ist das Gegenteil eines Aktivitätsdiagramms, wo ein Token ohne Ausgang einen blockierten Prozess bedeutet.
Braucht jede Klasse einen eigenen Zustandsautomaten?
Höchstens einen, und nur für Klassen mit echtem Lebenszyklus. Hat eine Klasse eine Statusspalte mit mehr als zwei Werten und Regeln, welcher Wechsel erlaubt ist, zeichnen Sie ihn. Ist der Status abgeleitet oder wird er nur einmal gesetzt, bringt ein Automat nichts.
In dieser Reihe
- 01Was ist UML?
- 02UML-Symbole
- 03Diagramm auswählen
- 04Klassendiagramme
- 05Klassendiagramm-Beispiele
- 06Klassendiagramm zeichnen
- 07Klassendiagramm-Symbole
- 08Sequenzdiagramme
- 09Sequenzdiagramm-Beispiele
- 10Sequenzdiagramm zeichnen
- 11Anwendungsfalldiagramme
- 12Anwendungsfall-Beispiele
- 13Aktivitätsdiagramme
- 14Aktivitätsbeispiele
- 15Zustandsdiagramme
- 16Zustandsdiagramm-Beispiele
- 17Komponentendiagramme
- 18Komponenten-Beispiele
- 19Komponentendiagramm zeichnen
- 20Komponenten-Symbole
- 21Verteilungsdiagramme
- 22Verteilungsbeispiele
- 23Objektdiagramme
- 24Paketdiagramme
- 25Kompositionsstrukturdiagramme
- 26Kommunikationsdiagramme
- 27Sequenz vs Kommunikation
- 28Zeitverlaufsdiagramme
- 29Interaktionsübersichtsdiagramme
- 30Profildiagramme
- 31UML mit KI
- 32E-Commerce-Beispiel
- 33Banken-Beispiel
- 34Microservices-Beispiel
- 35AWS-Beispiel
Passend dazu
Verhaltensdiagramme
Verhaltensdiagramme
Grundlagen
Strukturdiagramme
Strukturdiagramme
Strukturdiagramme