TD s12 Correction
TD s12 Correction
TD s12 Correction
DET - Générique
Soit A et B, deux diagrammes d’états, l’un avec un état composite (B) et l’autre sans (A)
Question : Montrer que les deux diagrammes ci-dessus ne sont pas équivalents en trouvant une
séquence d’événements qui n’amène pas dans le même état en A et en B. On supposera que les
séquences débutent à l’état initial.
Correction
Il faut bien remarquer que l’état initial est à l’intérieur de l’état composite C. Par conséquent à
chaque fois qu’on entre dans l’état C (comme c’est le cas avec la transition x), on passe par l’état
initial.
Ainsi, la séquence d’évènements a, z, x amènera à l’état T dans le cas A alors qu’on sera dans l’état
initial dans le cas B.
1/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
Bouton
A 17:35:22 Bouton
B
Questions
a. Réaliser un diagramme de classes représentant une vue détaillée (attribut et fonctions) des classes
nécessaires à l’analyse de cette description.
b. Réaliser un Diagramme d' états correspondant aux spécifications 1 à 4 ci-dessus, sans oublier les
actions accompagnant certaines des transitions. On laisse de coté dans un premier temps le réglage
de l’alarme ainsi que l’état final provoqué par l’événement « plus d’énergie».
c. Expliquer pourquoi le réglage de l’alarme introduit un non-déterminisme dans le comportement
de l’interface utilisateur de la montre. Montrer comment ré-introduire un comportement
déterministe en ajoutant un état supplémentaire non précisé dans l’énoncé.
d. Ajouter autant de transitions que nécessaire aux états pour représenter le passage dans l’état
final. Quelle astuce du formalisme du diagramme d’états pourrait-on utiliser pour alléger la
représentation.
Correction
a)
2/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
Bouton
Signal
Horloge
-heure <<description>>
-minute classe stéréotypée
-seconde <<signal>>
+incrementer_heure() représentative de l'appui
Signal_A Signal_B +incrementer_minute() sur le bouton A ou B
+incrementer_seconde()
+afficher_heure()
+afficher_minute()
+afficher_seconde()
+raz_heure()
+raz_minute()
+raz_seconde()
Reveil
Pile -heure
-minute
-niveau_energie
+regler_sonnerie()
+sonner()
b)
On pourrait aussi faire pointer la transition des l’état initial directement sur « régler heure » ?
Rappel :
A ou B désigne le signal A ou signal provoqué par un et un seul appui sur la touche A ou B
(respectivement).
Remarque :
Il y a une différence entre :
after(60s) : evt temporel
when(m=60) : evt modifiant
Il n’y a pas « d’état final ». On pourrait ajouter un tel état provoqué par l’événement « batterie trop
faible ».
Dans un état, on a « entry » pour spécifier ce qui se déclenche lorsqu’on entre dans l’état et on a
« exit » pour spécifier ce qui se déclenche lorsqu’on quitte l’état. Dans le cadre d’une auto-
transition, ça déclenche les deux événements.
3/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
c) Ajouter un état « Micro-Horloge » qui compte 0.5 seconde par exemple, avant de considérer que
l’utilisateur ne souhaitait pas effectuer de double clic. Ainsi, sera interprété comme double-clic la
succession de deux appuis sur la touche A en moins de 0.5 seconde.
Pour factoriser le réglage des heures et minutes, deux états transitoires ont été créés :
« Mode Horloge (timer) » et « Mode Alarme » : ces deux derniers fixent un attribut « Mode » (que
l’on peut ajouter à la classe « Montre », voir V1.1 du diagramme de classes) de façon à ce que les
fonctions incrementer_heure et incrementer_minute sache si l’incrément s’applique à l’heure de
l’horloge ou l’heure de l’alarme lorsqu’ils sont déclenchés dans les états « Réglage_H » et
« Réglage_M »
when(h=24)/raz_heure()
after(60s)/incrementer_minute() Affichage_HM
/afficher_heure() ; afficher_minute()
A
M icro-horloge
when (m=60)/incrementer_heure() ; raz_minute()
A
M ode alarme
after ( 0.1 seconde )
after ( 0.5 seconde )
Réglage_H Réglage_M
after ( 0.1 seconde ) A
A
M ode horloge
B/incrementer_heure() B/incrementer_minute()
S ignal_A S ignal_B
Montre
heure : undefined
minute : undefined
mode : undefined <<description>>
incrementer_heure() classe stéréotypée
<<signal>>
incrementer_minute()
représentative de
afficher_heure() <<comment>> l'appui sur le
afficher_minute() Nouvel attribut bouton A ou B
raz_minute() pour gérer le
raz_heure() mode alarme
fixer_mode()
obtenir_mode()
<<comment>>
Pour accéder au
nouvel attribut
d) Utiliser le formalisme de l’état composite. Cela signifie que quel que soit l’état en cours à
l’intérieur de « Nominal », le signal « Energie trop faible » provoque la transition vers l’état final.
4/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
insérer_batteries
Nominal
Affichage_HM
/afficher_heure() ; afficher_minute()
Réglage_H Réglage_M
énergie_trop_faible
DET - Publiphone
Enoncé : L’objectif est de réaliser une application qui simule le comportement d’un Publiphone à
Pièces sur un système d’exploitation classique à partir de quelques périphériques standard dans la
micro-informatique: microphone, haut-parleur, lecteur de carte bancaire type Moneo.
Questions :
1. Dessiner le Diagramme des Cas d' utilisation du Publiphone à pièces.
2. Réaliser un Diagramme (préliminaire) de séquence système qui décrive le Scénario nominal du
cas d'utilisation: Téléphoner.
3. Réaliser un premier Diagramme d' états qui décrive le comportement nominal du Publiphone,
d'après le diagramme de séquence système.
4. Sur le Diagramme d' états précédent, comment représenter le fait que l'
appelant peut raccrocher à
tout moment, et pas seulement dans l' état Conversation ?
5/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
Etats du téléphone :
- Point d’entrée (état initial)
- Point de sortie (état final)
- Attente décrochage (au repos)
- Attente pièces
- Attente numérotation
- Composition du numéro
1:
Décrocher
<<include>>
Composer
<<include>>
Téléphoner
Phone Guy
<<include>> Payer
<<include>>
Raccrocher
Ou bien :
6/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
administrateur
EXU1410
reseau_telephonique
téléphoner
systeme_de_paiement
2 : Exemple de DSS
PhoneGuy PubliPhone
décrochage
tonalité 1
monnaie
composition
tonalité 2
communication
débit
racrochage
7/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
Le_Telephone_Du_Bar:systeme
introduire_pieces
<<comment>>
le correspondant
composer_numero décroche
etablir_communication
envoyer_unite
consommer_unite
raccrocher
terminer_communication
rendre_monnaie
3 : DET
8/9
INSA de Rouen – Marc Savall – Frédéric Baucher - 2005
Attente décrochage
[raccrochage utilisateur]
[combiné décroché]
Attente pièces
Attente numérotation
Composition numéro
[ligne occupée]
[ligne libre]
Tonalité occupée
Tonalité jouée
[U.T.]
[Raccrochage correspondant]
Conversation en cours
[ajout]
Acceptation
pièces
9/9