Self, introduction

 

Serge Fleury

 

ELI (Equipe Linguistique et Informatique)

Ecole Normale Supérieure de Fontenay-St Cloud

31 avenue Lombart

F-92260 Fontenay aux Roses

e-mail : fleury@ens-fcl.fr

http://www.ens-fcl.fr/~fleury/

 

 

Self

 

Self est un langage qui permet l'héritage multiple et l'héritage dynamique. Il a été conçu en 1986 par David Ungar & Randall Smith [UNG 86]. La première implémentation a été réalisée à Stanford en 1987, la dernière version (Self-4.0 [SEL 95]) est disponible depuis juillet 1995. Ce langage est désormais développé par Sun Microsystems. Les propriétés fondamentales du langage Self et de l'interface utilisateur sont la concrétude, l'uniformité et la flexibilité. La concrétude se manifeste clairement par le fait qu'un utilisateur manipule directement les objets du monde self et peut en créer de nouveaux à partir d'objets existants en les dupliquant et en les ajustant. L'uniformité se traduit par le fait qu'en Self tout est objet et que tous les objets dialoguent entre eux par envoi de messages. Les attributs des objets peuvent porter des données ou des methodes. De plus la distinction entre l'implémentation d'un programme et son exécution n'existe pas en Self : on peut ajuster dynamiquement les objets. Et enfin, l'environnement graphique de Self est composé d'éléments de base (les morphs) disponibles et réutilisables à volonté. La flexibilité découle directement des aspects de concrétude et d'uniformité de Self.

 

1. Objets et attributs Self

 

Un prototype ou un objet en Self est une entité composée d'attributs. Ces attributs peuvent porter des données, des méthodes ou pointer sur d'autres objets. La définition structurelle d'un objet peut être modifiée à tout moment. On dispose avec Self de primitives qui permettent d'ajouter ou de supprimer dynamiquement des attributs aux objets. Les mécanismes d'ajout(s) ou retrait(s) dynamique(s) d'attributs permettent de construire des représentations par affinements successifs : on peut à tout moment ajouter à un objet de nouveaux comportements ou modifier les comportements de cet objet. Les objets définis dialoguent entre eux via un mécanisme d'envoi de messages.

 

2. Héritage et Self : la délégation, une vision dynamique de l'héritage

 

L'héritage dans la PàP se réalise au travers de la notion de délégation. Pour mettre en place l'heritage avec Self :

 

• On commence par créer des objets qui vont porter les comportements partagés.

• On établit ensuite un lien entre ces objets et les prototypes qui délèguent les comportements factorisés en inscrivant dans ces prototypes le chemin de délégation défini. Pour inscrire un chemin de délégation dans un objet on ajoute un attribut parent (nom de l'attribut suivi d'une étoile) qui pointe sur l'objet qui porte les comportements délégués.

 

3. Un environnement de programmation pour l'expérimentation

 

L'environnement de programmation de Self permet une définition et une modification incrémentales des objets et leur manipulation directe. Dans notre cadre linguistique de travail, l'interface graphique de Self permet de manipuler des objets "vivants" et "évolutifs" capables de rendre compte de certains aspects évolutifs des savoirs ainsi représentés. L'utilisateur peut agir directement sur les objets construits et les faire évoluer à sa guise. Self démarre avec : un prompt interactif dans une fenêtre shell, une interface graphique interactive. L'environnement graphique est appelé le monde Self.

 

 

Figure 10. Interface shell et Trash-Can Self

 

On dispose par défaut dans cet environnement graphique d'un shell permet d'interroger les objets disponibles dans le monde Self et en particulier de les inclure dans l'interface graphique. On y trouve aussi une poubelle qui permet de nettoyer la fenêtre graphique en y déposant les objets que l'on ne souhaite plus y voir figurer. En utilisant la souris dans la fenêtre graphique, on peut accéder à certains outils qui permettent d'agir sur le monde Self. La touche droite de la souris active un menu des opérations sur le monde Self :

 

Les options disponibles permettent en particulier de :

 

Shell

créer un objet shell

Toggle Spy

activer un object qui contrôle les activités du système

Write Snapshot

sauvegarder l'état présent du monde Self

Quit

quitter la session de travail

 

De même, tous les objets de la fenêtre graphique sont réactifs à la souris. On peut ainsi accéder à certains outils qui permettent d'agir sur les objets.

 

  • La touche de gauche de la souris permet de déplacer les objets dans la fenêtre graphique
  • La touche centrale de la souris active un menu des opérations spécifiques sur un objet

 

Les options disponibles permettent en particulier de :

 

Add Slot

ajouter un attribut à l'objet visé

Comment

ajouter des commentaires à l'objet visé

Annotation ...

éditer un objet porteur d'annotations sur l'objet visé

Find Slot ...

créer un objet pour trouver un attribut dans l'objet visé

Structure Editor

créer un éditeur pour l'objet visé

Evaluator

créer un (ou plusieurs) évaluateur(s) pour l'objet visé

 

  • Le touche droite de la souris active un menu des opérations globales sur les objets :

 

Les options disponibles permettent en particulier de :

 

Duplicate

créer un copie de l'objet visé

Resize

retailler les dimensions de l'objet

Move to Own Window

créer un monde particulier (une nouvelle fenêtre) avec cet objet

Dismiss

faire disparaître l'objet de la fenêtre

Object expander

étendre ou restreindre la présentation des attributs de l'objet

 

On donne ci-dessous une présentation d'un objet tel qu'il apparaît dans la fenêtre graphique. Cette présentation précise les rôles des différents éléments constitutifs de cet objet.

 

 

Figure 12. Objet Self expansé [DUV 95]

 

Pour expanser ou restreindre la présentation des attributs de l'objet, on agit sur les points d'entrée définis. Les évaluateurs constituent des zones d'édition qui permettent d'évaluer des expressions Self dans l'environnement particulier de l'objet. L'objet associé à un évaluateur est le récepteur direct des messages adressés dans cette zone.

 

Accept

La validation de la zone Accept via le bouton de gauche de la souris permet d'activer l'exécution des messages définis dans l'évaluateur

Cancel

La validation de la zone Cancel via le bouton de gauche de la souris permet de désactiver l'évaluateur

 

Il est donc possible de visualiser, manipuler ou modifier les attributs des objets de la fenêtre graphique. Pour cela, on peut tout d'abord activer les "slots expanders" pour avoir accès au contenu des attributs. On peut ensuite agir sur ces contenus.

 

Le travail sur les gros corpus et les limites des machines qui portent Self

 

Les résultats produits par le dispositif GASPAR sont en fait limités actuellement par les contraintes matérielles imposées par ce langage expérimental sur les machines que nous utilisons. Il faut en effet beaucoup de mémoire et d'espace disque sur les machines qui portent le système Self pour mettre en œuvre cette représentation de la mouvance. Cette incapacité actuelle du système Self à assimiler la génération d'un grand nombre d'objets met surtout en avant les problèmes complexes liés à la mise en oeuvre de ce type de modèle de représentations évolutives. Cette mise en oeuvre de la mouvance dans les outils de représentation coûte chère en ressources pour les systèmes sous-jacents. La mise en œuvre de ce dispositif GASPAR peut être considérée comme une expérience pilote qui offre une image partielle, pour le moment, des traitements réalisés et des résultats à venir.