Si vous avez déjà fait de la programmation événementielle (typiquement, les interfaces graphiques avec tout leurs boutons, qui sont activés n’importe quand), vous avez du tomber sur le problème du code à mettre derrière. Le problème est de gérer tous les cas possibles, sans zone de cas indéterminé, et donc sans bugs.
J’ai récemment réécris la gestion de l’interface de de mon outil de déformation par cage pour Gimp, sous forme de machine à état. Cette approche est à mon avis la plus simple a mettre en œuvre, et présente pas mal d’avantage:
La première étape est de dessiner un diagramme UML d’état. Voici le diagramme que nous allons implémenter:
3 états et 6 transitions, c’est un automate relativement simple, mais déjà pas facile à implémenter si on ne suis pas cette approche.
Une fois qu’on a ce diagramme, toute la phase de réflexion pour savoir comment va marcher notre système est terminée. J’ai ici implémenté ce système en Java. On commence par définir un enum qui contient tous les états possibles du système:
Une variable pour stocker l’état actuel:
L’état initial est défini dans le constructeur:
Le traitement sur les évènements se fait avec un switch case:
Et c’est tout ! Ça juste marche =)
ps: J’ai crée le diagramme UML avec PlantUML, très simple à utiliser et encore plus avec le plugin Eclipse !