6.1 Exemples de figure Smalltalk

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é.

editeurFigureSmalltalk

Figure 6.1: Editeur de figure Smalltalk

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 :

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 :

  1. L’introduction d’une construction de plus haut niveau, non prévue au départ par Dr.Geo. Ici nous avons défini le bloc de code triangle qui, à partir de trois points, construit le triangle passant par ces trois points. Nous pouvons comparer ceci avec les macro-constructions mais avec une approche différente, orientée programmation.
  2. La définition d’un bloc de code associé, ici nous avons défini hasard qui retourne un nombre entier compris entre -5 et 5. Nous utilisons ce bloc pour placer au hasard certains points de notre figure, ainsi à chaque exécution la figure est légèrement différente.
  3. L’affectation du résultat d’une construction à une variable n’est pas obligatoire, nous l’utilisons lorsque nous souhaitons garder une référence de l’objet créé. Par exemple dans le bloc de code triangle, nous ne gardons pas de référence des segments créés, en revanche lorsque nous définissons nos trois points nous avons besoin de garder une référence dans des variables temporaires. Ainsi, lors de l’utilisation du bloc de code triangle, nous passons en paramètre les variables m, n et p.

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.


Footnotes

(10)

Alternativement, c’est l’entrée à choisir dans le menu contextuel de l’éditeur.

(11)

Des instances de classes qui représentent des objets géométriques.

(12)

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.