Chap06 PDF
Chap06 PDF
Chap06 PDF
Chapitre Exercices
complémentaires
6
Objectifs du chapitre
Ce chapitre va nous permettre de compléter, au moyen de plusieurs petits exercices, le
passage en revue des principales difficultés que pose la construction des diagrammes d’états
UML.
Nous avons déjà traité des diagrammes de séquence aux chapitres 1 et 2, et nous verrons les
diagrammes de collaboration dans la partie consacrée à la conception.
RÉVEILLE-MATIN
RÉPONSE 6-1
Le réveil a clairement deux états distincts : Désarmé (alarme « off ») ou Armé (alarme « on »). Une
action de l’utilisateur permet de passer d’un état à l’autre. On suppose que le réveil est bien
désarmé au départ. Notez le paramètre heureAlarme de l’événement armer.
Le fait de sonner constitue un nouvel état pour le réveil. Il s’agit bien d’une période de temps
durant laquelle le réveil effectue une certaine activité (sonner) qui dure jusqu’à ce qu’un événe-
ment vienne l’interrompre.
Chapitre 6 • Exercices complémentaires 193
Le passage de l’état Armé à l’état Sonnerie est déclenché par une transition due à un changement
interne, représenté au moyen du mot-clé « when ». En revanche, d’après l’énoncé, le retour de
l’état Sonnerie à l’état Armé ne s’effectue que sur un événement utilisateur.
RÉPONSE 6-2
Il y a donc une deuxième possibilité de sortie de l’état Sonnerie : quand le réveil s’arrête tout seul
de sonner au bout d’un certain temps.
Dans notre exemple, il suffit donc d’ajouter une activité sonner à l’état Sonnerie et une transition
automatique en sortie de cet état. Le diagramme d’états complété est représenté sur le schéma
suivant.
Il convient aussi de se demander si l’utilisateur a le droit de désarmer le réveil pendant qu’il sonne.
Dans ce cas, il faudrait ajouter une transition déclenchée par desarmer et allant directement de
Sonnerie à Désarmé.
RÉPONSE 6-3
Si l’on applique de nouveau les règles énoncées lors de la réponse 5-10, on obtient sans difficulté
le diagramme ci-après.
MONTRE DIGITALE
3. Quand on appuie une nouvelle fois sur le bouton mode, la montre passe en
« modification minute ». Chaque pression sur le bouton avance incrémente les
minutes d’une unité.
4. Quand on appuie une nouvelle fois sur le bouton mode, la montre repasse en
mode « Affichage ».
RÉPONSE 6-4
On obtient sans difficulté particulière ce diagramme d’états typique, qui est présenté sur le schéma
suivant.
On remarquera les notations en style C++ ou Java pour les actions : « heure++ » et
« minutes++ ». UML 1.3 ne propose pas encore de langage d’action, nous pouvons donc exprimer
le détail des actions comme nous le souhaitons : texte libre, pseudo-code, etc.
Nous obtenons des transitions propres sur les états de modification et pas sur l’état d’affichage.
Cela veut-il dire que l’événement « appui bouton avance » est impossible dans l’état « Affi-
chage » ? Non, bien sûr. Cela signifie plutôt que, comme cet événement n’a aucun effet dans cet
état, il ne déclenche aucune transition. L’événement est purement et simplement perdu.
RÉPONSE 6-5
Dans l’exemple précédent, les événements d’appui sur les boutons correspondaient en fait au
couple indivisible « pression » et « relâchement ». Nous avions considéré que la durée de pres-
sion sur chaque bouton était négligeable par rapport aux durées des états ou, en tout cas, non
significative. Avec le nouvel énoncé, ce n’est plus le cas, puisque la durée de pression sur le
bouton avance influe sur le comportement de la montre. La bonne approche consiste à introduire
un nouvel événement : « relâchement bouton avance », afin de pouvoir gérer le temps de pres-
sion.
198 Analyse - Point de vue dynamique
Une première solution, tentante, consiste à introduire une condition sur la durée de pression, ainsi
qu’un nouvel état « Incrémentation rapide », comme cela est illustré sur la figure suivante :
Pourtant, cette solution qui semble évidente n’est pas acceptable en UML.
En effet, un événement (comme une transition et une action) est par convention instantané, ou en
tout cas insécable (atomique). Il est donc tout à fait inapproprié de tester sa durée ! Les seuls
concepts dynamiques en UML pour lesquels la notion de durée est significative sont l’état et l’acti-
vité. Il faut donc s’en servir pour résoudre cet exercice. Deux solutions sont possibles : toutes les
deux nécessitent que l’on ajoute un état intermédiaire pour que l’on puisse tester la durée de pres-
sion sur le bouton avance, mais elles diffèrent quant à la façon de réaliser ce test :
Chapitre 6 • Exercices complémentaires 199
➢ La première approche consiste à introduire une activité finie « attendre 2 s » dans l’état inter-
médiaire et une transition automatique qui représente le fait que le bouton est appuyé plus de
deux secondes.
➢ La seconde approche consiste à utiliser un mot-clé introduit par UML 1.3 : le pseudo-événe-
ment « after », suivi d’une durée en argument représentant l’échéance d’un timer.
Pour illustrer les deux solutions, nous les avons représentées ensemble sur le diagramme suivant
mais, dans la réalité, il faudrait bien sûr en choisir une seule et l’appliquer aux deux états de modi-
fication. Pour notre part, nous recommandons la seconde solution qui nous semble plus simple et
plus facile à lire.
Figure 6-9. Les deux possibilités pour procéder à une modification correcte du diagramme d’états
de la montre digitale
On notera que le comportement initial est conservé : si le bouton avance est relâché en moins de
deux secondes, les heures (ou les minutes) sont bien incrémentées d’une unité. En fait, la transi-
tion propre qui existait sur chaque état de modification a pu être coupée en deux suite à la sépara-
tion des deux événements « appui » et « relâche », et à l’ajout de l’état intermédiaire.
200 Analyse - Point de vue dynamique
Reprenons notre exemple de montre digitale tel qu’il était présenté au début de l’exercice,
et ajoutons maintenant à cette dernière deux autres boutons :
➢ un bouton éclairage ; en le pressant, on éclaire le cadran de la montre,
jusqu’à ce qu’on le relâche ;
➢ Un bouton alarme, qui ajoute à la montre digitale une fonctionnalité clas-
sique d’alarme, comme cela a été décrit lors du premier exercice de ce
chapitre (réveille-matin).
RÉPONSE 6-6
➢ la gestion de l’affichage,
➢ la gestion de l’alarme,
➢ la gestion de l’éclairage.
Chapitre 6 • Exercices complémentaires 201
Commençons par le plus simple d’entre eux, qui concerne la gestion de l’éclairage. Cette dernière
peut se modéliser très simplement par un automate à deux états, comme nous l’illustrons sur le
schéma suivant.
Si la gestion de l’éclairage peut tout à fait se modéliser à part, il n’en est pas de même pour l’affi-
chage et l’alarme. En effet, il faut maintenant pouvoir aussi modifier l’heure d’alarme et la minute
d’alarme, ce qui ajoute deux nouveaux états au diagramme de la figure 6-6, comme cela est
indiqué ci-après.
Il reste maintenant à modéliser la gestion de l’alarme. Nous pouvons nous inspirer du diagramme
d’états du réveil (cf. figure 6-3) pour obtenir le schéma suivant. On y notera la dépendance avec la
gestion de l’affichage via le test effectué par la gestion de l’alarme sur les attributs (« when »…).
202 Analyse - Point de vue dynamique
Nous avons donc obtenu trois diagrammes d’états. Comment faire en sorte que ces trois
diagrammes séparés décrivent le comportement de la montre digitale ?
➢ Considérer que toute instance de Montre contient en fait trois instances et que chacune gère
un des trois comportements décrits précédemment. Toute montre délègue ainsi une partie de
sa dynamique à une instance d’afficheur, d’éclairage ou d’alarme, suivant le cas. On peut
représenter cela au moyen d’une relation de composition dans un diagramme de classes.
➢ Décrire des « régions concurrentes » au sein du diagramme d’états de la classe Montre. C’est
une solution moins usitée que la précédente (principalement, car certains outils UML ne la
proposent pas), mais tout aussi légale. L’état courant de la montre devient alors un vecteur à
trois lignes : état de l’affichage, état de l’alarme, état de l’éclairage. Une montre peut simulta-
nément être en affichage de modification minute, être en train de sonner et être éclairée.
Chapitre 6 • Exercices complémentaires 203
Le diagramme d’états de la montre serait alors tel qu’il apparaît sur le schéma ci-après.
On notera que chaque « région » doit être initialisée puisque, si les états sont bien exclusifs à
l’intérieur d’une région concurrente, ils existent simultanément dans les trois régions.
204 Analyse - Point de vue dynamique
Nous allons étudier l’ordre temporel d’exécution des actions en complétant le tableau
suivant. Nous partirons de l’état à gauche du diagramme symbolisé par « … », et nous
prendrons comme nouvel état de départ l’état d’arrivée de la ligne précédente.
Chapitre 6 • Exercices complémentaires 205
RÉPONSE 6-7
Dans l’état B, l’événement E5 fait sortir de l’état et déclenche donc l’action B_Out, puis conduit à
l’état C et déclenche en conséquence l’action C_In.
206 Analyse - Point de vue dynamique
Dans l’état C, l’événement E4 est-il possible ? Oui, car les transitions internes sont héritées du super-
état. L’événement E4 fait donc rester dans l’état C et déclenche simplement l’action A_Interne.
Dans l’état C, l’événement E6 fait sortir de l’état et déclenche donc l’action C_Out, puis conduit à
l’état B et déclenche en conséquence l’action B_In.
Dans l’état B, l’événement E3 est-il possible ? Oui, car les transitions propres sont héritées du
super-état. L’événement E3 fait d’abord sortir de l’état B et déclenche l’action B_Out, puis fait sortir
du super-état A et déclenche A_Out, déclenche ensuite l’action x3, puis fait entrer dans le super-
état A et déclenche A_In, enfin fait rentrer dans l’état B et déclenche l’action B_In.
Attention, il y a un piège ! Dans l’état C, l’événement E3 fait d’abord sortir de l’état C et déclenche
l’action C_Out, puis fait sortir du super-état A et déclenche A_Out, déclenche ensuite l’action x3,
puis fait entrer dans le super-état A et déclenche A_In, enfin fait rentrer dans l’état B (car c’est le
sous-état initial !) et déclenche l’action B_In.
Dans l’état B, l’événement E2 fait d’abord sortir de l’état B et déclenche l’action B_Out, puis du
super-état A et déclenche A_Out, et déclenche enfin l’action x2.
DEMANDE DE FORMATION
Nous allons compléter l’étude de cas sur les demandes de formation, déjà traitée des
points du vue fonctionnel (chapitre 2) et statique (chapitre 4), en réalisant le diagramme
d’états de la classe DemandeFormation.
RÉPONSE 6-8
Quelles informations avons-nous déjà réunies sur la dynamique d’une demande de formation ?
Nous avions également réalisé un diagramme d’activités du processus de formation montrant les
objets métier et leurs changements d’états :
À partir de ce diagramme d’activités, nous pouvons tout d’abord identifier quatre états principaux
de la demande de formation, comme le montre la figure suivante.
En fait, en relisant attentivement la première phrase, nous nous apercevons que la demande est
initiée par l’employé et envoyée au responsable formation, puis instruite par ce dernier qui
transmet son accord ou son désaccord à l’intéressé. Pour pouvoir compléter le diagramme d’états,
nous allons tout d’abord détailler les scénarios au moyen des diagrammes de séquence.
On notera le symbole particulier du message asynchrone qui est utilisé sur le schéma précédent
pour distinguer les actions de notification effectuées dans le cadre de la demande de formation.
La création proprement dite de cette demande n’est pas atomique, car l’employé doit effectuer
plusieurs sélections (thème, période, etc.) avant de procéder à la validation. Nous avons égale-
ment identifié des actions d’envoi de message qui se matérialiseront par le mot-clé « send » sur
les transitions du diagramme d’états.
Poursuivons par un autre diagramme de séquence qui met en jeu l’acteur « organisme de forma-
tion » pour la suite nominale des événements sur la demande.
Nous pouvons maintenant consolider les informations des deux diagrammes de séquence de
façon à construire une nouvelle version plus complète du diagramme d’états.
Chapitre 6 • Exercices complémentaires 211
Que peut-il bien nous manquer pour terminer notre diagramme d’états ? En fait, toutes les transi-
tions d’annulation ou d’erreur. L’employé peut ainsi annuler sa demande à tout moment, l’orga-
nisme de formation peut indiquer une annulation de session, etc.
212 Analyse - Point de vue dynamique