CentraleSupélec LMF, UMR CNRS 9021
Département informatique Laboratoire Méthodes Formelles
Bât Breguet, 3 rue Joliot-Curie Bât 650 Ada Lovelace, Université Paris Sud
91190 Gif-sur-Yvette, France Rue Noetzlin, 91190 Gif-sur-Yvette, France
Création d'un métamodèle pour des automates

Les concepts à modéliser sont :

  • StateMachine qui représente un automate et a un nom, des entrées, des sorties et des états
  • Input qui représente un événement d'entrée pour l'automate et a un nom
  • Outpout qui représente une action de l'automate et a un nom
  • State qui représente un état de l'automate et qui a un nom et des transitions
  • Transition qui représente une transition d'un état vers un état cible, déclenchée par un événement (ou pas) et qui exécute des actions avant de mettre l'automate dans son état cible.

Il faudra être particulièrement attentif aux relations de composition. En effet, chaque élément d'un modèle ne peut appartenir qu'à un unique élément, mais il faut également que le modèle résultat ait une structure d'arbre de façon à ce qu'il soit possible de naviguer de la racine du modèle vers chacun des éléments.

Ici, il est conseillé de choisir StateMachine pour racine, composée d'Inputs, d'Outputs et de States. Les States eux-mêmes sont composés de Transitions.

On factorisera la propriété "avoir un nom" dans une classe abstraite NamedEntity.

On cherche donc à créer un métamodèle correspondant à :

Pour cela, il faut créer un nouvel ECore Modeling Project (dans la section Eclipse Modeling Framework), donner un nom au projet (par exemple StateMachine), laisser les options par défaut (choisir uniquement Design dans les viewpoints). Dans la vue qui s'affiche, les concepts sont créés avec des Classifier > Class, les attributs avec Feature > Attribute, les références avec Relation > Reference ou Relation > Composition.

Création d'un automate Créer un automate

Pour créer un automate, on peut utiliser ''Create Dynamic Instance...' dans le menu contextuel qui apparaît quand on clique sur la classe StateMachine, comme illustré ci-dessous :

Vous pouvez enregistrer le fichier .xmi correspondant à la racine du projet StateMachine. Le modèle s'ouvre par défaut dans un éditeur qui n'est pas très agréable. Vous pouvez donc le fermer et rouvrir le fichier .xmi dans l'éditeur Sample Reflective Ecore Model Editor (menu Open With).

Il ne vous reste qu'à créer un automate en ajoutant les différents éléments au modèle.

Contraintes et sémantique statique

En ouvrant le modèle eCore avec l'éditeur OCLinEcore Editor (menu Open With), vous pouvez ajouter des contraintes à la validité d'un modèle. Par exemple, on peut spécifier qu'un automate doit avoir un unique état initial. Une autre possibilité est de vérifier qu'il n'y a pas de code mort, c'est-à-dire que tout état qui n'est pas initial est la cible d'au moins une transition.

Il suffit pour cela d'ajouter dans la classe correspondante un invariant OCL. Tapez invariant puis activez la complétion automatique (avec contrôle-espace) pour obtenir un modèle d'invariant.

Vérifiez ensuite que votre automate respecte ces invariants en sélectionnant validate dans le menu contextuel qui s'affiche sur votre instance :

Metamodèle avec contraintes OCL (éditeur OCLinEcore)