Les Principaux
Services d'une Boite à Outils
Thomas Baudel, Ilog, contribution a l'atelier ALF.
Il existe un vaste choix d'outils de construction des interfaces, pour
des raisons matérielles et historiques (différents constructeurs,
progrès technologique) ou pour répondre à des besoins
différents: interaction graphique ou interfaces pour l'informatique
de gestion, prototypage ou application à contrainte de performance
forte, progiciel ou développement à façon. Cependant,
de nombreux concepts se retrouvent entre ces outils, hélas rarement
explicités. Nous présenterons donc les bases logicielles
communes aux outils actuels, leurs motivations et d'entamer une taxonomie
de ces outils.
Tout d'abord, on distingue 3 couches logicielles dans les outils de
construction d'interfaces:
-
Les bibliothèques de base: bibliothèques graphiques,
gestions des dispositifs d'entrée et communication entre processus,
gestion des ressources, intégration dans le système hôte.
-
Les boites à outils pour l'interaction fournissent:
-
Une architecture d'agents interactifs et un modèle de communication
entre ces agents (et avec les dispositifs d'entrée-sortie) permettant
de structurer une application de façon extensible et maintenable.
-
Des services et programmes communs évitant la reprogrammation de
mécanismes courants (gestion des ressources et préférences,
gestion des entrées-sorties, du réaffichage, copier/coller,
glisser/déplacer, menus de base...).
-
Des composants prêts à l'emploi (boutons, menus, boites de
dialogues...) intégrables tels quels dans une application. Ceux-ci
sont souvent personnalisables ou dérivables pour s'adapter à
différents besoins.
-
Les outils interactifs de construction d'interfaces et langages
de scripts, permettant une mise en oeuvre rapide des mécanismes
de la boite à outils. Dans l'état actuel,
-
les outils interactifs sont soit des générateurs d'écrans
évolués, donc ne prenant en compte qu'une partie limitée
des besoins, notamment ne permettant pas de construire une architecture
d'application fiable, soit des prototypes de laboratoires, montrant des
concepts intéressant de programmation graphique d'interfaces, mais
n'ayant pas encore fait leurs preuves dans des applications réelles.
-
les langages de scripts ne sont qu'une surcouche de commandes au-dessus
d'une boite à outils, reprenant ses concepts de bases et permettant
une mise en oeuvre plus rapide grâce à un interpréteur.
Cette contribution se propose de présenter les principaux services
constituant une boite à outils, en vue d'établir des sous-taxonomies
des boites à outils et stratégies d'implantation existantes
pour chaque sous-partie. Nous commencons par un rappel sur la structure
des bibliothèques logicielles de base, qui peuvent être considérés
comme des modules de la boite à outils, et a se titre mériter
également une étude approfondie. Nous présentons ensuite,
de facon succinte, les deux grands pivots d'une boite a outils: la structure
de données reposant sur la notion d'objet d'interaction et les mécanismes
de communications entre ces objets. Nous énumérons ensuite
l'ensemble des services qui nous paraissent saillants dans les boites a
outils, avant de présenter le role principal de la boite a outils: la
définition de composants prets a l'emploi.
| Bibliothèques
logicielles de base |
L'objectif d'une boite à outils est de fournir un cadre de programmation
adéquat pour implanter certaines portions de l'interface utilisateur
d'une application. Par la suite, nous considérerons essentiellement
des applications à caractère graphique telles qu'on les trouve
actuellement sur les stations de travail et ordinateurs personnels. Lorsque
cela nécessaire, nous évoquerons les possibilités/restrictions
qui se posent pour d'autres environnements matériels. Il convient
cependant de préciser ce qu'on entends par cadre de programmation"
Un cadre de programmation est une bibliothèque de composants
chargés de maintenir des structures de données et réaliser
des opérations communes à la réalisation d'applications
interactives à caractère graphique. Entre autres, il s'agit
de gérer les entrées de l'utilisateur, le dessin, les contraintes
de positionnement, les ressources (en définissant ce qu'est une
ressource...), gérer l'insertion de l'application dans un environnement
et établir un lien entre les objets d'interaction et la sémantique
de l'application. Des services supplémentaires peuvent être
inclus, et le sont souvent: gestion de l'annuler/refaire (lien fort avec
la sémantique), gestion de l'aide en ligne, copier/coller, voire
au dela de l'interaction, avec un support pour les entrées/sorties
(persistance ou SGBD, réseau...).
Une toolkit repose sur un langage, un OS et un environnement d'utilisation
(GUI du système hôte). Ce chapitre présente sous forme
de note les principales caractéristiques des bibliothèques
de bas niveau sur lesquelles elles reposent.
Modèles graphiques
Modèle d'affichage: direct (le réaffichage est explicite),
indirect (une liste d'objets graphique est maintenue par l'application,
Modéle de dessin: sans état (tous les paramètres
du dessin sont spécifiés explicitement), avec état:
Double buffer, mécanismes de clipping, notion de port graphique,
systèmes de coordonnées, matrices de transformations, modèles
de couleurs, polices de caractères, gestions des pixmaps.
Exemples:
-
X (modèles de couleur, notion de gc, modèle client/serveur,
imposant la gestion de pixmaps...),
-
OpenGL (coordonnées flottantes, matrices de transformations, manipulation
d'images...),
-
Postscript (notion de path, gestion des polices de caractères) et
DPS,
-
Quickdraw et ses extensions (primitives "trappables", modèle de
dessin semi-structuré avec QDGX),
-
GD de win32, DirectDraw et Direct3D...
Modèles d'entrée
Entrée synchrone: exemple: printf/scanf, GKS.
Entrée asynchrone: interruptions, mécanismes d'événements.
Exemples:
-
X (client/serveur)
-
GKS/PHIGS (entrées abstraites),
-
MacOS Event Manager (possibilités de traps et d'interruptions),
-
Win32 (multithread natif)
Systèmes de fenêtrage et intégration
dans l'environnement
Toute application interactive s'insère dans un système hôte.
L'utilisateur étant naturellement multitâche, il importe que
son outil supporte les besoins de son activité en lui permettant
d'utiliser plusieurs applications et de faire communiquer ses applications
entre elles.
Exemples:
-
X et ses window manager et session manager.
-
MacOS, le clipboard, publish/subscribe, AppleEvents, AppleScript...
-
Win32 et OLE/COM
-
Évolution vers une approche centrée sur le document
Autres couches logicielles de base
Bibliothèque audio
Bibliothèque vidéo
Ces deux médias ont pour particularité de traiter des
informations évoluant dans le temps, remettant en cause la notion
d'objet d'interaction figé dans le temps (Visible ou non).
Note sur les toolkits multi-plateformes
Une boite à outils multi-plateformes présente une implantation
abstraite des bibliothèques de base et réalise un adaptateur
sur ces primitives pour chaque plate-forme considérée.
| Boites
à outils et structuration des objets interactifs |
Notion d'objet interactif
Au centre de toute boite à outils se trouve la notion d'agent (objet
réactif, interacteur, glyph, widget...). Une application se définit
comme un ensemble de tels objets fournissant les fonctions suivantes:
-
méthode(s) de dessin
-
méthode(s) de réaction aux événements
-
dispositifs d'entrée
-
messages du système
-
messages des autres composants (notification)
-
méthodes de négociation de contraintes de placement
-
sémantique propre
-
éventuellement, ressources et paramètres de présentation
spécifiques
-
capacités d'introspection pour API avec un constructeur d'interface
ou d'autres outils similaires.
Ces objets interactifs représentent (pour l'interface de donnée)
le modèle conceptuel implicite de l'application: en gros, ils
suivent de près le modèle de données de l'application,
mais peuvent être adaptés pour les représenter de facon
plus pertinente au concept. Par exemple, un objet interactif présentant
une transformation 2D possédera les attributs 'Translation, Rotation,
Echelle' plutot que 6 paramêtres d'une matrice.
Ces objets sont composables, hiérarchisables et spécialisables,
avec plus ou moins de facilité suivant les boites à outils.
La structure des objets et le langage influent fortement sur les possiblités
d'extension et de modularisation offertes par la boite a outils: Organisation
en arbre, en DAG ou à plat (permettant d'utiliser efficacement un
quadtree), layering (physique et/ou conceptuel...).
Mécanisme de communication entre les objets graphiques, avec le
noyau applicatif et avec l'utilisateur
Ces objets interactifs ne peuvent se concevoir de facon isolée: ils
doivent représenter une hiérarchie de concepts signifiant
l'application. Pour cela, ils doit être possible d'établir
des liens fonction de la sémantique de ces objets. Un ou plusieurs
mécanismes représentant le niveau de couplage entre ces objets
et la dynamicité de ce couplage peuvent être utilisés
dans une bvoite a outils:
cf. CR de l'atelier IHM99: échelle des mécanismes de communication
-
Appel de fonction/méthode (liaison statique/dynamique, signifiée
par l'appelant)
-
Coroutine/Callback (liaison statique/dynamique, signifiée par l'appelé)
-
Observer/Observable (liaison décontextualisée de la cause
de l'appel)
-
Evénements, ou bus logiciel (liaison décontextualisée
de l'appelant et de la cause de l'appel)
-
Contraintes unidirectionelles (mécanisme de filtrage du dispatch)
-
Contraintes simples (filtrage avec prédicats récursifs)
Communication synchrone ou asynchrone....
| Services
fournis par les boites à outils |
-
Classes de bases
Conteneurs, algorithmes de bases (tri, recherche...), gestionnaire
de mémoire, chaînes de caractère, encapsulation de
l'OS (threads, fichiers, communication inter et intra-processus, timers),
objets géométriques... Hélas, malgré de récents
progrès (stl...), il n'existe pas de couche d'utilitaires de base
suffisamment standard, ce qui fait que presque toutes les boites à
outils doivent redéfinir leurs classes de bases.
-
Dessin
La boite à outils dispose d'une description des ressources disponibles
à la présentation du contenu de l'application. Dans la plupart
des cas, il s'agit d'un écran, couleur, avec des capacités
graphiques que l'on peu supposer uniformes sur l'ensemble des stations
de travail (de plus en plus).
De même que pour la gestion des entrées et des objets
intéressés par les événements, la BAO maintien
un modèle de présentation des structures de données
de l'application permettant de délester cette dernière d'activités
telles que l'affichage, le maintien de contraintes de position ou de taille.
Pour des raisons logiques, cette structure de données a de bonnes
raisons d'être partagée avec la première, au moins
pour ce qui est des événements comprenant un aspect "graphique",
tels que les événements de la souris.
-
Distribution des événements, notification
Une boite à outils permet de maintenir un processus à
l'écoute des actions de l'utilisateur. Pour cela, elle utilise un
modèle à événement: Chaque action est échantillonnée
en événement discret portant un type, des paramètres
propres aux types (emplacement...) ainsi que des paramètres sur
l'état des dispositifs ou du système au moment ou l'action
s'est produite: état des "modifieurs", fenètre située
sous le pointeur...).
La toolkit doit posséder un modèle des objets de l'application
lui permettant de déterminer le ou lesquels des objets doivent être
informés de l'événement pour le transformer (directement
ou non) en un changement de l'état de l'application.
À l'heure actuelle, deux modèles prédominent:
les systèmes à boucle simple, ou le processus traite séquentiellement
les événements, et les modèles à threads, ou
chaque événement est interprété indépendemment.
Des modèles plus anciens incluent l'entrée d'événements
abstraits, du type "entrée d'une chaîne", "entrée d'une
liste de points"... Ces modèles ont été abandonnés
depuis une dizaine d'années.
-
Placement
Les types de placement: statique (Mac ou Windows), par contraintes
(globales ou hiérarchie). Modèles de contraintes: Form de
Motif, place de tk, TeX de InterViews.
Types de modèles : purement hiérarchique, DAG, placement
implicite ou externe...
-
Incorporation dans l'environnement:
Création de fenêtres
publish/subscribe, OLE/COM...
-
Gestion de l'annuler/refaire
Méthodes simples: un seul niveau de undo/redo, par retard entre
l'interface et le noyau fonctionel (MacDraw 1, Netscpae composer)
Multiples niveaux de undo: nécéssite une structuration
des actions de l'utilisateur en commandes sur le noyau fonctionnel. Distinction
des commandes de présentation (non-annulables) des commandes modifiant
l'application (annulables).
Evolution récente (Maya) : un historique de construction éditable
par objets.
Points délicats: gestion de la sélection et du undo,
effets de bords des fonctions rendant des opérations non annulables,
alongement du temps de développement (+ 50%). Solution partielle:
notion de méta-commandes (ou undo-chunks) et commandes simples
-
Resources/préférences
MacOS: ressources typées, même le noyau fonctionnel est
une ressource !
X: ressources hiérarchisées (par classe et instance),
non typées
Windows: ressources compilées avec l'application, non-éditables
(en tout cas, pas prévu pour).
-
Événements non-standards, dispositifs d'entrée
non-standards
-
Gestion des modes : notion de 'manipulateur', d'outils, définition
des aspects articulatoires de l'interaction (drag and drop...)
-
Support pour la mise au point et la maintenance: DebugGlyph de Interviews
-
Internationalisation: passe par une gestion des ressources étendue,
mais non suffisant: exemple: entrée de texte.
-
Support pour la communication avec des noyaux fonctionnels
SGBD et persistance de l'information (ODBC), Réseaux (Wininet,
ISAPI), moteurs de visualisation, animation (Performer, Inventor), multimédia
(quicktime, libaudio...)...
-
Futures directions: prise en compte du contexte d'utilisation, des
utilisateurs multiples... Des dispositifs d'entrée non-standards,
des gestes...
| Composants
prédéfinis des boites à outils et leur extension |
Composants prédéfinis
-
Composants de bases: Boutons, menus,
-
Conteneurs: Zones scrollables, partageables, gestionnaires de positionnement,
fenêtres principales, palettes, canvas(drawing area)
-
Composants complexes:
-
Zones de listes
-
Zone de texte (éditable, non éditable, numérique,
multiligne, formatage...)
-
Zone de dessin
-
Zones de dessins spécialisées (Gantt Chartt...)
-
Dialogues: Alertes, Sélecteur de fichier, sélecteurs de couleurs
et paramètres de dessin...
Mécanismes d'extension
Paramétrage: (ex: ressources Xt/Motif)
Redéfinitions: (ex: Mac toolbox)
Dérivation (ex: Views, ou autres)
Composition (ex: InterViews)
Notion de 'direction de dérivation'
Délégation
Exemples de toolkits: InterViews/Fresco, IlogViews, X/Motif, Win32/MFC,
AWT, tk/tcl, MacOS toolbox, gnutk, DPS...
La taxonomie que nous avons présentée ne se prêtant
ni complète ni formelle. Il nous parait utile de disposer d'une
meilleure description des boites à outils, de leurs caractéristiques
et leurs propriétés, ainsi que des solutions adaptées
et ou adoptables dans chaque sous-domaine. C'est ce type de sujet que nous
souhaitons orienter les travaux de l'atelier: Établissement d'une
taxonomie plus précise des boites à outils, de leurs mécanismes
fondamentaux et des services qu'elles proposent.
-
[Apple 1986-1998] Apple, Inside Macintosh. Addison-Wesley.
1986-1998.
-
[Bass, et al. 1992] Bass, L., Cockton, G. et Unger, C., A
Reference Model for Interactive System Construction, in Engineering for
Human-Computer Interaction, Larson, J. et Unger, C., Editor. 1992, IFIP,
North-Holland: p. 1-11.
-
[Beaudouin-Lafon 1988] Beaudouin-Lafon, M. User Interface
Support for the Integration of Software Tools: an Iconic Model of Interaction.
in actes de Proc. ACM Symposium on Software Development Environments (SIGSOFT).
pp. 187-196. 1988. .
-
[Beaudouin-Lafon 1993] Beaudouin-Lafon, M. De l'usage des
capteurs de contexte dans les systèmes interactifs. in actes de
IHM, Conférence sur l'interaction homme-machine. pp. . 1993. Ecole
centrale de Lyon.
-
[Beaudouin-Lafon, et al. 1991] Beaudouin-Lafon, M., Berteaud,
Y., Chatty, S., Fekete, J.-D. et Baudel, T. The X Television -- C++ Library
for Direct Manipulation Interfaces. rapport de recherche LRI, Université
de Paris XI. 1991
-
[Card, et al. 1991] Card, S., Mackinlay, J. et Robertson,
A Morphological Analysis of the Design Space of Input Devices, ACM Transactions
on Information Systems. Vol. 9, 2 p. 99-122. 1991.
-
[Coutaz 1990] Coutaz, J., Interfaces homme-ordinateur. Dunod.
1990.
-
[Krasner et Hope 1988] Krasner, G. et Hope, S.,A Cookbook
for using the Model-View-Controller User Interface Paradigm in Smalltalk-80,
Journal of Object-Oriented Programming. Vol. 1, 3 p. 26-49. 1988.
-
[Gamma et al.] Erich Gamma, Richard Helm, Ralph Johnson and
John Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software,
ISBN 0-201- 63361-2 , 1997, Addison-Wesley.
-
[Myers, et al. 1990] Myers, B., Giuse, D., Dannenberg, R.
et al., e., Garnet: Comprehensive Support for Graphical, Highly Interactive
User Interfaces, Computer Magazine. Vol. , Novembre. 1990.
-
[Nigay et Coutaz 1995] Nigay, L. et Coutaz, J. A Generic
Platform for Addressing the Multimodal Challenge. in actes de SIGCHI'95.
pp. 98-105. 1995. ACM & Addison-Wesley.
-
[Nigay 1993] Nigay, L. Conception et modélisation
des systèmes interactifs : application aux interfaces multimodales,
Thèse de Doctorat, IMAG et Université Joseph Fourier, Grenoble.
1993
-
[Pfaff 1985] Pfaff, G., User Interface Management Systems.
Springer Verlag. 1985.
-
[Goldberg et Robson 1983] Goldberg, A. et Robson, D., Smalltalk-80:
The Language and its Implementation. Addison-Wesley. 1983.
-
[Salber, et al. 1994] Salber, D., Nigay, L. et Coutaz, J.
Extending the Scope of PAC-Amodeus to Cooperative Systems. in actes de
CSCW'94, Workshop on Software Architectures for Cooperative Systems. pp.
. 1994. ACM.
-
[Schmuker 1986] Schmuker, K. J., Object Oriented Programming
for the Macintosh. Hayden. 1986.