• Aucun résultat trouvé

Partie III Définition d’actions, d’interactions et d’instruments avec Malai

7.5 Instrument

8.3.3 Avortement et recyclage

(b) Pseudo-code

Fig. 8.6: Description de l’action SélectionnerNoeud

(a) Partie statique

1 e x é c u t e r ( ) { 2 p a r e n t = s e l . s é l e c t i o n . p a r e n t 3 p o s i t i o n = p a r e n t . p o s i t i o n ( s e l . s é l e c t i o n ) 4 #s u p p r i m e r ( p a r e n t . noeuds , s e l . s é l e c t i o n ) 5 } 6 p e u t E x é c u t e r ( ) { retourner s e l . e s t E x é c u t é e ( ) } 7 a n n u l e r ( ) { 8 #a j o u t e r ( p a r e n t . noeuds , s e l . s é l e c t i o n , p o s i t i o n ) 9 } 10 r é e x é c u t e r ( ) { 11 #s u p p r i m e r ( p a r e n t . noeuds , s e l . s é l e c t i o n ) 12 } (b) Pseudo-code

Fig. 8.7: Description de l’action SupprimerNoeud

L’action SupprimerNoeud, qui supprime un nœud de la présentation abstraite, nécessite l’exécution au préalable d’une action SélectionnerNoeud pour être créée. Dans le pseudo-code de l’action SupprimerNoeud (cf. figure 8.7b), l’action SélectionnerNoeud est utilisée via l’identifiant sel, défini dans la partie statique de l’action (cf. figure 8.7a). L’exécution de cette action sauvegarde le parent et la position du nœud à supprimer, puis l’efface de la présentation abstraite via la méthode #supprimer. Le premier paramètre de cette méthode est la relation parent.noeuds concernée par la suppression ; le second est le nœud à supprimer. Cette action est à même d’être défaite et refaite : la méthode annuler réinsère le nœud supprimé à son an-cienne position dans la relation parent.noeud par le biais de la méthode #ajouter. La méthode réexécuter supprime, de la même manière que la méthode exécuter, le nœud sélectionné.

8.3.3 Avortement et recyclage

Au cours d’une interaction, l’utilisateur peut vouloir changer l’action à réaliser. Par exemple, il peut commencer à déplacer un nœud, puis appuyer sur la touche « ctrl » pour le dupliquer. Notre modèle conceptuel prend en considération cet aspect en permettant d’avorter une action

en cours. Dans ce cas, elle peut être définitivement avortée ou bien recyclée en une action différente si certaines conditions sont respectées. Le recyclage est géré par l’instrument qui lie les interactions et aux actions comme le détaille la section suivante.

Fig. 8.8: Exemple de recyclage d’actions

La figure 8.8 décrit les conditions entre l’interaction GlisserDéposer de la figure 8.4b et les actions DéplacerNoeud et DupliquerNoeud. Lorsqu’un utilisateur fait glisser un nœud, une action DéplacerNoeud est créée, étant donné que la condition « |touches|==0 && source is

Noeu-dUI » est respectée. Si l’utilisateur appuie sur la touche « ctrl », l’action en cours DéplacerNoeud

est alors avortée et recyclée en une action DupliquerNoeud puisque les paramètres de l’interac-tion correspondent maintenant à la condil’interac-tion « |touches|==1 && touches[1]==’ctrl’ && source

is NoeudUI ». Ce processus continue jusqu’à ce que l’interaction se termine ou soit avortée.

8.4 Instrument

Nous décrivons dans cette section la partie dynamique de l’instrument en en détaillant tout d’abord les principes pour ensuite présenter son feed-back intérimaire. Enfin, un exemple d’ins-trument est présenté.

8.4.1 Définition et principe

Un instrument se compose d’un ensemble de liaisons chacune établie entre une interaction et une action (cf. figure 8.9). La partie dynamique de l’instrument décrit le fonctionnement de ces liaisons qui se composent :

1. d’une condition devant être respectée pour lier l’interaction à l’action ; 2. d’une machine à états définie à partir de celle de l’interaction et de l’action.

Condition

Un instrument décrit à quelle condition il peut créer une action d’un certain type lorsqu’une interaction donnée est effectuée. De manière formelle, soit le prédicat σ(a, t, c, s) définissant que l’instrument s peut produire, si la condition c est respectée (c étant décrit dans une logique L), une action a grâce à l’interaction t. Nous définissons les conditions établies entre les interactions et les actions d’un instrument s comme étant un ensemble fini Σs tel que :

8.4 Instrument

Fig. 8.9: Métamodèle d’instrument

Σs = {a1, . . . , an, t1, . . . , ti, c1, . . . , cj, s} | σ(a1, t1, c1, s) ∧ . . . ∧ σ(an, ti, cj, s) (8.1) Au regard de la formule 8.1, une question se pose : une même interaction t et une même condi-tion c peuvent-elles conduire à plusieurs accondi-tions a1, . . . , an, c.-à-d. σ(a1, t, c, s)∧. . .∧σ(an, t, c, s) ?

Cette situation est généralement à éviter du fait de la complexité qu’elle engendre au niveau de la perception du système du point de vue de l’utilisateur. Cependant, il existe des cas de figure dans lesquels cette fonctionnalité est nécessaire. Prenons l’exemple de l’instrument « gomme » de notre l’éditeur XML permettant de supprimer des nœuds de manière directe en cliquant sur le nœud visé. L’action SupprimerNoeud nécessite l’exécution au préalable d’une action SélectionnerNoeud. Lorsque l’utilisateur clique sur le nœud à supprimer, le nœud visé doit être sélectionné avant d’être supprimé. Ainsi, pour une même interaction (le simple clic) et une même condition (la cible de l’interaction doit être un nœud), deux actions sont créées : une pour sélectionner le nœud et une autre pour le supprimer.

La formule 8.1 se traduit dans le métamodèle de la partie dynamique de l’instrument (cf. figure 8.9) par le quintuplet composé des classes Instrument, Liaison, Condition, Action et Interaction : un instrument définit un ensemble de liaisons associées chacune à une interaction et à une action. Une liaison possède également une condition déclarée à l’aide du langage Malan. Machine à états

La partie dynamique d’un instrument se charge de lier la machine à états de l’interaction avec celle du cycle de vie des actions. Elle définit ainsi à quel moment de l’interaction l’action doit être créée, mise à jour, exécutée, avortée et terminée en fonction des changements d’état de l’interaction. Par exemple, l’interaction GlisserDéposer et l’action DéplacerNoeud sont mises en relation par des liens représentés en gris dans la figure 8.10a. Tout d’abord, le lien entre les transitions pression et création indique que le démarrage de l’interaction avec l’évènement

pression, crée une action DéplacerNoeud. Ensuite, les transitions déplacement | pressé, pressionTouche | touche==’Echap.’ et relâchementTouche, sont reliées à la transition mise à jour du cycle de vie de l’action, signifiant que ces évènements provoquent la mise à jour de l’action en cours. De même, l’évènement relâchement de l’état glissé déclenche l’exécution puis la fin de l’action. Enfin, l’avortement de l’action a lieu lorsque la touche « Echap » est pressée et lorsqu’un évènement relâchement survient dans l’état pressé.

déposé avorté pressé glissé pression relâchement déplacement | pressé ou ou relâchementTouche

pressionTouche | touche !=’Echap.’

pressionTouche | touche==’Echap.’ ou relâchement

pressionTouche | touche==’Echap.’ pressionTouche | touche !=’Echap.’

ou relâchementTouche

b

b

action en cours avorté terminé

création mise à jour

exécuter | peutExécuter

terminer avorter

déplacement | pressé

(a) Liens entre les deux machines à états

fin

pression

relâchement ou relâchementTouche pressionTouche | touche !=’Echap.’ ou déplacement | pressé pressionTouche | touche==’Echap.’ pressionTouche | touche==’Echap.’ ou relâchementTouche

b

création avortement mise à jour exécution

(b) Machine à états des liens

Fig. 8.10: Machine à états de la liaison entre l’interaction GlisserDéposer et l’action DéplacerNoeud

Les liens établis entre les deux machines à états de la figure 8.10a peuvent être représentés sous la forme d’une autre machine à états, comme l’illustre la figure 8.10b pour l’interaction GlisserDéposer et l’action DéplacerNoeud. Dans cette machine à états, les transitions cor-respondent aux évènements de l’interaction provoquant un changement dans le cycle de vie de l’action, et les états aux transitions du cycle de vie de l’action.

Après avoir lié différentes interactions et actions, un modèle standard de liaison a été dé-fini. Ce modèle spécifie les liens, valables dans tous les cas étudiés, entre le cycle de vie d’une interaction et celui d’une action (cf. figure 8.11a). La figure 8.11b correspond à la machine à états réalisée à partir des liens établis entre les deux cycles de vie. Tout d’abord, le premier lien stipule qu’une action est créée lorsque le premier évènement conforme de l’interaction survient. Ensuite, tout évènement conforme lance la mise à jour de l’action. Si un évènement avortant in-tervient, l’action est avortée. De même, si un évènement terminal apparaît, l’action est exécutée puis déclarée comme terminée. A noter que la transition évènement terminal de l’état initial provoque tout d’abord la création de l’action.

Une condition fait partie de la machine à états établie entre l’interaction et l’action. Elle prend la forme d’un lien partant de chaque état de l’interaction vers la transition avorter. Le prédicat de ce lien, évènement | !condition, signifie que lorsqu’un évènement survient et que

8.4 Instrument interaction terminée interaction en cours évènement évènement terminal évènement avortant

b

b

action en cours avorté terminé création mise à jour exécuter | peutExécuter terminer avorter interaction avortée évènement terminal non terminal et évènement non avortant non terminal

(a) Liens entre les deux cycles de vie

fin

b

création avortement mise à jour exécution évènement évènement terminal évènement terminal création 2 évènement avortant évènement non terminal mise à jour 2 évènement avortant évènement évènement terminal non terminal non terminal et non avortant

(b) Machine à états des liens

Fig. 8.11: Modèle standard de liaison

la condition n’est plus respectée, l’action A1 doit être avortée. Si une autre condition concernant l’action A2 est respectée, A1 est alors recyclée en une action A2. Pour faciliter la lecture, ces liens ne sont pas représentés dans les figures 8.11a et 8.11b.