C ++ - Code für die Zustandsmaschine

Dies war eine Interviewfrage, die in C ++ codiert werden sollte:

Schreiben Sie einen Code für einen Verkaufsautomaten: Beginnen Sie mit einem einfachen Code, an dem nur eine Art von Artikel verkauft wird. Es genügen also zwei Zustandsvariablen: Geld und Inventar.

Meine Antwort:

Ich würde eine Zustandsmaschine verwenden, die ungefähr 3-4 Zustände hat. Verwenden Sie eine Aufzählungsvariable, um den Status anzugeben, und verwenden Sie eine switch case-Anweisung, bei der jeder Fall die Operationen aufweist, die für jeden Status ausgeführt werden müssen, und bleiben Sie in einer Schleife, um von einem Status in einen anderen zu wechseln.

Die nächste Frage:

Die Verwendung einer switch-case-Anweisung lässt sich jedoch nicht gut skalieren, wenn weitere Zustände hinzugefügt und vorhandene Operationen in einem Zustand geändert werden. Wie werden Sie mit diesem Problem umgehen?

Ich konnte diese Frage zu diesem Zeitpunkt nicht beantworten. Aber später dachte ich, ich kann wahrscheinlich:

unterschiedliche Funktionen für unterschiedliche Zustände haben (jede Funktion entspricht einem Zustand)einen habenstd::map from (string, function) wobei string state angibt, um die entsprechende state-Funktion aufzurufen.Die Hauptfunktion verfügt über eine Zeichenfolgenvariable (beginnend im Anfangszustand) und ruft die dieser Variablen entsprechende Funktion in einer Schleife auf. Jede Funktion führt die erforderlichen Operationen aus und gibt den neuen Status an die Hauptfunktion zurück.

Meine Fragen sind:

Was ist das Problem bei Switch-Case-Anweisungen in Bezug auf die Skalierbarkeit im Kontext von großen Softwaresystemen?Wenn ja, wird meine Lösung (die meiner Meinung nach derzeit etwas modularer ist als der lange lineare Code) das Problem lösen?

Die Interviewfrage erwartet Antworten von C ++ - Redewendungen und Entwurfsmustern für große Softwaresysteme.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage