lunedì 1 marzo 2010

State Machine in Go-Language - 1^ parte

Comincia con questo articolo una serie di post che tratta un argomento molto attuale e utile. La vastità del mare nel quale ci apprestiamo a navigare avrebbe bisogno di molte e molte pagine di libro per questo ho deciso di spezzettare in più parti la trattazione.

L'utilizzo di macchine a stati mi sembra importante nella programmazione di sistema, soprattutto quando si parla di servizi.
Cosa succede allora quando le state machine incontrano Go?

Ma partiamo "dall'incomincio": ecco un esempio di macchina a stati semplicissima (e anche un po' inutile) che però fa capire in cosa consistono questi arcani.


Questo concetto è molto comodo quando si programma a oggetti. Come abbiamo visto nello scorso articolo il linguaggio Go possiede gli oggetti.
Creiamo dunque il nostro oggetto intorno allo stato interno che per comodità conterrà solo l'indice dello stato in cui ci troviamo.

type InternalState struct  {
myState int;
}

Se prendiamo come modello quello nella figura sopra lo stato interno InternalState dovrà essere inizializzato, poi passare nello stato 1 e successivamente nello stato 2 prima di terminare.

Componiamo allora in questo modo la funzione che andrà a inizializzare la nostra macchina a stati:
func (state * InternalState) Init (inputValue int)
{
state.myState = inputValue;
}

Avremo poi bisogno di due funzioni per ogni stato, una che effettua operazioni di entry ed exit:
func (state * InternalState) Stato1_Entry ()
{
}

func (state * InternalState) Stato1_Exit ()
{
}

func (state * InternalState) Stato2_Entry ()
{
}

func (state * InternalState) Stato2_Exit ()
{
}



Nel prossimo post vedremo invece come unire tutti i componenti appena creati per far transitare lo stato dell'oggetto da quello iniziale a quello finale passando per gli stati intermedi.

Spero inoltre di aver messo qualche pulce nell'orecchio per approfondire un argomento veramente interessante.

Nessun commento: