In generale, una macchina a stati è un qualsiasi dispositivo che memorizza lo stato di qualcosa in un dato momento e può operare sull'input per cambiare lo stato e / o causare un'azione o un'uscita per un dato cambiamento. Un computer è fondamentalmente una macchina a stati e ogni istruzione della macchina è un input che cambia uno o più stati e può causare altre azioni. Il registro dei dati di ogni computer memorizza uno stato. La memoria di sola lettura da cui viene caricato un programma di avvio memorizza uno stato (il programma di avvio stesso è uno stato iniziale). Il sistema operativo è esso stesso uno stato e ogni applicazione che viene eseguita inizia con uno stato iniziale che può cambiare quando inizia a gestire l'input. Pertanto, in qualsiasi momento, un sistema informatico può essere visto come un insieme molto complesso di stati e ogni programma in esso contenuto come una macchina a stati. In pratica, tuttavia, le macchine a stati vengono utilizzate per sviluppare e descrivere specifiche interazioni di dispositivi o programmi.
Per riassumere, una macchina a stati può essere descritta come:
- Uno stato iniziale o una registrazione di qualcosa memorizzato da qualche parte
- Una serie di possibili eventi di input
- Un insieme di nuovi stati che possono derivare dall'input
- Un insieme di possibili azioni o eventi di output che risultano da un nuovo stato
Nel loro libro Modellazione orientata agli oggetti in tempo reale, Bran Selic e Garth Gullekson vedono una macchina a stati come:
- Un insieme di eventi di input
- Un insieme di eventi di output
- Un insieme di stati
- Una funzione che mappa gli stati e l'input sull'output
- Una funzione che mappa stati e ingressi su stati (chiamata funzione di transizione di stato)
- Una descrizione dello stato iniziale
Una macchina a stati finiti è quella che ha un numero limitato o finito di stati possibili. (Una macchina a stati infiniti può essere concepita ma non è pratica.) Una macchina a stati finiti può essere utilizzata sia come strumento di sviluppo per affrontare e risolvere problemi sia come modo formale di descrivere la soluzione per sviluppatori e manutentori di sistema successivi. Esistono diversi modi per mostrare le macchine a stati, da semplici tabelle a illustrazioni animate graficamente.