Aller au contenu

Programmation objet et géométrie/Création d'une méthode en Smalltalk

Un livre de Wikilivres.

Création d'une méthode pour un objet existant

[modifier | modifier le wikicode]

D'après le livre "Pharo par l'exemple", créer une méthode est aussi aisé (et dangereux) qu'en modifier une. En fait, il suffit de modifier également le nom de la méthode pour éviter de l'écraser. Dans ce qui suit, on va par exemple créer une nouvelle méthode pour l'objet Point, qui va réaliser la transformation conforme dans .

Où placer la méthode?

[modifier | modifier le wikicode]

Pour bénéficier tout de suite d'un héritage intéressant, on utilise le browser de DrGeoII (en réalité, de Pharo) pour chercher, dans la catégorie de classes Graphics-Primitives, la classe Point, qui possède déjà des point functions, il suffit d'en choisir une (par exemple sign) et d'écraser son texte par

squared
    "répond le point dont l'affixe est le carré complexe du point de départ"
    "ou éleve le point au carré, d'où le nom de la méthode..."

    ^ (x*x - (y*y) @ (2*x*y)).

À ce stade on voit que le signe d'un point s'appelle maintenant squared ce qui fait tout de même un peu apprenti sorcier!

Mais en sauvegardant le résultat, moyennant l'entrée du nom du programmeur et un éventuel débogage, on constate qu'une nouvelle méthode a effectivement été créée:

Test de la méthode

[modifier | modifier le wikicode]

Pour tester la nouvelle méthode, on peut ouvrir un "workspace" et y écrire

(3@2) squared.

Ensuite, il suffit par exemple de sélectionner le tout et de l'"inspecter" (ou écrire (3@2) squared inspect. et le "DoIt"er...):

On voit que .

Utilisation dans DrGeoII

[modifier | modifier le wikicode]

Puisque dorénavant cette méthode fait partie de Smalltalk, elle est accessible à DrGeoII aussi, par exemple sous la forme d'un script DrGeo, qu'on peut appeler "carre" et dont le script appelle la méthode squared précédemment créée:

carre: UnPoint
    "élève un point (ou plutôt son affixe) au carré"
    ^UnPoint point squared.

Le script apparaît sans la fenêtre de scripts de DrGeoII:

Il suffit de l'enregistrer pour pouvoir l'utiliser. Ce qui se fait en cliquant sur l'icône de scripts de DrGeoII, en le choisissant:

Après ça, en cliquant sur un point pour le sélectionner, DrGeoII n'attend plus qu'un clic pour afficher les coordonnées de son transformé:

Ci-dessus, le point P a été placé sur i, ce qui illustre que le carré de celui-ci est -1.

À partir des coordonnées créées par le script, on peut créer un point (avec l'outil point par coordonnées de DrGeoII) et voir comment fonctionne la transformation.

En répétant les dernières étapes ci-dessus avec un point P lié à une droite, l'outil "lieu" permet de vérifier que l'image de celle-ci est une parabole. Avec un cercle (en vert), l'image (en rouge) peut prendre des allures très différentes, dont voici un exemple:


Exercice: Ajouter au même objet Point une méthode joukovski qui réalise la transformation de Joukovski.

Version Scratch

[modifier | modifier le wikicode]

Comme Scratch est aussi écrit en Smalltalk, et dispose aussi d'un browser et de workspaces, on peut y refaire la manip (sauf la partie géométrie dynamique).

Accès à Squeak depuis Scratch

[modifier | modifier le wikicode]

Comment relever la jupe de Scratch

[modifier | modifier le wikicode]

Un Shift+clic sur la boucle du R de ScRatch permet d'abandonner le mode plein écran et d'accéder à la machine virtuelle Squeak, en relevant légèrement sa jupe, ce qui révèle une bande de peau blanche (normal, elle est toujours cachée par la jupe d'habitude):

Les secrets de la peau dénudée

[modifier | modifier le wikicode]

Entre beaucoup d'autres choses, il y a un browser, que l'on peut ouvrir en sélectionnant successivement ouvrir:

puis browser:


Écriture de la méthode

[modifier | modifier le wikicode]

En explorant le browser, on retrouve l'objet Point (c'est un objet de smalltalk, pas de DrGeoII, il est donc aussi présent, tant avec Pharo qu'avec avec Scratch). On peut alors y créer la méthode squared:

Un nouveau clic dans la zone vide permet d'ouvrir un workspace (open puis workspace), accessible à l'inspecteur, et y refaire la manipulation décrite ci-dessus: