Código C ++ para máquina de estado
Esta foi uma questão de entrevista a ser codificada em C ++:
Escrever código para uma máquina de venda automática: Comece com um simples, onde apenas vende um tipo de item. Então, duas variáveis de estado: dinheiro e estoque, seriam suficientes.
Minha resposta:
Eu usaria uma máquina de estado que tem cerca de 3-4 estados. Use uma variável enum para indicar o estado e use uma instrução switch case, em que cada caso tem as operações a serem realizadas correspondentes a cada estado e permanece em um loop para passar de um estado para outro.
A próxima pergunta:
Mas o uso de uma instrução switch case não "escala bem" para mais estados sendo adicionados e modificando as operações existentes em um estado. Como você vai lidar com esse problema?
Eu não pude responder a essa pergunta naquele momento. Mas depois pensei, eu provavelmente posso:
tem funções diferentes para estados diferentes (cada função corresponde a um estado)tem umstd::map
from (string, function) onde string indica estado para chamar a função de estado correspondente.A função main tem uma variável de string (começando no estado inicial) e chama a função correspondente a essa variável em um loop. Cada função faz as operações necessárias e retorna o novo estado para a função principal.Minhas perguntas são:
Qual é o problema com as declarações de caso de switch no que diz respeito à escalabilidade no contexto de sistemas de software de grande escala?Em caso afirmativo, a minha solução (que atualmente sinto ser um pouco mais modular do que ter um código linear longo) resolverá o problema?A questão da entrevista está esperando respostas de idiomas C ++ e padrões de projeto para sistemas de software de grande escala.