Exécution de machines à états

Ce TP a pour but de modéliser une machine à états UML, de générer son code pour la librairie PauWare puis de l'exécuter.

Machine à états UML

Créez un nouveau projet sous Modelio et réalisez le diagramme de machine a états correspondant à la partie de la gestion de la vitesse d'une voiture du TD sur les machines à états. Rajoutez un diagramme de classes pour y définir une classe Voiture qui contiendra les méthodes métiers et les gardes de la machines à états.

Créez explicitement des événements où la propriété Kind est à "signal".

Rajoutez les gardes et les opérations métiers sur les états et les transitions. Pour bien afficher entièrement le contenu d'une transition, il faut sélectionner la transition, ouvrir le panneau Symbol sur la droite et cocher la case "Show label".

Au final, sous Modelio, vous devez obtenir ceci :

Exécution avec PauWare

PauWare engine est une librairie Java composée de :

Plutôt que d'implémenter à la main la machine à états, on peut générer son code :

  1. Il faut dans un premier temps exporter le modèle UML au format XMI : sélection du package voiture -> clic droit -> Import/Export -> Export -> XMI Export.
  2. Ouvrez la page du générateur de code PauWare. Charger votre fichier XMI avec le bouton "Parcourir", cochez la case "Trace" et cliquez sur "Submit". Si tout se passe bien, vous arrivez sur une page avec plusieurs blocs de code Java.

Sous votre IDE favori, créez un nouveau projet Java puis :

  1. Intégrez le JAR de PauWare dans les propriétés de votre projet.
  2. Intégrez la classe Voiture dans les sources du projet.
  3. Créez une nouvelle classe, du nom de celle qui est définie dans le premier bloc de la page du générateur : copiez le code de ce bloc et collez le dans la classe.
  4. Modifiez le code de cette classe pour faire le lien avec la partie métier :

Pour exécuter la machine à états, il faut :

  1. Instiancier la classe définissant votre machine à états.
  2. Appeler la méthode "start();" sur l'objet pour la démarrer.
  3. Faire plusieurs appels de "accelerer()" et "ralentir()", dans l'ordre que vous voulez, pour voir comment évolue la machine à états pendant son exécution. Vous retrouverez le comportement que vous avez défini sous Modelio mais cette fois-ci dans un programme Java exécutable.

Note : si vous n'avez pas réussi à avoir un code fonctionnel pour la machine à états, voici la classe Java qui définit la machine à états.