- I am a programmer.
- -- Kenneth Thompson
Seit längerem habe ich vor, kniffelige Sachverhalte in meinen Qt Programmen statt in Variablen und komplizierten Abfragen lieber in sogenannten Finite State Machines (in Deutsch auch
Endlicher Automat genannt) abzubilden. Diese Woche habe ich mich dazu aufgerafft, diese Vorbaben bei einer von mir programmierte Abfrage der FreeDB Datenbank via des
CDDB-Protokolls umzusetzen.
Irgendwie gab es immer einen Fall, in dem die Abfrage, die außerdem noch eine Schnittstelle zum Auslesen der CD-Daten via CD-Text verwendet, nicht so funktioniert hatte, wie ich es meinte. Habe ich mal schnell eben das eine Problem gelöst, habe ich meistens damit ein bis zwei andere Probleme geschaffen. Unterm Strich blieb immer mindestens ein Problem über. Also habe ich mir Gedanken gemacht, wie die Beschreibung der Funktion in einem Zustandsautomaten aussehen sollte. Nachdem ich dies graphisch beschrieben habe, habe ich es dann "von Hand" runter programmiert. Dabei sind mir noch Unzulänglichkeiten aufgefallen, die ich aber überraschend einfach in den Griff bekommen habe, durch das Hinzufügen eines neuen Zustandes und ein paar übersehener Übergänge. Das vorläufige Endergebnis habe ich hier noch einmal aufgezeichnet.
Wenn ich mir das Bild noch einmal anschaue, verstehe ich auch, warum viele Beispiele von State Machines Ampeln nachbilden: die Dinge neigen dazu, schnell an Komplexität zuzunehmen.
Kommentare