Articles Tagués ‘machine d’état’

Bonjour,

Nous avons vu dans des articles précédents la file d’attente (FIFO), ainsi que le design pattern de base, la machine d’état. Nous allons donc les combiner pour avoir un design pattern plus puissant. La file d’attente permet de stocker les différents états sans les perdre par exemple si un état empile plusieurs actions successives a effectuer. Pour cela on créé une file d’attente, on empile l’état initialisation (afin de rentrer dans le code d’initialisation au début du programme), ensuite dans une boucle while les éléments (ordres) sont dépilés, une structure condition permet de choisir le code a exécuter. le code contiens une fonction pour empiler l’ordre ou les ordres permettant de choisir le code a exécuter.

Dans cet exemple, j’ai choisi de mettre mes commandes sous le format d’une chaine de caractère, mais on pourrait utiliser un énum ou un cluster…

Bon code à tous!

Bonjour,

Aujourd’hui nous allons voir comment on peut simuler une jauge de réservoir d’essence de voiture. Dans cet exemple de code, on utilise un slider pour simuler le niveau d’essence, et une architecture en machine d’état pour gérer les différents cas: réservoir rempli, niveau moyen, niveau bas. Il y a 4 états, « départ » pour choisir quel cas niveau haut, milieu, ou bas correspondant chacun a un état. On pourrait mettre le noeud de propriété en dehors de la structure condition pour plus d’optimisation, mais c’est un détail…

Ce diaporama nécessite JavaScript.

 

Détails:

L’état est une variable interne à la structure, qui permet de déterminer quelle partie du code on va exécuter. Ici j’utilise une définition de type sur une constante énumération, l’avantage c’est que si j’édite l’énumération elle sera éditée dans tout mon programme (ou d’autres sous programme éventuellement utilisés avec cette fonction. La constante est reliée à une structure condition (le case en C par exemple), cela marche exactement comme si on reliait un booléen à la différence qu’ici on peut utiliser plus de deux valeurs différentes (ici 4 possibilités) .

Un registre à décalage permet de passer la valeur de la constante énumération entre les itérations de la boucle while.

Ensuite de simple comparateurs permettent de déterminer l’état suivant. Par exemple, en algorithmique:  Si la valeur est inférieur à 15 aller dans l’état « Froid », sinon aller dans l’état « Chaud ».

N’hésitez pas à demander des précisions plus spécifiques.