Action Le Tool

previous up next contents
Précédent : Présentation générale et objectifs Remonter : Action LeTool, Environnement de Programmation Suivant : Actions industrielles



Résultats nouveaux

Mots-clés : assistance à l'utilisateur, environnement de programmation, langage à objets, qualité du logiciel, Lisp, CLOS, Common Lisp, conception par objets, programmation par objets, objets colorés, objets multidimensionnels, programmation visuelle, interface homme-machine, ergonomie cognitive




Participant : Henry Borron


Notre travail a porté successivement sur trois aspects : le premier, motivé par l'objectif de communication proposé par Gilles Kahn, a consisté à peaufiner et mutuellement renforcer les concepts précédemment établis pour montrer leur puissance expressive ; le second, à développer un certain nombre d'idées concourant à la définition d'un algorithme traversant de linéarisation monotone ; le troisième, à identifier une stratégie de valorisation industrielle du travail effectué, ceci en coopération avec le professeur Wegmann de l'EPFL.

Puissance expressive des concepts

Le travail effectué couvre l'ensemble de la partie informatique du projet. La partie cognitive, tout à fait essentielle (elle paraît bien souvent de nature à décider des choix fondamentaux), nécessite maintenant un travail de validation qui peut difficilement être effectué autrement que par une équipe de spécialistes. À nos yeux, le concept de dimensions cognitives proposé par T.R.G. Green donnerait à une telle étude unité et profondeur.

Avant de poursuivre, le lecteur se reportera utilement à notre rapport d'activité précédent (Action LeTool, 1996) : le vocabulaire utilisé ici y est expliqué.

Objet multidimensionnel

Le concept d'objet multidimensionnel a été clairement séparé du formalisme visuel, ce qui est à la fois plus propre et plus pratique. Figuré dans un espace cartésien à N-dimensions bien connu de tous, le comportement d'un objet est aisément décrit et compris en termes d'états et de transitions. L'expression en termes de composantes (sous-états et transitions projetées) est immédiat ; les transitions contraintes sont facilement introduites ainsi que le marquage des états à l'aide de jetons. L'espace cartésien permet aussi, comme nous l'avions fait précédemment, l'exposition claire du concept de mixin et de l'opération de dérivation (ajout d'un mixin à un objet en l'un de ses états).

À vrai dire, nous utilisons aussi bien un espace à N dimensions qu'un espace à N+1 dimensions : la dimension supplémentaire, qualifiée d'imaginaire, permet un regroupement topologique des sous-états associés à une même dimension, souvent sous forme arborescente (mais pas nécessairement). Elle offre une transition intéressante vers notre formalisme visuel. Le concept d'état éphémère y trouve son sens. La représentation en N dimensions est plus abstraite d'une certaine manière, mais parfois aussi plus commode (elle permet de traiter des exemples un peu complexes pour N=2 sans requérir une représentation spatiale).

L'héritage local peut être facilement introduit dans la représentation à N+1 dimensions, ainsi que celui de transition réflexe, mais seulement introduit. Seul le formalisme visuel que nous proposons lui donne une belle unité.

Formalisme visuel

On ne peut aujourd'hui sous-estimer l'impact d'un formalisme visuel. Un tel formalisme contraint fortement les interfaces proposées aux utilisateurs, lesquelles pour être construites réclament des investissements très importants en termes d'hommes * années. Ces interfaces peuvent décider de l'adoption d'un produit ou de son rejet (impact cognitif). Les conséquences industrielles, et parfois juridiques (ex. : procès Microsoft/Apple), sont donc de première grandeur. Soumis cette année à l'O.M.G. (Object Management Group) dans le cadre de la standardisation des méthodes de conception et d'analyse, U.M.L. (Unified Modeling Language) avec ses neufs types de diagrammes, témoigne bien de cette importance.

Le formalisme que nous proposons est basé sur les connexions (transitions réflexes). Il est directement issu de la représentation cartésienne en N+1 dimensions. Il permet une expression unifiée de l'héritage local (valable aussi bien pour les transitions, que pour les méthodes et les représentations en mémoire). La belle hiérarchisation conceptuelle des constructions (sélection, conjonction, décomposition) en termes de transitions réflexes lui donne une unité qui déborde l'aspect purement visuel. On retiendra aussi la conformité avec l'expression des relations hiérarchiques entre classes, expression toujours représentée sous forme de connexions. Cette unité a son intérêt lorsqu'on éclate le graphe global d'une classe en unités plus petites (graphes incrémentaux attachés à la classe considérée et aux ancêtres de celle-ci).

L'expression cartésienne du concept d'objet multidimensionnel clarifie la relation entre notre formalisme visuel et celui des graphes hiérarchiques (higraphes) de Harel, formalisme appliqué notamment aux << statecharts >> et retenu pour le diagramme d'états-transitions d'U.M.L. Le formalisme des hi-graphs est basé sur l'inclusion ; le nôtre, sur les connexions. L'inclusion convient bien pour des systèmes purement hiérarchiques, mais y trouve sa limite : pour décrire, par exemple, l'existence d'une transition originaire d'une conjonction, il faut une transition contrainte dont l'expression littérale n'est pas immédiate à saisir (surcoût cognitif). À l'inverse, un formalisme basé sur les connexions autorise (il n'y a pas obligation) la matérialisation visuelle d'une conjonction, d'où une expression évidente pour l'exemple concerné. L'analyse d'exemples plus complexes montre que les connexions ont une capacité d'expression visuelle très large, potentiel que l'on ne trouve pas dans l'autre style de formalisme. En attendant, s'il est possible, une étude d'ergonomie cognitive sur les mérites comparés de l'un et l'autre types de formalisme, le prototype que nous envisageons se devra de proposer les deux.

Synthèse automatique et pure déclarativité

Notre approche vise à maximiser la modularité. Elle a pour hypothèse que la programmation par objets s'est arrêtée au milieu du gué. Elle en reprend l'idée de base (responsabiliser les structures de données) et la pousse à fond en faisant dépendre la réponse d'un objet à un << message >> non seulement de la classe de cet objet mais aussi de son état, et cela de manière systématique. À chaque classe est donc attaché un graphe décrivant les possibles états d'une instance de cette classe et les transitions entre ceux-ci du fait d'une requête externe (message ou fonction générique). La systématicité de cette approche la rend distincte d'une approche permettant (mais ne requérant pas) l'association d'un graphe d'états-transitions à une classe, par exemple comme en U.M.L. Or cette systématicité est à la source d'une propriété fort importante : celle de synthèse automatique. Autrement dit, lorsqu'un utilisateur s'intéresse à une classe, le système sous-jacent est capable de bâtir automatiquement le graphe global pour cette classe (à partir des graphes incrémentaux attachés à la classe considérée et aux ancêtres de celle-ci). Or le graphe global décrit entièrement l'essentiel du comportement des objets de la classe.

Cette capacité contraste avec les systèmes à objets traditionnels qui, eux, laissent l'utilisateur totalement dépourvu face à la hiérarchie de la classe considérée. L'utilisateur n'a d'autres ressources que d'aller examiner le code de chacune des classes impliquées (définitions des variables et méthodes) pour essayer de se construire une image mentale du comportement des objets de la classe considérée. Un expert peut avoir quelques difficultés... Pour un novice, l'effort cognitif est considérable. Typiquement, il peut deviner que telle classe peut lui être utile, mais avant d'en être sûr et de pouvoir l'utiliser, quel travail ! Dans l'un et l'autre cas, les mauvaises interprétations peuvent, bien sûr, être la cause d'erreurs. Cette situation est d'une certaine manière paradoxale puisque la programmation par objets est typiquement vantée pour faciliter la ré-utilisabilité... L'écart entre la théorie et la pratique est indéniable : en témoigne les hauteurs moyennes des hiérarchies rencontrées dans les faits (de 1,5 à 3,5 selon certaines études).

Deux autres points distinguent encore notre proposition de la programmation objets traditionnels et renforcent sa position : (1) l'existence des mixins : très rarement supportés par les langages objets traditionnels, ils favorisent la réutilisation du code. Notre proposition en fait un moyen simple et utile d'extraire des propriétés adjectivales, réutilisables d'une manière aisée, contrôlées et de surcroît efficaces (pas de surcoût à l'exécution grâce aux mixins paramétrés). La capacité de synthèse automatique s'en trouve étendue ; (2) la pure déclarativité : contrairement aux langages à objets traditionnels, notre proposition permet d'affranchir le corps des méthodes de la présence de constructions anti-modulaires comme << super >> ou << call-next-method >> (voire pire). Pour savoir comment s'enchaînent les méthodes, point n'est besoin d'examiner le corps de celles-ci : l'information est concentrée dans les en-têtes.

Algorithme de linéarisation

Ce travail, démarré l'an passé, a été poursuivi cette année. Jean-Patrick Giacometti nous a apporté son soutien.

La linéarisation est la base technique la plus puissante pour gérer l'héritage des méthodes et représentations en mémoire. Les algorithmes classiques de linéarisation (cf. Flavors, LOOPS, CLOS,...) ne sont pas monotones. Pourtant, la monotonie est une propriété importante que l'on est en droit d'attendre des algorithmes de linéarisation depuis les travaux de Ducournau, Habib, Huchard et Mugnier. L'algorithme DHHM qu'ils ont proposé est incrémental et non point traversant comme les algorithmes habituels. L'algorithme que nous proposons est, lui, tout à la fois monotone et traversant. Il fournit les mêmes résultats que DHHM. Cet algorithme montre qu'une linéarisation monotone correspond en fait au parcours d'un certain arbre en post-ordre. (Si la hiérarchie est ordonnée de bas en haut comme il est d'usage, alors l'arbre est orienté, lui, de haut en bas.)

Le noyau de notre proposition est un algorithme de base, monotone par nature, applicable à un pur treillis. L'extension de cet algorithme s'analyse selon deux dimensions. En premier lieu, l'algorithme de base est corrigé pour respecter comme DHHM << pred >> (la relation entre deux classes soeurs) et << pred* >> (la relation qui étend << pred >> aux ancêtres de deux classes soeurs) : la correction correspond en réalité à une modification de l'arbre à parcourir en post-ordre. En second lieu, l'algorithme est étendu à tout type de hiérarchie. À cette fin, une typologie des hiérarchies a été définie : squelette simple (pur treillis), squelette décoré (i.e. avec branches indépendantes), squelettes multiples et décorés. La linéarisation d'une hiérarchie du deuxième type peut être interprétée comme résultant de la linéarisation de deux hiérarchies du premier type, obtenues l'une et l'autre par projection de certaines branches indépendantes sur les branches du squelette, la seconde impliquant de plus un effet-miroir. La linéarisation d'une hiérarchie du troisième type peut être interprétée comme une succession de linéarisations de hiérarchies du deuxième type après ordonnancement de ces hiérarchies. Toute hiérarchie du premier type (et donc de tout type) doit respecter un certain critère faute de quoi elle est rejetée. Toute hiérarchie du troisième type doit également respecter un autre critère sinon elle est également rejetée.

Une fois affichée correctement (selon un ordre dit naturel qui respecte à la fois l'ordonnancement des sous-classes d'une classe et celui des superclasses d'une classe), une hiérarchie peut être aisément linéarisée par inspection visuelle. À la différence de DHHM, notre algorithme ne nécessite en effet pas de parcours de graphes intermédiaires et génère directement les classes dans l'ordre final.

Stratégie de valorisation industrielle

Actuellement en cours, le travail dont il est question ici vise à identifier une stratégie de valorisation industrielle des résultats précédemment acquis. Ce travail est mené en collaboration avec le professeur Wegmann de l'EPFL (informatique industrielle). Trois orientations possibles ont été examinées, notamment l'attachement à U.M.L. L'exposé en est fait dans la section Actions internationales.



previous up next contents Précédent : Présentation générale et objectifs Remonter : Action LeTool, Environnement de Programmation Suivant : Actions industrielles