Beim Ent­wi­ckeln eines Produkts oder dem Pro­gram­mie­ren von Software helfen UML-Zu­stands­dia­gram­me dabei, den Le­bens­zy­klus der einzelnen Objekte bildhaft und ver­ständ­lich dar­zu­stel­len. Obwohl ein solches Diagramm nur aus wenigen Elementen besteht, trägt es bei einer korrekten Anwendung ent­schei­dend zum Erfolg des End­pro­dukts bei. Warum und in welchen Fällen sich ein solches Diagramm lohnt und wie Sie ein eigenes UML-Zu­stands­dia­gramm erstellen, erfahren Sie in den folgenden Ab­schnit­ten.

Was ist ein Zu­stands­dia­gramm?

Ein UML-Zu­stands­dia­gramm (auch: Zu­stands­über­gangs­dia­gramm, state diagram, state machine diagram) vi­sua­li­siert Zustände eines endlichen Automaten, also eines Ver­hal­tens­mo­dells bestehend aus Aktionen und Zuständen bzw. Zu­stands­über­gän­gen. Dabei sieht das Diagramm für jedes Objekt des Modells sowohl einen Anfangs- als auch einen End­zu­stand sowie min­des­tens ein Zwi­schen­zu­stand vor. Damit macht es das Zu­stands­dia­gramm möglich, den kom­plet­ten Le­bens­zy­klus eines Systems bzw. eines Teil­sys­tems oder einzelner Kom­po­nen­ten bzw. Klassen ab­zu­bil­den – egal, ob es sich bei­spiels­wei­se um die Prozesse einer Kaf­fee­ma­schi­ne, eines E-Book-Readers oder einer tech­ni­schen Kom­po­nen­te in einem Fahrzeug handelt.

Das Zu­stands­dia­gramm ist eines von insgesamt 14 Dia­gramm­ar­ten der Unified Modeling Language (UML) und der Systems Model Language (SysML). Es geht zurück auf ein Konzept von David Harel, das dieser im Jahr 1987 in der wis­sen­schaft­li­chen Arbeit „Sta­techarts: A Visual Formalism for Complex Systems“ ver­öf­fent­lich­te. Weitere UML-Dia­gramm­ty­pen sind bei­spiels­wei­se das An­wen­dungs­fall­dia­gramm und das Kom­po­nen­ten­dia­gramm.

Welchen Ein­satz­zweck haben UML-Zu­stands­dia­gram­me?

Wie bereits erwähnt, steht bei Zu­stands­dia­gram­men das Ziel im Fokus, das Verhalten eines Systems so genau wie möglich zu be­schrei­ben. Unter anderem soll die grafische Dar­stel­lung der einzelnen Prozesse am Ende folgende Fragen be­ant­wor­ten können:

  • Was passiert, wenn das Objekt sich in einem spe­zi­fi­schen Zustand befindet?
  • Welcher Zustand muss eintreten, damit es sein Verhalten ändert?
  • Was sind die aus­lö­sen­den Aktionen?
  • Welche Ei­gen­schaf­ten muss das Objekt haben, um den Zustand wechseln zu können?

UML-Zu­stands­dia­gram­me kommen in der Kon­se­quenz überall dort zum Einsatz, wo es sinnvoll ist, Zustände und Über­gangs­be­din­gun­gen für einen op­ti­mier­ten Ent­wick­lungs­pro­zess zu vi­sua­li­sie­ren. Besonders beliebt sind sie etwa bei der Kon­zep­ti­on ein­ge­bet­te­ter Systeme (Embedded Systems), da diese im Hin­ter­grund diverse au­to­ma­ti­sier­te Signale und Prozesse ver­ar­bei­ten, die es optimal auf­ein­an­der ab­zu­stim­men gilt. Ein Zu­stands­dia­gramm un­ter­stützt Ent­wick­ler in diesem Fall dadurch, dass es alle re­le­van­ten Steue­rungs- und Re­ge­lungs­funk­ti­on vi­sua­li­siert und so auf einen Blick verfügbar macht.

Einfach erklären lässt sich der Nutzen von Zu­stands­dia­gram­men am Beispiel der Wasch­ma­schi­nen­funk­ti­on „Aqua Stop“: Diese reguliert, wann die Was­ser­ver­sor­gung einer Wasch­ma­schi­ne un­ter­bro­chen wird. Im Rahmen eines UML-Zu­stands­dia­gramms kann sie als eigenes System ver­stan­den werden. Die grafische Dar­stel­lung macht in diesem Fall sichtbar, in welchem Zustand und unter welchen Be­din­gun­gen das Prinzip „Aqua Stop“ greift.

Hinweis

In viel­fäl­ti­gen In­dus­trie­zwei­gen wie der Me­di­zin­tech­nik oder dem Trans­port­we­sen werden Zu­stands­dia­gram­me zur Erklärung komplexer Sach­ver­hal­te ein­ge­setzt. Auch im Produkt- und Pro­jekt­ma­nage­ment sowie im Re­qui­re­ments En­gi­nee­ring finden Zu­stands­dia­gram­me Ver­wen­dung.

Zu­stands­dia­gramm: Aufbau und Kom­po­nen­ten im Überblick

UML-Zu­stands­dia­gram­me basieren zwar nur auf einigen wenigen Elementen – durch die ge­schick­te Kom­bi­na­ti­on dieser Kom­po­nen­ten lassen sich aber auch komplexe Zu­stands­ab­fol­gen pro­blem­los abbilden. Was sind die wich­tigs­ten Be­stand­tei­le und wie sieht der grund­le­gen­de Aufbau eines Zu­stands­dia­gramms aus?

Zustände

Zustände sind die zentrale Kom­po­nen­te eines Zu­stands­dia­gramms. Alle echten Zustände werden dabei immer mit einem Rechteck dar­ge­stellt, das ab­ge­run­de­te Ecken hat. Eine Tür kann bei­spiels­wei­se zwei Zu­stands­wer­te besitzen:

Bleibt man bei dem Zu­stands­dia­gramm-Beispiel zur Dar­stel­lung der Zustände einer Tür, muss in der Kon­se­quenz folgende Bedingung immer erfüllt sein:

  • Das Objekt befindet sich immer in einem der je­wei­li­gen Zustände: Die Tür ist also entweder offen oder ge­schlos­sen, aber niemals gleich­zei­tig offen und ge­schlos­sen.

In kom­ple­xe­ren Zu­stands­dia­gram­men kann das Rechteck in bis zu drei Bereiche un­ter­teilt werden, die Ver­hal­tens­spe­zi­fi­ka­tio­nen dar­stel­len (siehe Tran­si­ti­on).

Tran­si­ti­on: Wie wechselt ein Zustand?

Um von einem Zustand in den nächsten zu gelangen, muss ein Ereignis ausgelöst werden, das einen Übergang darstellt. Dieser Zu­stands­über­gang (Tran­si­ti­on) verbindet die Zustände mit­ein­an­der –visuell dar­ge­stellt mittels eines Pfeils. Es kann Be­din­gun­gen geben, damit ein solcher Übergang ausgelöst werden kann. Prin­zi­pi­ell wird in UML-Zu­stands­dia­gram­men zwischen inneren und äußeren Tran­si­tio­nen un­ter­schie­den. Während äußere Tran­si­tio­nen beim Zu­stands­dia­gramm-Erstellen ob­li­ga­to­risch sind, müssen innere Tran­si­tio­nen nicht unbedingt Be­stand­teil des Diagramms sein.

In dem Zu­stands­dia­gramm eines Fahr­stuhl­sys­tems kann bei­spiels­wei­se für die Aktion „Fahr­stuhl­tür schließen“ die Bedingung angegeben sein, dass diese zuvor min­des­tens fünf Sekunden geöffnet sein muss, bevor der Zustand von „auf“ nach „zu“ wechselt.

Äußere Tran­si­ti­on: Zustand wechselt

Bei den Tran­si­tio­nen wie im folgenden Beispiel eines UML-Zu­stands­dia­gramms handelt es sich um so­ge­nann­te äußere Tran­si­tio­nen. Dabei hat die Tran­si­ti­on zur Folge, dass das Objekt in einen anderen Zustand wechselt (entry/exit).

Beispiel: Wird der Alarm eines Ra­dio­we­ckers ausgelöst, wechselt der Zustand von „Alarm aktiviert“ zu „Alarm de­ak­ti­viert“. Der Zustand ändert sich.

Innere Tran­si­ti­on: Zustand bleibt un­ver­än­dert

Bei einer inneren Tran­si­ti­on wird keine Zu­stands­ver­än­de­rung ausgelöst, jedoch eine Aktivität.

Beispiel: In einem Buch­hal­tungs­sys­tem kann auf eine nicht bezahlte Rechnung das au­to­ma­ti­sche Ver­schi­cken einer Rechnung erfolgen (äußere Tran­si­ti­on). Wird als Reaktion auf einen fehlenden Ausgleich eine Mahnung ver­schickt, dann handelt es sich beim Ver­schi­cken der Mahnung um eine innere Tran­si­ti­on. Es erfolgt nämlich zwar eine Aktivität „Ver­schi­cken der Mahnung“, die Rechnung verbleibt aber bis auf weiteres in ihrem Zustand „unbezahlt“.

Er­eig­nis­se: Warum wechseln Zustände?

Er­eig­nis­se (Actions) können näher be­schrei­ben, unter welchen Be­din­gun­gen ein Zustand verlassen wird, um in den nächsten Zustand zu wechseln. Beim Übergang vom Start­zu­stand zum ersten echten Zustand ist es nicht notwendig, weitere Er­eig­nis­an­ga­ben sind optional. Wird kein Ereignis angegeben, bedeutet dies, dass es au­to­ma­tisch eintritt, sobald alle Ak­ti­vi­tä­ten in vor­he­ri­gen Zuständen ab­ge­schlos­sen sind.

Ein KEIN-Ereignis (Trigger/ANY-Trigger) besagt, dass das Ereignis grund­sätz­lich immer vorhanden ist. Er­eig­nis­se können als Ver­hal­tens­spe­zi­fi­ka­ti­on innerhalb des Zustands benannt werden oder innerhalb des Zu­stands­über­gangs benannt werden (siehe Tran­si­ti­on).

Ein aus­lö­sen­des Ereignis muss die folgenden drei Be­din­gun­gen erfüllen:

  • entry: Das Ereignis wird beim Eintritt in einen Zustand au­to­ma­tisch ausgelöst, d. h. in allen her­ein­kom­men­den Über­gän­gen.
  • exit: Das Ereignis wird beim Verlassen eines Zustandes ausgelöst, d. h. in allen ab­ge­hen­den Über­gän­gen.
  • do: Das Ereignis wird immer wieder ausgelöst, wenn der Zustand nicht ge­wech­selt wird.

Diese Ver­hal­tens­spe­zi­fi­ka­tio­nen können innerhalb des Zustands notiert werden, um ver­ein­facht dar­zu­stel­len, unter welchen Ver­hal­tens­wei­sen sich der Zustand ändert. Für die grafische Dar­stel­lung solcher Auslöser gibt es zwei Mög­lich­kei­ten: Einmal können sie innerhalb des ent­spre­chen­den Zustands aus­ge­wie­sen werden, wie folgendes Zu­stands­dia­gramm-Beispiel ver­deut­licht:

Al­ter­na­tiv können Er­eig­nis­se über dem Tran­si­ti­on-Pfeil angegeben werden:

Pseu­do­zu­stän­de

Wenn Steue­rungs­ele­men­te den Ablauf eines Zu­stands­au­to­ma­ten be­ein­flus­sen, aber keine Wer­te­be­le­gun­gen besitzen, be­zeich­net man diese in UML-Zu­stands­dia­gram­men als Pseu­do­zu­stän­de. UML 2, die aktuelle Version der Unified Modeling Language, kennt zehn ver­schie­de­ne dieser Pseu­do­zu­stän­de:

  • Start­zu­stand (engl. initial): keine ein­ge­hen­de und exakt eine aus­ge­hen­de Tran­si­ti­on, die den An­fangs­zu­stand preisgibt
  • End­zu­stand (engl. final): keine aus­ge­hen­de Tran­si­ti­on, Ende der Ver­hal­tens­ab­fol­ge
  • Gabelung (engl. fork): Auf­spal­tung in mehrere parallele Zustände
  • Syn­chro­ni­sa­ti­on (engl. join): Ver­ei­ni­gung von mehreren par­al­le­len Zuständen
  • Kreuzung (engl. junction): Kno­ten­punkt zum Hin­ter­ein­an­der­schal­ten mehrerer Tran­si­tio­nen
  • Ent­schei­dung (engl. choice): Knoten, von dem mehrere al­ter­na­ti­ve Tran­si­tio­nen auf Basis einer zuvor ge­trof­fe­nen Ent­schei­dung starten können
  • Ein­tritts­punkt (engl. entry point): Zu­sam­men­fas­sung gleich­ar­ti­ger, in einen zu­sam­men­ge­setz­ten Zustand ein­lau­fen­den Tran­si­tio­nen
  • Aus­tritts­punkt (engl. exit point): Zu­sam­men­fas­sung gleich­ar­ti­ger, aus einem zu­sam­men­ge­setz­ten Zustand aus­lau­fen­der Tran­si­tio­nen
  • Flache Historie (engl. shallow history): Spei­che­rung des letzten aktiven Un­ter­zu­stands eines zu­sam­men­ge­setz­ten Zustands
  • Tiefe Historie (engl. deep history): Spei­che­rung des letzten aktiven Un­ter­zu­stands aller Hier­ar­chie-Ebenen eines zu­sam­men­ge­setz­ten Zustands

Special: Un­ter­ge­ord­ne­tes Diagramm

Je nach Kom­ple­xi­tät sind Un­ter­zu­stän­de möglich, die ein de­tail­lier­tes Bild des Ob­jekt­zu­stan­des und der möglichen Ver­hal­tens­wei­sen geben. Solche kom­ple­xe­ren Er­klä­run­gen in UML-Zu­stands­dia­gram­men sind in ins­be­son­de­re in tech­ni­schen Kontexten die Regel.

  • composite state: Hierbei kann ein Zustand tief­ge­hen­der definiert werden.

Beispiel: Eine Tür kann sich im Zustand „auf“ und „zu“ befinden. Un­ter­zu­stän­de des Zustandes „zu“ könnten „auf­ge­schlos­sen“ oder „zu­ge­schlos­sen“ sein.

  • sub­ma­chi­ne state: Hierbei wird einem Zustand ein un­ter­ge­ord­ne­tes Zu­stands­dia­gramm zugefügt. Un­ter­zu­stän­de, die aus mehreren Sub­zu­stän­den bestehen, werden komplexe Zustände genannt. Die ver­schie­de­nen Sub­zu­stän­de können un­ab­hän­gig von­ein­an­der durch­lau­fen werden, aber auch in Beziehung zu­ein­an­der stehen.

Beispiel: In einem Smart­phone ist die We­cker­funk­ti­on nur eine von vielen Funk­tio­nen, mit denen mehrere Zustände verbunden sein können. Wenn mehrere Alarme für un­ter­schied­li­che Wo­chen­ta­ge und Uhrzeiten pro­gram­miert sind, handelt es sich dabei um Sub­zu­stän­de, die un­ab­hän­gig von­ein­an­der ablaufen.

Zu­stands­dia­gramm erstellen: Beispiel für ein einfaches Zu­stands­dia­gramm

Ein Zu­stands­dia­gramm lässt sich auf die un­ter­schied­lichs­ten Objekte anwenden. Im folgenden Beispiel sollen die ver­schie­de­nen Elemente anhand der gra­fi­schen Dar­stel­lung der Zustände einer Rechnung vor­ge­stellt werden. Die wich­tigs­ten Elemente eines UML-Zu­stands­dia­gramms werden wie folgt dar­ge­stellt:

Zu­sam­men­ge­setzt und auf das Beispiel über­tra­gen sieht das einfache Diagramm wie folgt aus:

Nach dem Start­punkt als Pseu­do­zu­stand befindet sich die Rechnung im Zustand „ge­schrie­ben“ (written). Es folgt im besten Falle die Tran­si­ti­on zum Zustandbezahlt“ (paid). Dieser Übergang kann noch näher be­schrie­ben werden, indem er mit dem Er­eig­nis­na­men „ver­schi­cken“ versehen wird.

Ist die Rechnung beglichen, befindet sich die Rechnung im Zustand bezahlt“. Bevor dieser Zustand erreicht wird, kann es nötig werden, eine „Mahnung“ (reminder) zu ver­schi­cken. Da die Rechnung hierbei nicht den Zustand ändert, es sich jedoch um eine Aktivität handelt, ist es eine innere Tran­si­ti­on. Wird die Rechnung nicht beglichen, werden bis zu drei Mahnungen ver­schickt.

Zum Hauptmenü