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.