Exécution de modèles avec PauWare

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 :

Liens vers les ressources

Première partie : étude d'un exemple

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.

Machine à états d'une pile

Seconde partie : implémentation d'une 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.

Machine à états d'une voiture