Kod C ++ dla maszyny stanów

To było pytanie kwalifikacyjne, które należy zakodować w C ++:

Napisz kod automatu: zacznij od prostego, w którym po prostu sprzedaje jeden typ przedmiotu. Czyli dwie zmienne stanu: pieniądze i zapasy.

Moja odpowiedź:

Używałbym maszyny stanów, która ma około 3-4 stanów. Użyj zmiennej wyliczeniowej, aby wskazać stan i użyć instrukcji case switch, gdzie każdy przypadek ma wykonać operacje odpowiadające każdemu stanowi i pozostać w pętli, aby przejść z jednego stanu do drugiego.

Następne pytanie:

Jednak użycie instrukcji case switch nie „dobrze skaluje” dla dodawania kolejnych stanów i modyfikowania istniejących operacji w stanie. Jak sobie poradzisz z tym problemem?

W tym czasie nie mogłem odpowiedzieć na to pytanie. Ale później pomyślałem: prawdopodobnie mogę:

mają różne funkcje dla różnych stanów (każda funkcja odpowiadająca stanowi)miećstd::map from (string, function) gdzie string wskazuje stan wywołania odpowiedniej funkcji stanu.Funkcja główna ma zmienną łańcuchową (zaczynając od stanu początkowego) i wywołuje funkcję odpowiadającą tej zmiennej w pętli. Każda funkcja wykonuje wymagane operacje i przywraca nowy stan do głównej funkcji.

Moje pytania to:

Jaki jest problem z oświadczeniami przełącznika w odniesieniu do skalowalności w kontekście dużych systemów oprogramowania?Jeśli tak, czy moje rozwiązanie (które obecnie uważam za nieco bardziej modułowe niż posiadanie długiego kodu liniowego) rozwiąże problem?

Pytanie wywiadu oczekuje odpowiedzi z idiomów C ++ i wzorców projektowych dla dużych systemów oprogramowania.

questionAnswers(6)

yourAnswerToTheQuestion