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 :
- Une API
pour implémenter une machine à états UML. Il existe des classes et des
méthodes pour définir des états, des transitions ainsi que les
opérations métiers et les gardes qui sont associées.
- Un moteur d'exécution qui traite des événements et en fonction des
transitions à suivre, change les états courants et exécute les
opérations métiers requises.
Plutôt que d'implémenter à la main la machine à états, on peut
générer son code :
- 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.
- 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 :
- Intégrez
le JAR
de PauWare dans les propriétés de votre projet.
- Intégrez la classe Voiture dans les
sources du projet.
- 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.
- Modifiez le code de cette classe pour faire le lien avec la partie
métier :
- Remplacez la définition et l'instanciation de l'objet "bo" pour
qu'il soit du type Voiture.
- Supprimez la définition et l'instanciation de l'objet "bg" et
remplacez dans le code les occurences de "bg" par "bo".
- Dans les méthodes "accelerer()" et "ralentir()", rajoutez à la fin
"System.out.println(bo);". Ces méthodes traitent l'occurence d'un
événement ("accelerer" ou "ralentir") en appelant la méthode
"run_to_completion" sur l'objet représentant la machine à états. On
les modifie pour afficher après le traitement d'un événément la
nouvelle valeur de la vitesse de la voiture.
Pour exécuter la machine à états, il faut :
- Instiancier la classe définissant votre machine à états.
- Appeler la méthode "start();" sur l'objet pour la démarrer.
- 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.