Zustandsdiagramm

Neulinge im Zustandsautomaten-Formalismus verwechseln Zustandsdiagramme oft mit Flussdiagrammen. Die folgende Abbildung zeigt einen Vergleich zwischen einem Zustandsdiagramm und einem Flussdiagramm. Ein Zustandsautomat (Tafel (a)) führt Aktionen in Reaktion auf explizite Ereignisse aus. Im Gegensatz dazu benötigt das Flussdiagramm (Tafel (b)) keine expliziten Ereignisse, sondern geht nach Abschluss von Aktivitäten automatisch von Knoten zu Knoten in seinem Graphen über.

Zustandsdiagramm (a) und Flussdiagramm (b)

Knoten von Flussdiagrammen sind Kanten im induzierten Graphen von Zuständen.

Der Grund dafür ist, dass jeder Knoten in einem Flussdiagramm einen Programmbefehl repräsentiert.Ein Programmbefehl ist eine auszuführende Aktion, also kein Zustand, aber wenn er auf den Programmzustand angewendet wird, führt er zu einem Übergang in einen anderen Zustand.

Im Detail stellt das Quelltext-Listing einen Programmgraphen dar.

Das Ausführen des Programmgraphen (Parsen und Interpretieren) führt zu einem Zustandsgraphen.

Jeder Programmgraph induziert also einen Zustandsgraphen.

Die Umwandlung des Programmgraphen in den zugehörigen Zustandsgraphen wird „Entfaltung“ des Programmgraphen genannt.

Der Programmgraph ist eine Folge von Befehlen.

Wenn es keine Variablen gibt, dann besteht der Zustand nur aus dem Programmzähler, der festhält, wo im Programm wir uns während der Ausführung befinden (was der nächste Befehl ist).

In diesem Fall steht der Programmzähler vor der Ausführung eines Befehls an irgendeiner Position (Zustand vor der Ausführung des Befehls).

Die Ausführung des Befehls bewegt den Programmzähler zum nächsten Befehl.Da der Programmzähler der gesamte Zustand ist, folgt daraus, dass die Ausführung des Befehls den Zustand geändert hat.

Betrachten wir nun den vollständigen Fall, wenn Variablen existieren und von den ausgeführten Programmbefehlen beeinflusst werden.

Dann ändert sich zwischen verschiedenen Programmzählerpositionen nicht nur der Programmzähler, sondern auch Variablen können aufgrund der ausgeführten Befehle Werte ändern.Folglich bedeutet selbst das erneute Aufrufen eines Programmbefehls (z. B. in einer Schleife) nicht, dass sich das Programm im gleichen Zustand befindet.

Im vorherigen Fall wäre das Programm im gleichen Zustand, weil der gesamte Zustand nur der Programmzähler ist, so dass es ausreicht, wenn der Programmzähler auf die gleiche Position (nächster Befehl) zeigt, um anzugeben, dass wir uns im gleichen Zustand befinden.Wenn der Zustand jedoch Variablen enthält, dann können wir uns, wenn diese ihren Wert ändern, an derselben Programmstelle mit unterschiedlichen Variablenwerten befinden, also in einem anderen Zustand im Zustandsraum des Programms.

Der Begriff „Entfaltung“ stammt von dieser Vervielfachung der Stellen bei der Erzeugung des Zustandsgraphen aus dem Programmgraphen.

Ein repräsentatives Beispiel ist eine do-Schleife, die einen Zähler inkrementiert, bis er überläuft und wieder 0 wird.Obwohl die do-Schleife denselben Inkrement-Befehl iterativ ausführt, der Programmgraph also einen Zyklus durchläuft, ist in seinem Zustandsraum kein Zyklus, sondern eine Linie, da der Zustand die Programmstelle ist (hier zyklisch), kombiniert mit dem Zählerwert, der streng steigend ist (bis zum Überlauf), so dass verschiedene Zustände nacheinander besucht werden, bis zum Überlauf.Nach dem Überlauf wird der Zähler wieder 0, so dass der Anfangszustand im Zustandsraum erneut besucht wird, wodurch ein Zyklus im Zustandsraum geschlossen wird (unter der Annahme, dass der Zähler auf 0 initialisiert wurde).

Die obige Abbildung versucht, diese Umkehrung der Rollen zu zeigen, indem die Bögen der Zustandsdiagramme mit den Verarbeitungsstufen des Flussdiagramms ausgerichtet werden.

Sie können ein Flussdiagramm mit einem Fließband in der Fertigung vergleichen, da das Flussdiagramm den Ablauf einer Aufgabe vom Anfang bis zum Ende beschreibt (z. B., die Umwandlung der Quellcode-Eingabe in die Objektcode-Ausgabe durch einen Compiler). Ein Zustandsautomat hat im Allgemeinen keine Vorstellung von einer solchen Progression. Der oben in diesem Artikel gezeigte Tür-Zustandsautomat befindet sich beispielsweise im Zustand „geschlossen“ nicht in einem fortgeschritteneren Stadium als im Zustand „geöffnet“; er reagiert einfach anders auf die Ereignisse „Öffnen/Schließen“. Ein Zustand in einem Zustandsautomaten ist ein effizienter Weg, um ein bestimmtes Verhalten zu spezifizieren, und nicht eine Stufe der Verarbeitung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.