PauWare est une libraire et un moteur qui permettent de "programmer" et d'exécuter des machines à état UML 2.0 pour toutes les distributions de Java (SE, EE, ME ainsi que Android).
Le principe général de programmation avec PauWare est que l'on crèe une structure de machines à états (ses états et transitions) à laquelle on associe des opérations métier. Ces opérations (concrètement des méthodes Java) seront exécutées en fonction des transitions suivies et des états atteints quand des événements sont générés. Ces opérations métier feront des calculs ou des requêtes sur des bases de données mais ne devront pas contenir de contrôle (threads ...) car c'est la machine à états qui définit le comportement de l'application. On différencie ainsi d'un coté les opérations métier et la façon de comment et quand elles sont appelées (c'est le but de la machine à états).
Quelques éléments de programmation :
Statechart
. On peut lui associer des actions
("do", "entry", "exit") ainsi que des invariants pour vérifier qu'il
est dans un état correct.Statechart_monitor
fires
qui est disponible
en multiples versions en fonction des besoins : une transition a pour
éléments obligatoires le nom de l'événement associé, les références
sur les états de départ et d'arrivée et en option la référence sur une
garde ou une action.run_to_completion
sur l'instance de la
machine à états avec le nom de l'événement en paramètre. De
préférence, on écrira cette ligne de code dans une méthode dédiée à
cet événement.Récupérez via le lien ci-dessus le Jar pour la version Java EE de
Pauware. Créez un nouveau projet (Netbeans ou Eclipse) où vous
placerez ce Jar ainsi que le
fichier My_stack.java. Ce fichier contient
l'implémentation de la machine à états ci-dessous qui contrôle une
pile (java.util.Stack
). Les états correspondent au niveau
de remplissage de la pile et autoriseront alors, via la présence ou
l'absence de transitions, de pouvoir dépiler ou empiler des éléments
lors de l'occurence des événements "pop" ou "push". Cette machine
définit des transitions avec des gardes ainsi que des actions (par
contre il n'y a pas d'actions associées aux états). Les états
contiennent également des invariants.
Etudiez et exécutez cette machine à états.
Vous implémenterez la machine à états ci-dessous qui gère la vitesse d'une voiture en fonction des deux événements "accelerer" et "ralentir". La voiture peut rouler entre 0 et 100 km/h.
Implémentez pour commencer une classe "Voiture" qui contiendra les
deux attribus "vitesse" et "maxAtteint" que l'on voit sur la machine à
états. Ensuite, implémentez dans une autre classe la machine à
états. Contrairement à la précédente, il n'y a pas d'actions associées
aux transitions mais cette fois aux états. Une action est associée à
un état via la méthode doActivity
de Statechart
.