0% ont trouvé ce document utile (0 vote)
40 vues85 pages

Fondements des systèmes graphiques interactifs

Ce document décrit les principes fondamentaux des systèmes graphiques interactifs, en particulier l'architecture générale, la gestion des entrées/sorties et le modèle de fenêtrage. Il présente également l'évolution de ces systèmes depuis les années 1980.

Transféré par

Mohamed Khandali
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
40 vues85 pages

Fondements des systèmes graphiques interactifs

Ce document décrit les principes fondamentaux des systèmes graphiques interactifs, en particulier l'architecture générale, la gestion des entrées/sorties et le modèle de fenêtrage. Il présente également l'évolution de ces systèmes depuis les années 1980.

Transféré par

Mohamed Khandali
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Fondements des systèmes graphiques interactifs

Nicolas Roussel
http://mjolnir.lille.inria.fr/~roussel/
mailto:[email protected]
Objectifs

Discuter de manière non exhaustive des principes fondamentaux des


systèmes graphiques interactifs actuels

Point de départ : le Xerox Star et les systèmes qui s’en sont inspirés

Ces systèmes sont encore largement utilisés et leurs principes se


retrouvent dans les systèmes plus récents

“If you are going to break something, including a tradition, the more
you understand it, the better job you can do” (W. Buxton, 2007)
Architecture générale d’un système graphique interactif

Application

Outils de construction d’interfaces

Librairie graphique

Système de fenêtrage

Périphériques d’entrée/sortie

Système d’exploitation
Application

Outils de construction d’interfaces

Librairie graphique

Système de fenêtrage

Périphériques d’entrée/sortie

Système d’exploitation
Modalités et périphériques d’entrée : quelques exemples

Claviers, boîtes à boutons

Potentiomètres (rotatifs, linéaires)

Souris, tablettes, joystick, trackball

Crayons optiques

Surfaces tactiles

Accéléromètres, gyroscopes, etc

Capteurs de position et direction

Sons, parole

Vision par ordinateur

Interfaces cerveau-ordinateur
Du périphérique physique au périphérique logique

Exemple : périphériques donnant une information de position


‣ localisation absolue (tablette, écran tactile, crayon optique)
ou relative (souris, joystick, trackball)
‣ interaction directe (écran tactile, stylo optique)
ou indirecte (souris, joystick, trackball, tablette ?)

Le passage du monde physique au monde logique se fait via une


fonction de transfert (nous y reviendrons…)
Gestion des périphériques d’entrée

Le système peut interroger le périphérique (polling)


‣ de manière bloquante (mais on ne peut rien faire en attendant…)
‣ de manière non bloquante (mais on risque d’interroger souvent pour rien)

L’envoi de données par le périphérique peut aussi déclencher une


interruption permettant au système de mettre ces données dans une file
d’événements à traiter ultérieurement

Le périphérique peut avoir très souvent des choses à dire…


‣ 50, 60 fois par seconde ou plus pour des caméras
‣ 100 à 1000 fois par seconde pour une souris, un accéléromètre, etc
‣ des dizaines ou centaines de milliers de fois par seconde pour un micro
Un périphérique intéressant : la Wiimote

1 pad directionnel + 8 boutons


1 accéléromètre 3 axes
1 caméra sensible à l’infrarouge

4 LEDs
1 vibreur
1 haut-parleur

1 liaison BlueTooth
1 connecteur pour extension (e.g. Motion Plus pour gyroscope)

Pour les détails techniques, voir http://wiibrew.org/wiki/Wiimote


justesse
Les données sont souvent bruitées… (accuracy)

fidélité
(precision)
La moyenne glissante n’est pas une solution

Un filtre passe bas du premier ordre est meilleur,


mais le compromis précision/réponse reste difficile
à trouver

Une solution efficace et pas chère : à l’aide d’un


premier filtre passe bas, estimer la dérivée et s’en
servir pour déterminer la fréquence de coupure
d’un deuxième filtre passe bas appliqué sur les
données (on y reviendra…)

http://www.lifl.fr/~casiez/1euro/
Périphériques d’affichage : quelques exemples

Apple Macintosh 128k Apple iPhone 5S Ecran Apple Thunderbolt


512 x 342 pixels, 9” 640 x 1136 pixels, 4” 2560 x 1440 pixels, 27”, 12 ms
175 104 pixels au total 727 040 pixels au total 3 686 400 pixels au total

Ecran volumétrique HiPerSpace, UC San Diego


192 x 768 x 768 pixels, 10“ 14 x 5 écrans 30” de 2560 x 1600 pixels
11 3246 208 pixels au total 286 720 000 pixels au total (35840 x 8000)
Autres modalités et périphériques de sortie

Diffuseur d’odeur (Exhalia)

Geomagic Touch X Vital STIMTAC


6DOF, 7.9 N, > 1100 dpi (CEA LIST) (L2EP, Univ. Lille 1)
Application

Outils de construction d’interfaces

Librairie graphique

Système de fenêtrage

Périphériques d’entrée/sortie

Système d’exploitation
Système de fenêtrage

Le système de fenêtrage (ou système graphique) permet aux applications


d’utiliser les différents périphériques d’entrée/sortie

Une fenêtre est une zone autonome pour l’affichage et/ou l’entrée de données

Le système de fenêtrage s’occupe de


‣ l’ouverture et la fermeture d’applications, la gestion de session
‣ la gestion des fenêtres
‣ l’affectation des périphériques d’entrée (focus)
‣ la communication entre applications (e.g. copier-coller, glisser-déposer)
Dessiner dans une fenêtre : quel modèle ?

Eléments constituants d’un modèle graphique


‣ un ensemble de primitives graphiques
‣ un ensembles d'attributs sur ces primitives
‣ une sémantique graphique et des fonctions associées (e.g. clipping)

Principaux modèles utilisés : pixellaire, vectoriel 2D, vectoriel 3D

Le dessin peut être direct (modèle du peintre) ou structuré (graphe


d’objets, graphe de scène)

Le modèle est mis en œuvre dans une ou plusieurs librairie(s)

Exemples de librairies/modèles : Xlib, Java2D, PDF, SVG, OpenGL


Modèle pixellaire + vectoriel 2D

A chaque pixel sont associées trois composantes de couleur


(rouge, vert, bleu) et une composante d’opacité (alpha)

Les pixels sont produits par des primitives de dessin


‣ lignes droites ou courbes (splines, bezier)
‣ formes libres
‣ polygones (triangles, rectangles, etc)
‣ arcs, cercles, ellipses
‣ texte (police+taille+style) Hello
‣ dessin bitmap
Dessiner dans une fenêtre : quelles coordonnées ?

Plusieurs systèmes de coordonnées co-existent

Celui lié aux objets visualisés


‣ dont les unités dépendent des objets considérés
‣ indépendant de l’application

Celui lié à l’adressage de l’écran


‣ en pixels
‣ quelle origine (e.g. écran ou fenêtre) ? quelle orientation ?

Le monde réel
‣ en mètres (ou décimètres, centimètres, millimètres)
‣ indépendant du périphérique mais lié à la visualisation choisie
Dessiner plusieurs fenêtres : quel modèle ?

Avec ou sans recouvrement

Eventuellement hiérarchique

En cas de recouvrement, le système doit pouvoir réafficher les parties


cachées (nécessite de mémoriser le contenu des fenêtres) ou demander
aux applications de le faire (les mécanismes de clipping peuvent être utiles)
Interagir avec le contenu d’une fenêtre

Une fenêtre est un terminal virtuel associé à une application

L’application reçoit (si elle le souhaite) les événements qui se


produisent dans toutes ses fenêtres

Suivant le périphérique, différentes gestions du focus sont possibles


‣ explicite : les événements sont envoyés à une fenêtre particulière
spécifiée antérieurement
‣ implicite : les événements sont envoyés à la fenêtre correspondant
à la position (x,y) qu'ils contiennent
‣ esclave : le focus suit celui d'un autre périphérique

Par défaut, s’ils n’ont pas été traités par une application, les
événements sont traités par le système de fenêtrage
Manipuler/gérer les fenêtres

“A window manager is a software package that helps the user


monitor and control different contexts by separating them
physically onto different parts of one or more display screens
(…) Before window managers, people had to remember their
various activities and how to switch back and forth”

B. Myers. “A taxonomy of window manager user interfaces”


IEEE Computer Graphics and Applications 8(5), 1988

De très nombreuses opérations, via des décorations (cadre et


barre de titre), des menus, icônes et raccourcis clavier
‣ placer et déplacer, dimensionner
‣ iconifier, maximiser, restaurer la taille initiale
‣ réduire à la barre de titre, cacher et révéler
‣ toujours au-dessus ou en-dessous
‣ fermer
Exemple d’architecture des années 1980s : X Window

any WM

X11
application
drawing
commands
X
X11
Xserver
application

input
X11 events
application
Quelles évolutions en 30 ans ?

Xerox Star, 1981 Apple MacOS 1.1, 1984 Microsoft Windows 2.03, 1987 X Window + TWM, 1989

Apple OS X 10.12 Microsoft Windows 10 Ubuntu


Quelles évolutions en 30 ans ?

Les technologies d’entrée/sortie ont grandement évolué

Les usages des systèmes graphiques interactifs se sont multipliés

Certains aspects de leur architecture ont profondément changé,


d’autres sont restés rigoureusement identiques

La recherche en Interaction Homme-Machine a proposé de nombreuses


alternatives… qui restent souvent méconnues
Les applications ne dessinent plus (directement) à l’écran

Constat d’Apple en 2001 : le GPU évolue plus vite que le CPU


‣ CPU : les performances doublent tous les 18 mois (loi de Moore)
‣ GPU : les performances doublent tous les 6 mois

Quartz Extreme
‣ “window system as a digital image compositor”
‣ de nombreux effets (“because we can”)
Les périphériques restent branchés à très bas niveau

On pourrait faire autrement : ICON (Dragicevic, 2001) permet de


simuler des périphériques dont on ne dispose pas ou de reconfigurer
dynamiquement les applications pour en utiliser de nouveaux
Pointage indirect : du travail en perspective

Toolkit(s) Application
événements
dx, dy
souris Interactions spécifiques
(pixels)
(pixels)

dx, dy
(counts)
Fonction
de transfert
Fonctions
224 de transfert pour le pointage indirect
CASIEZ ET AL.

Figure 2. (left) Decomposition of a pointing movement into the ballistic an


Les (adapted from Meyer
fonctions actuelles ont étéetaal., 1988).
priori (right)
conçues (a) principe
sur un Is the case where a single mo
similaire
target.d'impulsion
au modèle (b) and (c)initiale
are the more de
optimisée likely cases
Meyer et alwhere
(1988) the initial movement u
the target, requiring subsequent corrective movements.

Gain élevé Gain faible

overshoots the target, a second lower velocity corrective movemen


direction of the target. Successively slower corrective movem
Elles pourraient être conçues autrement

Principe du pointage sémantique (Blanch et al., 2004) : adapter le gain


en fonction des objets à proximité du pointeur

Autre possibilité : avec le pointage vectoriel, Guiard et al., (2004)


proposent de sauter les espaces vides
En théorie, donc…

résolution (CPI) résolution (PPI)

timestamp &
distance distance déplacement
déplacement
(m) (m) (pixels)
(counts)
vitesse gain
(m/s)
restes

Fonction de transfert
(sans unité)
En pratique ?
EchoMouse et Libpointing (Casiez & Roussel, 2011)

EchoMouse : une souris USB à laquelle on peut dire ce qu’elle doit


envoyer au système

Libpointing : une librairie OS X, Linux et Windows pour


‣ accéder directement aux périphériques de pointage
‣ obtenir des informations de configuration de ces périphériques et
des écrans (e.g. résolution)
‣ répliquer et comparer les fonctions de transfert existantes

http://libpointing.org/
En pratique

Windows
Windows OS X
OS X Xorg
Xorg

résolution (CPI) résolution (PPI)

timestamp &
distance distance déplacement
déplacement
(m) (m) (pixels)
(counts)
vitesse gain
Windows (m/s)
OS X restes
Xorg
Fonction de transfert
(sans unité)
Bilan sur le pointage indirect

Les fonctions de transfert sont actuellement le seul mécanisme de


facilitation du pointage disponible sur toutes les plateformes

Il y a des différences significatives entre les fonctions disponibles

Ce mécanisme reste très mal compris :


“Indiquée en dpi, la résolution correspond à la vitesse de déplacement
de la souris sur votre écran. Plus elle est élevée, moins vous devrez
déplacer la souris sur le tapis pour le même déplacement, cependant
vous serez moins précis.”

Pourquoi la résolution des périphériques n’est-elle pas utilisée ?


Actuellement, sur le marché

11 400 CPI
Il y a du potentiel, mais il n’est pas exploité

Le problème, c’est qu’on interagit à travers un pointeur

Le dispositif de pointage permet d’interagir avec le pointeur à


l’écran, lequel permet d’interagir avec les données représentées
On pourrait faire de l’interaction subpixel
(Roussel et al., 2012 ; Aceituno et al., 2013)

Toolkit(s)
dx, dy événements
(floats) souris
(floats)

specs
dx, dy
(counts) cardinalité du modèle
et espace disponible Interactions spécifiques
specs
Fonction Application
capacités de transfert
humaines
Gestion de fenêtres : que d’occasions manquées…

Rooms (ToG 1986)

Elastic windows (CHI 1997)

Dynamic space management (UIST 2000)

The task gallery (CHI 2000)

Tabbed, rotated, peeled-back, snapped and zipped windows (UIST 2001)

VideoWorkspace/Ametista (IHM 2002, CLIHC 2003)

Wincuts (CHI 2004)

Fold-and-drop (UIST 2004)

Scalable fabric (AVI 2004)

Shrinking window operations (AVI 2004)

Metisse (2005)

Mudibo (CHI 2005)

BumpTop (CHI 2006)


Application

Outils de construction d’interfaces

Librairie graphique

Système de fenêtrage

Périphériques d’entrée/sortie

Système d’exploitation
Du périphérique de localisation à la manipulation directe

Combiné à un périphérique d’affichage, un périphérique de localisation permet à


l’utilisateur de pointer, i.e. de désigner une zone de l’écran qui l’intéresse plus
particulièrement

L’utilisation d’un effecteur (e.g. un bouton) permet de marquer explicitement son


intérêt : on parle alors de sélection

En jouant sur le type d’effecteur utilisé, le déplacement du pointeur pendant son


temps d’activation et les répétitions, il devient rapidement possible de spécifier
des segments de droite, des zones rectangulaires, des trajectoires, etc.

Exemples
‣ click avec le bouton gauche de la souris
‣ click avec le bouton droit, ou avec le bouton gauche et la touche Shift du clavier
‣ press-drag-release
‣ double-click
‣ demi-click, click et demi, etc.
Du périphérique de localisation à la manipulation directe (suite)

La combinaison [écran graphique+clavier+souris] a permis l’émergence d’un


style d’interaction : la manipulation directe

Principes fondamentaux (Shneiderman, 1983)


‣ représentation permanente des objets d'intérêt ;
‣ utilisation d'actions physiques (e.g. pointage et sélection à la souris) plutôt que
de commandes à la syntaxe complexe ;
‣ opérations rapides, incrémentales et réversibles, dont les effets doivent être
immédiatement visibles sur les objets ;
‣ apprentissage selon une approche progressive afin de permettre l'utilisation de
l'interface même avec un minimum de connaissances.

Deux phrases qui résument assez bien la philosophie


‣ "Point and click instead of remember and type"
‣ "People are good at recognition, but tend to be poor at recall"
Lignes de commande vs. manipulation directe

Les interfaces à ligne de commande reposent sur une syntaxe


verbe-sujet(-compléments), ce qui a quelques inconvénients
‣ introduit un mode (et donc un risque d’erreur en cas d’interruption)
‣ rend nécessaire une action de type Cancel (pour sortir du mode)
‣ impose deux changements du locus d’attention (en supposant que
celui-ci était sur l’objet)

La manipulation directe repose sur une syntaxe sujet-verbe(-compléments)


et des actions physiques
‣ pas de changement du locus d’attention, pas de mode
‣ des interactions génériques (e.g. jeter une icône à la corbeille), la
commande effective dépendant de l’objet sélectionné
‣ les actions physiques rapides, incrémentales et réversibles facilitent un
apprentissage rapide et/ou progressif par exploration ou démonstration
Importance du couplage perception/action

La continuité du couplage perception/action est un élément


essentiel de la manipulation directe : les effets des opérations
doivent être immédiatement visibles sur les objets

La mise en oeuvre de ce principe passe par des mécanismes


de retour d’information (feedback mechanisms)
Modes d’interaction

Un mode est un état de l'interface dans lequel les actions de l'utilisateur


sont interprétées de façon homogène et différentes des autres modes

Il existe différents types de modes


‣ modes spatiaux : la même action en différents endroits produit des effets
différents
‣ modes temporels : la même action à des moments différents produit des
effets différents
‣ micro-modes : modes liés à une action physique

Une interface est une collection de modes


Modes d’interaction (suite)

Inconvénient des modes


‣ ils restreignent les fonctions disponibles à un moment donné
‣ ils obligent l'utilisateur a se souvenir des changements d'état de l'application
pour connaître les effets de ses actions
‣ problèmes classiques : initiative et technique de changement de mode

Exemples
‣ touche Esc pour basculer entre les modes insert et command de l’éditeur vi
‣ palette d’outils
‣ utilisation d’une pédale ou touche spéciale (Escape Meta Alt Control Shift)
Au-delà du pointage et de la sélection : les widgets

Un widget est un objet graphique interactif à trois facettes


‣ présentation : aspect graphique, plus ou moins paramétrable (e.g. Look and Feel
Java)
‣ comportement : réactions aux actions de l'utilisateur, généralement, peu ou pas
paramétrable
‣ interface d'application : lien avec l’application, notification des changements d'état

Objectifs : étendre le vocabulaire, faciliter l’apprentissage et la réutilisation de code

Exemple : les widgets de base du Macintosh (1984)


‣ bouton (button)
‣ menu déroulant (pull-down menu)
‣ case à cocher (checkbox), bouton radio (radio button)
‣ potentiomètre (slider), champ texte (text field)
‣ boîte de dialogue pour les fichiers (file open/save dialog)
Tâches élémentaires de l’interaction

Les widgets sont notamment utilisés pour réaliser de manière standard des
tâches élémentaires d’interaction

A suivre : quelques exemples pour l’interaction graphique 2D


‣ saisie (textes, quantités, positions, tracés)
‣ sélection (par pointage, dans une liste, par saisie, par menu, exclusive, binaire)
‣ déclenchement (boutons, cliquer-tirer, entrée gestuelle)
‣ défilement (barres de défilement, défilement direct, défilement automatique)
‣ spécification d'arguments et de propriétés (boîtes d’alerte et d’information,
boîtes de dialogue, boîtes de propriétés)
‣ transformations (poignées de manipulation)

Cette liste n'est pas exhaustive...


Tâches élémentaires : saisie

Saisie de texte : boîtes de saisie


‣ ligne simple ou multilignes
‣ formattage standard ou spécial (e.g. pour mot de passe)

Saisie de quantités
‣ potentiomètres (sliders, range sliders)
‣ steppers

Saisie de positions et de tracés : par échantillonnage du


dispositif de pointage

La saisie peut être adaptée au type de valeur recherché


(e.g. date, dimensions d’un tableau)
Tâches élémentaires : sélection

Choix d'un ou plusieurs éléments dans un ensemble


‣ cardinal fixe ou variable
‣ cardinal petit ou grand

Cardinal fixe
‣ boutons radio, cases à cocher
‣ menus

Cardinal variable
‣ pointage : avec feedback, éventuellement guidé/aidé, simple ou
multiple (groupe ou intervalle) avec possibilité d’ajout ou de retrait
‣ listes, saisie ou combinaison des deux
Tâches élémentaires : navigation dans de grandes listes

L’alpha-slider (Ahlberg & Shneiderman, 1994) permet de sélectionner


rapidement un élément dans une grande liste (e.g. de 13 à 24 secondes
pour trouver un film dans une liste de 10.000 titres)

Le dernier métro

ABC DEF GHIJKL MN OPQ RST UVWXYZ

Autre exemple : OrthoZoom (Appert & Fekete, 2006) permet de naviguer


facilement dans les 150000 lignes de texte des 37 pièces de Shakespeare
Tâches élémentaires : sélection dans des menus

Trois grands types de menus


‣ fixes (palettes)
‣ surgissants (pop-up), généralement sous la souris
‣ déroulants (roll-down)

Les items sont généralement triés et groupés à l’aide de séparateurs

Des raccourcis clavier et mnémoniques (e.g. lettres soulignées) sont souvent


disponibles

Les mécanismes de feedback sont là encore importants : items grisés, surlignés

Les menus pop-up et déroulants sont souvents hiérarchiques, parfois détachables


Tâches élémentaires : sélection dans des menus (suite)

La plupart des menus sont organisés de manière linéaire, mais il


existe toutefois quelques exceptions...

Pie menus (Hopkins, 1991)


‣ la sélection radiale est plus rapide que la sélection linéaire
‣ inconvénient : difficilement utilisable au-delà de 8 items par menu,
difficile à positionner dans certains cas...

Marking menus (Kurtenbach, 1993)


‣ idée : permettre la sélection par geste sans affichage du menu
‣ transition aisée du mode novice au mode expert

L’implémentation des menus circulaires pose de nombreux


problèmes... mais il existe des solutions
Tâches élémentaires : déclenchement

Boutons (et menus)

Cliquer-tirer (drag-and-drop) : l'action dépend de la source et de la destination

Entrée gestuelle : spécification simultanée de la commande et de l'objet

Hello

Création Sélection Déplacement, copie

Destruction Editeur musical Tableur


Tâches élémentaires : défilement

Barres de défilement
‣ sens du défilement ?
‣ découplage spatial

Défilement direct
‣ déplacement “à la main”
‣ défilement automatique

Zoom
‣ zoomer pour voir le détail, dézoomer pour voir le contexte
‣ différentes techniques de pan&zoom : SDAZ, OrthoZoom,
control menus
Tâches élémentaires : spécification d’arguments et propriétés

Boîtes de dialogue : champs + bouton(s) de type Ok, Apply, Cancel, etc.


‣ boîtes modales ou non modales
‣ découplage temporel et spatial entre la spécification de la commande, de
ses paramètres et de son exécution
‣ parties optionnelles, boîtes à onglets

Boîtes de propriétés :
effet immédiat des modifications sur les objets de la sélection

Size Size 18 Size 24


Hello Hello Hello
Tâches élémentaires : transformation

Poignées de manipulation et modificateurs permettant de changer


la sémantique des actions effectuées (e.g. déplacer, changer la
géométrie, dupliquer)
Au-delà des widgets : boîtes à outils de construction d’interfaces

Que trouve-t-on dans une boîte à outils ?


‣ des widgets réutilisables (e.g. boutons, menus)
‣ des services programmables (e.g. préférences, copier/coller)
‣ un modèle d’architecture permettant de structurer l’application
‣ un générateur et un ou plusieurs langages de scripts

Pourquoi utiliser une boîte à outils ? Pour optimiser l’un des points suivants
‣ temps de construction ‣ correction
‣ efficacité ‣ confort d'utilisation
‣ compacité ‣ versatilité
‣ robustesse
Boîtes à outils de construction d’interfaces

Il existe de nombreuses boîtes à outils


‣ Xt, Motif, GTK (C) sous Linux
‣ MFC (C++) et ses dérivés sous Windows
‣ Cocoa (Objective-C) sous OS X
‣ Tk (Tcl, Python, Perl et autres), Qt (C++) et Swing (Java)
sur toutes les plate-formes

Exemples de services : placement des widgets, liens widgets - application,


squelettes d’application, générateur de code

La plupart de ces boîtes à outils présentent deux limitations majeures


‣ la programmation est fastidieuse
‣ l’interaction se limite le plus souvent aux widgets pré-existants

Exemple d’interaction simple qui reste difficile à programmer : le drag-and-drop


Exemple de service : placement des widgets

L’interface est généralement décrite par un arbre de widgets


‣ les noeuds sont des conteneurs (e.g. fenêtre, cadre)
‣ les feuilles sont des widgets simples (e.g. bouton, label, barre de défilement)

Gestionnaire de placement : placement géométrique des noeuds de l’arbre de widgets


‣ imbrication géométrique d'un widget fils dans son parent
‣ contrôle par le parent du placement de ses fils
‣ placement dynamique

Contraintes
‣ taille "naturelle" de chaque fils
‣ taille et position imposées par le parent
‣ autres contraintes spécifiées par le programmeur (e.g. grille, formulaire, ressorts)
Exemple de service : description/specification de l’interaction

Application non-interactive : “start, do something, stop”

Ancienne façon de voir les applications interactives : de temps en temps,


le système pose des questions à l’utilisateur

Version moderne : l’utilisateur contrôle l’application, via l’interface


‣ l’application attend régulièrement un signe de l’utilisateur (notion de
boucle principale dans laquelle sont traités les événements)
‣ le modèle de programmation événementielle peut être utilisé à l’intérieur
même de l’application
‣ de nombreux états à conserver… c’est compliqué !
Comment décrire/spécifier l’interaction ?

Avec des machines à états

Une machine à états est un automate à états finis permettant de


décrire formellement l’interaction avec un système
‣ chaque état de l’automate correspond à un état de l’interaction
‣ les transitions de l’automate sont déclenchées par des événements
‣ des conditions et actions peuvent être associées aux transitions

Intérêts
‣ possibilité de preuve et de validation formelle
‣ possibilité de lien direct avec l’implémentation
Exemple 1 : tracé de ligne élastique

Press
-------------------------
p1 = getPosition()

Drag
------------------------------------------
Idle Drawing
RubberBand(p1, getPosition())

Release
--------------------------------
Done(p1, getPosition())
Exemple 2 : sélection et déplacement d’un objet

Press
-------------------------
p1 = getPosition()

Idle Waiting

Release
----------------------------
select(getPosition())
Drag & dist(p1,getPosition())>eps
-----------------------------------------------
Release startDraggingObj(getPosition())
----------------------------------
stopDraggingObj(getPosition())

Moving

Drag
---------------------------
dragObj(getPosition())
Difficultés liées aux machines à états

Les langages couramment utilisés ne permettent pas de décrire


simplement les machines à états nécessaires aux interactions
souhaitées

Celles-ci sont généralement le résultat implicite de liens entre les


éléments d’interface et le reste de l’application établis par différents
moyens
Liens widgets - application : fonctions de rappel

Les fonctions de rappel sont enregistrées dans le widget à sa création

okCallback (...) { ... }

Elles sont ensuite appelées lorsqu’une des opérations du widget est activée

okCallback (...) ;

Inconvénients
‣ un plat de spaghettis de callbacks
‣ la nécessité de passer par des variables globales pour partager des données
entre fonctions de rappel
Liens widgets - application : envoi de messages

Un objet est associé au widget au moment de sa création

btnHandler

Des méthodes de cet objet seront appelées par le widget

btnHandler.handleClick(...) ;

Avantage : permet une bonne encapsulation des données


Liens widgets - application : valeurs actives

Une valeur active établit un lien bi-directionnel entre une variable d'état
d’un ou plusieurs widget(s) et une variable du noyau fonctionnel

12 i

26 i

i:=15
15 i

Avantage : vues multiples

Inconvénient : mécanisme rarement disponible et approche généralement


limitée aux types simples (e.g. entiers)
Exemple de service : squelettes d’application

Exemple historique : MacApp (Apple, 1986)

Principe : application à trous


‣ code d’une application incomplète, à compléter
‣ donne la structure globale de l’application et contient ce que l’on ne
peut pas (ou veut pas) mettre dans la boîte à outils
‣ reflète surtout l’inadéquation des outils et langages utilisés
Exemple de service : générateur de code

But : aider (automatiser ?) la mise en oeuvre d’interfaces


‣ placer les widgets, modifier leurs attributs (couleur, etc.)
‣ les connecter à l’application
‣ tester leur comportement

De nombreux noms pour une même famille de systèmes


‣ user interface management systems (UIMS)
‣ user interface builder
‣ user interface development environment

Inconvénients
‣ What You See Is All You Get
‣ solutions partielles
‣ il reste tout de même du code à écrire…
‣ le code généré est souvent difficile à modifier
Interfaces WIMP

WIMP = Windows, Icons, Menus & Pointer

Ce terme désigne l’ensemble des éléments de base évoqués

Les interfaces WIMP sont simples à apprendre, simples à utiliser et ont


permis l’émergence d’environnements graphiques standards

Mais elles sont trop simples à programmer…


‣ on peut facilement créer une “nouvelle” version de l’application
‣ on peut facilement ajouter des menus, palettes, barres d’outils
et boîtes de dialogue
‣ on réutilise, on compose des éléments standards, mais sans réellement
(re)penser l’interaction
‣ on finit pas perdre les avantages de la manipulation directe
A force d’indirections et de modes...
Du bon usage des métaphores

La manipulation directe pose en fait des questions délicates


‣ quels sont les objets d'intérêt ?
‣ comment les représenter ?

Principe de base pour l’utilisation d’une métaphore : utilisation de


concepts connus de l’utilisateur pour introduire le modèle
conceptuel du système
‣ modèle qui facilite l'apprentissage : l’utilisateur peut anticiper le
comportement du système
‣ dangers : purement esthétique, trop restrictive (e.g. trop fidèle)

Métaphores du monde réel


‣ spatiales (e.g. bureau, pièce)
‣ sociales ou techniques (e.g. théatre, télévision)
Changer/augmenter la métaphore
Application

Outils de construction d’interfaces

Librairie graphique

Système de fenêtrage

Périphériques d’entrée/sortie

Système d’exploitation
Application

Outils de construction d’interfaces

Librairie graphique

Système de fenêtrage

Périphériques d’entrée/sortie

Système d’exploitation
Architecture des applications interactives

Principe de base : la séparation entre l’interface et le noyau fonctionnel

interface

utilisateur noyau
fonctionnel

Différents modèles ont été proposés suivant ce principe


‣ le modèle de Seeheim
‣ MVC (Model - View - Controller)
‣ Arch
‣ PAC (Présentation - Abstraction - Contrôle)

Remarque : ces modèles ne se limitent pas à l’interaction graphique


Service(s) minimum

Séparer le noyau fonctionnel de l’interface est un bon principe...


mais le noyau fonctionnel doit fournir un minimum de services pour
pouvoir implémenter correctement l’interface

Exemples de services utiles (Fekete, 1996)


‣ la notification
‣ la prévention des erreurs
‣ l’annulation
Service(s) minimum : notification

Notification : possibilité pour un module externe d’être prévenu


lorsque l’état du noyau sémantique change

Exemple d’utilisation : visualisation d’un système de fichiers

Mise en œuvre
‣ modularité : le noyau fonctionnel n’est pas censé connaître le mode
de présentation
‣ on veut éviter le polling (attente active)
‣ variables actives (Tcl), callbacks, etc.
‣ notification synchrone ou asynchrone ?
Service(s) minimum : prévention des erreurs

Prévention des erreurs : possibilité de savoir si un appel de fonction


est licite dans un certain contexte

Exemples d’utilisation
‣ retour d’information pour la manipulation directe
‣ menus grisés

Mise en œuvre
‣ pas avec des exceptions (c’est trop tard…)
‣ fonction de test (accepte, refuse, nsp)
Service(s) minimum : annulation

Annulation : possibilité de revenir à des états antérieurs du noyau


sémantique

Exemple d’utilisation : voir Word, Photoshop, etc.

Mise en œuvre
‣ objectif : éviter la simulation au niveau de l’interface
‣ historique, mécanisme de rollback
Modèle de Seeheim

Issu d’un atelier de 1983... à Seeheim

Propose une séparation de l’interface en trois couches


‣ présentation (niveau lexical) : gestion des entrées, présentation
affichage
‣ contrôleur de dialogue (niveau syntaxique) : maintient
un état qui permet de réunir les séquences contrôleur
d’interactions élémentaires en commandes et de dialogue
d’introduire des modes
‣ adapteur de domaine : adapte les commandes au
adapteur
noyau fonctionnel et transforme les objets abstraits
de domaine
en objets représentables

Un cadre abstrait et assez peu détaillé


noyau
fonctionnel
Arch

Une version un peu plus moderne du modèle de Seeheim


‣ prend en compte l’existence de boîtes à outils de construction
d’interfaces
‣ introduit des adapteurs du côté de la présentation et du noyau
fonctionnel
‣ les composants peuvent être de taille variable... ou absents

dialogue
component
domain
presentation
adaptor
component
component

interaction domain
toolkit specific
component component
noyau
fonctionnel
MVC : Model - View - Controller

Origine
‣ modèle issu de Smalltalk-80
‣ adopté par de nombreuses boîtes à outils
(Java AWT et Swing, Microsoft MFC, …)

C V
Principe
‣ le modèle correspond à une vue abstraite d’un
objet de l’application (e.g. un client)
‣ la vue présente à l’utilisateur des informations
issues du modèle (e.g. le nom et l’adresse d’un M
client)
‣ le contrôleur se charge de l'interaction avec noyau
l'utilisateur fonctionnel
Mise en oeuvre de MVC

Un modèle asymétrique
‣ une paire Contrôleur/Vue est associée à un seul Modèle
‣ un modèle peut se voir associé plusieurs paires Contrôleur/Vue

Listes de dépendants et notification


‣ les paires Contrôleur/Vue d’un modèle sont enregistrées dans une
liste de « dépendants »
‣ lorsque le modèle change, tous les dépendants sont notifiés

Avantages
‣ vues multiples synchronisées
‣ vues et contrôleurs modulaires et ré-utilisables

Inconvénient : complexité de communication entre les composants


(e.g. entre C et V)
Modèles à agents

Un système interactif peut être vu comme une collection d'agents,


chaque agent ayant
‣ un état
‣ une expertise
‣ et étant capable d'émettre et de réagir à des événements

Un interacteur est un agent en contact direct avec l'utilisateur

Remarque : tous ces agents sont réactifs, pas cognitifs (IA)


PAC : Présentation - Abstraction - Contrôle

Un agent PAC incarne une compétence à un


niveau d’abstraction donné composé de
trois facettes
application
‣ présentation (le V+C de MVC) : définit le
P A
comportement perceptible de l’agent C
(entrée/sortie)
‣ abstraction (le M de MVC) : représente P A P A P A
C C C
l’expertise de l’agent
‣ contrôle (pas d’équivalent dans MVC) : fait
P A P A
le lien entre A et P (pas de communication P A
C C
C
directe) et gère les relations avec les autres
dispositifs d'interaction
agents de la hiérarchie

L'interface est une structure hiérarchique


d’agents PAC, de l’application à l’utilisateur
Comparaison PAC - MVC

Distinction entrées/sorties dans MVC mais pas dans PAC


‣ MVC offre une meilleure souplesse/réutilisation possible de
composants d’interaction sur des vues différentes, mais nécessite
une communication accrue entre les objets Vue et Contrôleur

Distinction entre "modèle" et "communication entre la vue et le


modèle"
‣ cette distinction n’est pas faite dans MVC : risque d’amalgame au
niveau du modèle
‣ dans PAC, distinction entre Abstraction et Contrôle

Vous aimerez peut-être aussi