Objektorientierung in der Steuerungstechnik

Geschwindigkeit und Robustheit steigern mit State Machines

05.01.2021

Der Gedanke, sich in der Steuerungstechnik an Design Patterns aus der Informatik zu orientieren, eröffnet nicht nur im Hinblick auf Optimierung der Rechengeschwindigkeit ganz neue Möglichkeiten.

Lesbarkeit

Beim Einsatz von State Machines erhöht die modulare Darstellung nicht nur die Übersichtlichkeit, sondern erleichtert auch die Wartbarkeit und Erweiterbarkeit, da Codesegmente wiederverwendet werden können. Der Code wird kompakter, strukturierter und gewinnt somit stylistisch deutlich hinzu - 'copy and paste'- Engineering hat keine Chance mehr.

Zudem lassen sich Konstrukte wie Mealy- und Moore-Automaten mit konventionellen Techniken kaum umsetzen. Aufgrund einer häufig hohen Anzahl von Knoten führt dies zu unübersichtlichen CASE- oder "if/then/else"-Anweisungen. Durch State Machines lassen sich deutlich komplexere Strukturen aufsetzen, die dennoch leichter zu kontrollieren sind.

Geschwindigkeit

Hinzu kommt die Reduzierung der Rechenschritte, da verschachtelte Fallunterscheidungen meist mit deutlich mehr Abfragen verbunden sind - gerade bei Echtzeit-Anwendungen verschenkte Zeit, die bei Rechenzeit-Optimierungen ausgeschöpft werden kann.

Robustheit

Nicht zuletzt sind State Machines ein wesentliches Mittel zur Steigerung der Robustheit von Software, da im Gegensatz zu z.B. "if/then/else"-Anweisungen die Anzahl ausführbarer Code-Pfade extrem eingeschränkt wird (nämlich auf die Anzahl der Kanten der State-Machine).

Anders herum ausgedrückt: Bei konventionellen Verzweigungen ist in der Regel der Großteil der Kombinationen aller theoretisch ausführbaren Code-Pfade nicht erlaubt. Die Ausführung dieser verbotenen Pfade wird durch eine übergeordnete Logik verhindert. Kleine Code-Änderungen können aber dazu führen, dass verbotene Code-Pfade (unbemerkt) aktiviert werden und zu im Zweifel schwer auffindbaren, evtl. sogar sporadischen, Fehlern führen können. Umso mehr je komplizierter der logische Ablauf ist. Bei einer State Machine bildet jeder Code-Pfad eine Notwendigkeit der Applikation ab – nicht erlaubte Pfade gibt es qua Design nicht. Ergo: State-Machines sind im Gegensatz zu (insbesondere verschachtelten) "if/then/else"-Anweisungen grundlegend robust.