MVC e Simulation Core
In questa sezione viene presentato il design di dettaglio del Model
, View
e Controller
della simulazione.
Model
Il Model
è responsabile della gestione dello stato della simulazione in maniera funzionale e sicura.
Si occupa di applicare le logiche di aggiornamento dello stato in risposta agli eventi generati dal Controller
.
Definizione dello stato
State
definisce la struttura dello stato della simulazione, che comprende i seguenti campi:
simulationTime
: durata totale prevista (opzionale, per supportare simulazioni infinite);elapsedTime
: tempo trascorso dall’inizio della simulazione;dt
: delta time della simulazione (intervallo temporale di ciascuno step);simulationSpeed
: velocità corrente della simulazione;simulationRNG
: generatore di numeri casuali (RNG
) usato per introdurre elementi stocastici nei comportamenti dei robot;simulationStatus
: stato corrente della simulazione;environment
: rappresenta l’ambiente della simulazione, contenente le entità validate (di tipoValidEnvironment
).
Vedere la sezione Generatore di numeri casuali, Environment per maggiori dettagli.
SimulationSpeed
SimulationSpeed
definisce le possibili velocità della simulazione:
Valore | Descrizione | Tempo per tick |
---|---|---|
SLOW | Velocità ridotta | 200 ms |
NORMAL | Velocità standard | 100 ms |
FAST | Velocità aumentata | 10 ms |
SUPERFAST | Velocità massima (headless mode) | 0 ms |
SimulationStatus
SimulationStatus
rappresenta i possibili stati della simulazione:
Valore | Descrizione |
---|---|
RUNNING | Simulazione in esecuzione |
PAUSED | Simulazione in pausa |
STOPPED | Simulazione fermata manualmente |
ELAPSED_TIME | Raggiunto il tempo massimo previsto della simulazione |
Logica di aggiornamento dello stato
L’interfaccia del Model
espone il metodo update
, che accetta lo stato corrente e una funzione di aggiornamento.
Questa funzione viene applicata per produrre un nuovo stato, garantendo così l’immutabilità e la consistenza della
simulazione.
Per i dettagli di implementazione riguardante il Model, si rimanda alla sezione ModelModule.
Controller
Il Controller
ha il compito di orchestrare la simulazione, coordinando l’interazione tra Model
e View
.
Le sue responsabilità principali sono:
- avviare la simulazione partendo da uno stato iniziale;
- gestire il ciclo di esecuzione della simulazione;
- elaborare gli eventi prodotti dal sistema o dai robot;
- aggiornare la
View
in base allo stato corrente; - richiedere al
Model
l’applicazione delle logiche di aggiornamento appropriate.
Avvio della simulazione
- Inizializza le strutture necessarie alla gestione degli eventi.
- Prepara la
View
per la rappresentazione grafica. - Attiva i comportamenti dei robot per generare azioni iniziali.
Ciclo di simulazione
- Gestisce gli eventi ricevuti.
- Aggiorna lo stato tramite il
Model
. - Aggiorna la
View
per riflettere lo stato corrente. - Controlla le condizioni di terminazione (stop manuale o tempo massimo raggiunto).
Gestione degli eventi
- Traduce gli eventi in funzioni di aggiornamento dello stato.
- Delega al
Model
l’applicazione delle logiche di trasformazione (avanzamento del tempo, pausa, stop, azioni dei robot, ecc.).
Di seguito è illustrato il diagramma dei possibili eventi gestiti dal Controller
e un tipo di messaggio usato per
utilità:
LogicsBundle
Per mantenere separata la business logic dal Controller
, le logiche di aggiornamento sono raccolte in un
LogicsBundle
, che contiene funzioni di:
- avanzamento del tempo;
- gestione della velocità;
- pausa/ripresa/stop della simulazione;
- aggiornamento del generatore casuale;
- applicazione delle azioni proposte dai robot.
Il Controller
utilizza queste logiche per aggiornare lo stato in risposta agli eventi, delegando l’effettiva
trasformazione al Model
.
Di seguito è riportato il diagramma LogicsBundle
:
Per i dettagli di implementazione del Controller, si rimanda alla sezione ControllerModule.
View
La View
ha il compito di gestire la rappresentazione della simulazione e l’interazione con l’utente.
Le responsabilità principali della View
si possono sintetizzare in tre fasi:
- inizializzazione:
- prepara l’interfaccia (grafica o testuale);
- collega la coda degli eventi, in modo da permettere all’utente o al sistema di inviare comandi alla simulazione;
- aggiornamento:
- riceve lo stato corrente dal
Controller
; - visualizza l’ambiente e le entità aggiornate, riflettendo l’evoluzione della simulazione in tempo reale;
- riceve lo stato corrente dal
- terminazione:
- chiude l’interfaccia alla fine della simulazione (nel caso della modalità grafica);
- esegue azioni dedicate quando viene raggiunto il tempo massimo (ad esempio, mostrando l'ambiente dello stato finale).
In questo modo la View
resta un modulo indipendente e intercambiabile; quindi è possibile fornire diverse implementazioni (ad
esempio CLI o GUI) senza alterare le logiche di simulazione.
Per ulteriori dettagli sull’implementazione della:
- View, si rimanda alla sezione ViewModule;
- modalità CLI, si veda la sezione CLIComponent.
- modailià GUI, si veda la sezione SimulationView.