ich stehe vor dem Problem, einen Zustandsautomaten zu implementieren. Ich kenne den State Pattern, empfinde ihn in meiner Situation aber eher als Hemmschuh denn als Heilsbringer; evtl. übersehe ich da etwas und daher möchte ich hier mal um Meinungen bitten.
Die Zielsprache wird (altes) C++ sein.
Wichtig für mich ist, dass die möglichen nächsten Übergänge auswertbar sind, d.h. ich muss später in einer GUI nur genau diese anzeigen und mit der zugehörigen Aktion verknüpfen. Über Buttons kann der Benutzer später die Aktionen wählen.
In Python habe ich mal exemplarisch nachgebaut, wie ich mir eine Lösung vorstellen kann:
Code: Alles auswählen
#!/usr/bin/env python
# eigentlich verschiedene Klassen
TRANSITIONS = {
"Kommen": ["Arbeit beginnen", "Gehen"],
"Gehen": ["Kommen"],
"Arbeit beginnen": ["Arbeit beenden"],
"Arbeit beenden": ["Arbeit beginnen", "Gehen"]
}
class StateMachine:
def __init__(self, transitions, last_transition):
self.transitions = transitions
self.last_transition = last_transition
@property
def next_transitions(self):
return self.transitions[self.last_transition]
def execute(self, transition):
self.last_transition = transition
# eigentlich transition.do_something()
print("Doing: '{}'".format(transition))
def run(machine):
while True:
print("\nAuswahl des nächsten Schritts")
for index, name in enumerate(machine.next_transitions, 1):
print(index, name)
next_transition = int(input("Aktion: ")) - 1
print()
machine.execute(machine.next_transitions[next_transition])
def main():
run(StateMachine(TRANSITIONS, "Gehen"))
if __name__ == "__main__":
main()
Übersehe ich hier etwas, oder ließe sich der Ansatz so nicht auch einfach in C++ umsetzen? Wo läge ein Nachteil bei meinem Ansatz und ein Vorteil beim "Lehrbuch"-Ansatz?