En lui-même, Smalltalk est un langage de très haut niveau. Lorsqu’une figure est définie dans ce langage, nous disposons également de toute sa puissance pour, par exemple, définir récursivement telle partie de la figure, ou bien pour placer aléatoirement certains objets de telle sorte qu’à chaque ouverture de la figure, celle-ci soit légèrement différente. Bref, les figures sont libérées du carcan de l’interface graphique tout en étant renforcées par le langage Smalltalk.
Une figure Smalltalk est un code source Smalltalk à exécuter dans un outil dédié, l’éditeur de figure Smalltalk : ...Clic arrière-plan → Outils → Editeur de figure Smalltalk... Dans cet outil, à gauche l’éditeur de code source et à droite une vue sur la figure géométrique résultante une fois le code source compilé.
Nous allons étudier plusieurs exemples, chacun d’eux sera écrit dans l’éditeur et exécuté en pressant le bouton vert Jouer. Le même effet est obtenu avec la séquence de touches Ctrl-a et Ctrl-d pour Do-it!10. Il est également possible d’y coller un code source par Ctrl-v.
Commençons par étudier un exemple simple :
DrGeoFigure nouveau
C’est la plus petite description produisant une figure. Lors de son exécution, celle-ci va simplement créer une nouvelle figure vide. La figure Dr.Geo est affichée dans une fenêtre simplifiée puisqu’elle ne comporte pas la barre d’outils, seulement la barre des menus et les molettes.
Abordons un deuxième exemple :
| c item | c := DrGeoFigure nouveau. item := c point: 1.2 @ -2. item nommer: 'A'.
Cette description définit une figure avec un point libre A de coordonnées initiales (1,2 ; -2). Quelques explications sur ce code :
| |
. Il n’y pas de type, les variables
sont toujours des références vers des objets.11
#point:
, avec
comme argument deux coordonnées, crée un point libre.
Le résultat est une capsule12 sur un objet
géométrique “point” de Dr.Geo qu’il est possible de modifier par
l’envoi de messages, ici #nommer:
pour le renommer ’A’.
Poursuivons avec un troisième exemple :
| c triangle hasard m n p | triangle := [:p1 :p2 :p3 | c segmentDe: p1 à: p2. c segmentDe: p2 à: p3. c segmentDe: p3 à: p1]. hasard := [5 - 10 auHasard]. c := DrGeoFigure nouveau. m := c point: hasard valeur @ 0. n := c point: 5 @ 0. p := c point: hasard valeur @ 3. triangle valeur: m valeur: n valeur: p.
Cet exemple est particulièrement intéressant, il nous montre trois choses importantes :
Pour clore cette section, voici un dernier exemple :
| c a b d | c := DrGeoFigure nouveau. a := c point: 1@0. b := c point: 5@0. d := c line: a to: b. a couleur: Color yellow; rond; large. b cacher. d tiret.
Deux points et une droite sont créés. Ensuite des commandes sont utilisées pour modifier l’aspect des objets, voire pour en cacher.
Nous avons terminé notre petite visite guidée des Figures Smalltalk. Dans les sections suivantes nous exposons l’ensemble des commandes disponibles.
Alternativement, c’est l’entrée à choisir dans le menu contextuel de l’éditeur.
Des instances de classes qui représentent des objets géométriques.
Pour être précis, la capsule est
un objet DrGWrappedPoint
dont l’objectif est de simplifier la
manipulation des objets géométriques de type point, pour aussi bien
obtenir ses attributs ou modifier son style. Il est toujours possible
d’accéder à l’objet point sous-jacent en envoyant le message
#mathItem
à la capsule. Il est alors possible d’utiliser les
méthodes décrites dans le chapitre sur les scripts.