Next: , Previous: , Up: Script Smalltalk   [Index]


6.3 Script avec un paramètre d’entrée

L’exemple

Prenons l’exemple d’un script qui étant donné un polygone va :

Objectif

Cet exemple montre comment faire des calculs à partir de l’état d’un objet – un polygone – et modifier un attribut visuel d’un objet – sa couleur. Étant donné que le langage informatique Smalltalk des scripts est le même que celui de Dr.Geo, nous montrons que l’étude du fonctionnement interne de Dr.Geo permet d’utiliser au mieux les scripts.

Enfin les trois constituants d’un objet mathématique sont exposés : hiérarchies des classes DrGMathItem pour le modèle mathématique, DrGMathItemCostume pour la représentation visuelle et DrGCostumeStyle pour gérer les attributs visuels (couleur, formes,...).

Créer le script

La procédure pour créer un script avec un paramètre d’entrée est sensiblement la même. Toutefois un argument de type polygone est nécessaire, en effet lors de son utilisation il faut choisir un polygone dans la figure. Les paramètres du constructeur de ce script – à invoquer par le menu ...Script → Créer un script... ressembleront à la figure ci-jointe – See scriptConstructorOneArg.

SmalltalkScript01

Figure 6.4: Le constructeur de script avec un argument demandé

Logique de fonctionnement

La logique de ce script est implémentée dans sa méthode compute. Elle est la suivante :

  1. colorier en rouge le polygone
  2. tester si le polygone est un quadrilatère, dans la négative retourner le message 'Je ne suis même pas un quadrilatère'.
  3. tester si ses diagonales sont isométriques et partagent le même milieu :
    1. si oui, colorier en bleu le polygone et retourner le message 'Je suis un rectangle.
    2. si non, retourner le message 'Je ne suis PAS un rectangle'.
  4. fin de la méthode compute

Le code source

La méthode principale compute du script :

compute
   | diag1 diag2 points mid1 mid2|
   self paintRed.
   self isQuad ifFalse:
      [ ^ 'Je ne suis même pas un quadrilatère !' ].
   points := self arg1 points.
   diag1 := points first - points third.
   mid1 := points first + points third / 2.
   diag2 := points second - points fourth.
   mid2 := points second + points fourth / 2.
   (diag1 r = diag2 r and: [mid1 = mid2])  
      ifTrue: [ 
         self paintBlue.
         ^ 'Je suis un rectangle :)' ]
      ifFalse: [ ^ 'Je ne suis PAS un rectangle :(' ].

Quelques explications :

 

Passons maintenant aux trois autres méthodes de ce script, à savoir paintRed, paintBlue et isQuad :

paintRed
   self costume1 style color: Color red
paintBlue
   self costume1 style color: Color blue

Le message #costume1 demande le costume du premier argument du script, à savoir le costume du polygone. Dans Dr.Geo, le costume d’un objet permet à la fois l’accès au modèle mathématique et à sa représentation graphique ainsi que ses attributs associés de style15. Ces deux méthodes demandent donc le style du costume (message #style) pour lui envoyer ensuite le message à mot clé #color: avec comme argument la couleur souhaitée.

Les messages à mot clé sont une spécificité de Smalltalk : les arguments sont intercalés dans le nom du message.

La dernière méthode annexe est triviale, elle demande au modèle (le polygone retourné par la méthode arg1) sa liste des sommets, puis la taille de cette liste. Le polygone est un quadrilatère si cette taille est de 4  :

isQuad
   ^ self arg1 points size = 4

Après la saisie de chacune de ces méthodes, le code source doit être sauvé et compilé par le raccourci clavier Ctrl-s.

Pour l’utilisation du script (...Script → Utiliser un script...) Dr.Geo attend que l’utilisateur clique sur un polygone, puis sur un emplacement de la figure.

Selon le type d’objet en référence, diverses méthodes sont disponibles ; qui pour obtenir sa valeur, qui pour obtenir ses coordonnées, etc. Le répertoire des méthodes est disponible depuis la section Méthodes de référence des scripts See api-dgs.


Footnotes

(14)

Pour découvrir le protocole de cette classe, écrire son nom dans un Workspace, le sélectionner à la souris puis presser les touches Ctrl-b, un navigateur de classes s’affiche alors sur cette classe, il permet de naviguer et d’étudier son code source.

(15)

Pour être précis, un script reçoit toujours par sa variable arguments les costumes des objets sur lesquels l’utilisateur a cliqué ; la méthode arg1 donne alors le modèle par un appel arguments first mathItem, tandis que la méthode costume1 se contente de faire arguments first.


Next: , Previous: , Up: Script Smalltalk   [Index]