Mi è stato dato un codice Java da guardare, che simula una gara automobilistica, di cui include un'implementazione di una macchina a stati di base. Questa non è una classica macchina a stati informatici, ma semplicemente un oggetto che può avere più stati e può passare da uno stato all'altro in base a una serie di calcoli.
Per descrivere solo il problema, ho una classe Car, con una classe enum nidificata che definisce alcune costanti per lo stato dell'auto (come OFF, IDLE, DRIVE, REVERSE, ecc.). All'interno di questa stessa classe di auto ho una funzione di aggiornamento, che sostanzialmente consiste in una grande istruzione switch che attiva lo stato corrente delle auto, esegue alcuni calcoli e quindi cambia lo stato delle auto.
Per quanto posso vedere, lo stato di Cars viene utilizzato solo all'interno della sua stessa classe.
La mia domanda è: è questo il modo migliore di gestire l'implementazione di una macchina a stati della natura sopra descritta? Sembra la soluzione più ovvia, ma in passato ho sempre sentito che "le istruzioni switch sono cattive".
Il problema principale che posso vedere qui è che l'istruzione switch potrebbe diventare molto grande quando si aggiungono più stati (se ritenuto necessario) e il codice potrebbe diventare ingombrante e difficile da mantenere.
Quale sarebbe una soluzione migliore a questo problema?
object.state = object.function(object.state);