Mini-projet PG-IDM : machines à états avec langage d'action

Le but de ce mini-projet est de transformer et exécuter des machines à états simplifiées comportant un mini-langage d'action.

Description du méta-modèle

Le méta-modèle de machines à états considéré est representé dans la figure ci-dessus. Ses éléments sont :

Un modèle de machine à états se base donc sur une instance de l'élément StateMachine. Cette instance est unique par modèle et sert de départ à la création et au référencement de tous les états et transitions du modèle. Cette unicité est assurée par une contrainte OCL. D'autres contraintes OCL sont nécessaires pour notamment spécifier que :

Note : dans le méta-modèle Ecore du projet, les attributs _name des éléments Expression et Assignment ou autres méta-éléments associés n'ont pas de sémantique particulière. Ils servent juste à pouvoir identifier les instances de ces éléments via un nom textuel ou préciser leur contenu donné sous forme textuelle.

Exemples de modèles et des transformations attendues

Exemple de machines à états sans garde ni opération

La figure ci-dessous présente un exemple de machine à états modélisant le fonctionnement d'un micro-onde. L'état "Off" est représenté en gris car il est le premier pas d'exécution du modèle. Il est en effet l'état initial du composite qui est lui-même l'état inital de la machine à états.

Exemple d'une machine à états avec gardes et opérations

La figure ci-dessus représente une machine à états de la vitesse d'une voiture. La vitesse varie entre 0 et 100 km/h, par pas de 10 km/h. La machine à états possède deux état principaux : Arrêt et Marche, selon que la vitesse de la voiture est nulle ou pas. Deux événements sont gérés : accélerer et ralentir. L'état Marche contient 3 états internes permettant d'incrémenter et décrémenter la vitesse ainsi que de préciser que l'on est arrivé à la vitesse maximale. La machine à états possède deux variables : vitesse, de type entier, initialisé à 0, et maxAtteint, de type booléen, initialisé à false.

Travail attendu

Le travail est à faire par groupe de 2 ou 3 étudiants.

Trois éléments sont attendus dans le projet :

  1. Recopiez le code implémentant la sémantique opérationnelle du moteur d'exécution en Java vu en cours en l'adaptant pour qu'il fonctionne : le méta-modèle est presque le même à l'exception de l'état historique qui n'existe pas ici.
  2. Complétez le code Java du moteur pour exécuter les opérations associées aux état et gérer les gardes des opérations pendant l'exécution. Après chaque pas d'exécution, le modèle est sauvegardé dans un modèle nommé "nomModele-exec-X.xmi" avec X un entier correspondant au pas d'exécution (1, 2, 3 ...).
  3. Une génération de code Acceleo qui va définir pour un modèle, une classe unique Java contenant : Le code Java doit être valide et compiler.

Ressources du projet

L'archive StateMachine.zip contient le projet Eclipse implémentant les éléments initiaux du projet :