Copyright © 2000 Jason Steffler
Copyright © 2000 Carine Bournez
Article paru dans le n°51 de la Gazette Linux de mars 2000.
Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Table des matières
Résumé
Depuis que VisualWorks Non Commercial (VWNC) a été distribué gratuitement pour Linux, l'intérêt de la communauté Linux pour Smalltalk va croissant. Le but de cet article est de fournir une introduction à Smalltalk aux fans de Linux qui n'y sont pas familiers, et de partager quelques connaissances sur les caractéristiques de ce langage qui charme tant de programmeurs. Il existe déjà nombre de tutoriels et de références. Cet article ne se veut pas un tutoriel ou une référence à la programmation OO ni à Smalltalk, mais seulement un petit aperçu pour aiguiser l'appétit. Cela ne suppose pas de connaissance préalable de l'OO, et l'article peut être lu indépendamment aussi bien qu'en codant simultanément.
Beaucoup d'exemples cités sont valables pour toutes les implémentations de Smalltalk. Bien que ces diverses implémentations partagent les mêmes caractéristiques de base, il existe des variations entre elles, particulièrement quand du code d'interface utilisateur entre en jeu. Il y a un bon nombre d'implémentations de Smalltalk pour Linux disponibles librement [1] : GNU Smalltalk, Smalltalk/X, Squeak, et VisualWorks Non Commercial [2]. En particulier, Squeak a fait de très jolies choses récemment, mais ici les exemples sont écrits avec VWNC, parce que j'y suis plus habitué. De plus, bien qu'il y ait une version plus récente disponible, je vais utiliser VWNC v3.0, ceci dans un but d'illustration : c'est en effet la version pour laquelle on trouve le plus d'outils/extensions disponibles librement.
Cet article couvre quelques informations de base sur Smalltalk, la récupération et l'installation de VWNC3, les caractéristiques de Smalltalk (avec des exemples), et des références. Pour résumer les caractéristiques en question, Smalltalk
est un environnement OO pur, encourageant la programmation OO
peut sauvegarder l'état exact de l'environnement de développement (IDE)
est un langage littéral
est compilé en pseudo-code incrémentalement
est un environnement portable, une fois écrit, ça tourne partout (machine virtuelle/IHM)
peut inspecter et manipuler des objets en temps réel
fournit un haut degré de réfléxivité (démarrage avec une application lancée, extensions)
possède un ramasse-miettes, pas de pointeurs explicites.
Petite anecdote Java/Smalltalk méconnue : l'équipe d'Oak du début voulait utiliser le Smalltalk VisualWorks dans son travail, mais a fini par inventer Java puisque la licence de VisualWorks à cette époque s'est révélée trop coûteuse pour eux [3]
Smalltalk existe depuis un petit moment. Il a été créé au centre de recherche de Xerox de Palo Alto (PARC) au début des années 70, dans le but de fournir un environnement pour les enfants qui commencent à apprendre à programmer. Donc, sa syntaxe est très simple et l'environnement très mature. La puissance de Smalltalk prend ses racines dans sa grande librairie de classes, qui peut être une arme à double tranchant. Il n'y a pas besoin de réinventer la roue pour faire le moindre travail, mais par contre, on peut passer beaucoup de temps au début de l'apprentissage à chercher la bonne roue à réutiliser[4].
Une autre épée à double tranchant : l'environnement purement OO, qui encourage donc les gens à passer au paradigme OO bien plus que tout autre langage basé sur des objets (OB)[5] (je reviendrai sur ce sujet). Les gens qui font le pas tendent à s'attacher énormément à Smalltalk et trouvent cet environnement de travail très amusant, productif[6], et d'une théorie pure. Les gens qui ne font pas le pas ont tendance à l'éviter, et restent vers des langages OB où il est plus facile de s'en sortir en faisant du code procédural déguisé en code OO . (Non, Dorothy, ce n'est pas parce que tu utilises un compilateur C++ que tu écris du code OO).
Bien que de nombreuses personnes décrivent Smalltalk comme utile seulement dans les grands marchés verticaux, il est extrêmement flexible puisqu'aussi utilisé dans de très petits marchés horizontaux. Il a été utilisé pour écrire des applications [7] pour les systèmes de gestion de grands réseaux, les systèmes cliniques d'hôpitaux, les palm pilots, les micro-contrôleurs, les systèmes embarqués.
Mais finissons-en avec les informations culturelles, passons aux exemples réels.
VWNC3 peut être obtenu sur un site de
téléchargement gratuit. Vous devez donner vos nom, adresse, ville, état, code
postal et e-mail pour continuer. Ensuite, lorsque vous cliquez le bouton
, le téléchargement de 20,954 koctets commence immédiatement,
vw.exe
. Pas le mécanisme de téléchargement le plus sympathique au monde,
particulièrement les versions Windoze et Linux toutes deux dans une archive
auto-extractible sous Windoze, mais ça marche. Téléchargez cela là où vous
voulez que le répertoire parent se trouve, puis dézippez en tapant unzip
vw.exe. Le fichier zip se décompressera dans Vwnc3
. Pour ma part, j'ai un
double boot, donc j'ai téléchargé dans mon répertoire /dos
et l'ai dézippé là,
pour pouvoir l'utiliser aussi depuis Windoze, ce qui me donne un répertoire de
base /dos/vwnc3
. (Sinon, vous pouvez spécifiez une variable
d'environnement VISUALWORKS avec le chemin d'accès).
Pour le démarrer, je peux copier la machine virtuelle dans le répertoire
image
, ou faire un lien symbolique. Comme je l'ai mis dans ma partition
dos, je vais faire une copie :
cp /dos/vwnc3/bin/linux86/visualnc /dos/vwnc3/image/visualnc
J'ai remarqué que la machine virtuelle n'était pas exécutable par défaut, donc corrigeons cela comme ça :
chmod 555 visualnc
Ensuite pour démarrer l'image, il faut indiquer à la machine virtuelle l'image à lancer :
cd /dos/vwnc3/image visualnc visualnc.im
Un écran de rappel de licence apparaît à chaque fois qu'on lance VWNC, cliquez
Transcript (Transcription), et la fenêtre d'en bas est
le Workspace (Espace de Travail) . Ensuite, il faut indiquer à l'image où se trouvent
les fichiers systèmes dont elle a besoin. Pour cela, cliquez sur → dans la fenêtre Transcript. Dans le dialogue qui s'affiche,
saisissez le répertoire parent : /dos/vwnc3/
.
les fenêtres Transcript et Workspace ressemblent à :
L'espace de travail au lancement contient quelques informations qui valent une lecture, mais ce n'est pas nécessaire de les lire pour continuer à suivre cet article.
Note à propos des souris : Smalltalk suppose que vous ayiez une souris à 3 boutons. Si ce n'est pas le cas, vous pouvez simuler un troisième bouton sur une souris à deux boutons en cliquant les deux boutons en même temps.
Là encore se trouve une épée à double tranchant : ce qui est fantastique, c'est de pouvoir sauvegarder votre IDE, tout est sauvegardé exactement dans l'état où vous l'avez laissé. Les fenêtres ouvertes, à l'endroit où elles se trouvaient, ce qui était en surbrillance, les objets qui existaient, tout. Une photo de l'instant est prise et sauvée sous la forme d'une image. Il n'est pas nécessaire de recharger tel fichier texte dans un éditeur de texte et retrouver là où vous aviez arrêté. L'autre côté est que si vous avez une liaison de base de données corrompue ou que vous avez écrasé des objets qu'il ne fallait pas, c'est sauvegardé dans l'image. Donc, il n'y a pas à connaître l'état de votre environnement au moment de la sauvegarde. Ceci étant dit, vous pouvez sauver votre code séparément de l'image, et le recharger dans une image propre si vous rencontrez des problèmes (une bonne idée, en fait). Une manière simple de sauvegarder le code est d'utiliser un fichier de sortie.
Essayons une sauvegarde (qui par la même occasion sauvera la localisation du
fichier système que vous venez de spécifier). Déplacez les fenêtres comme vous
le voulez, puis sauvez votre image, sélectionnez TestImage
. Après la sauvegarde, essayez de
fermer l'image → → . Ensuite, pour redémarrer,
prenez garde à donner la nouvelle image à la machine virtuelle. Notez que,
lorsque vous sauvez votre image, la date et l'heure sont affichées sur la
fenêtre Transcript, comme ci-dessous :
Je pourrais encore dire des tas d'autres choses sur la sauvegarde (Perm Save As, Filing out, Change log, Envy), mais pour ne pas trop rallonger, je vais couper court et changer de sujet.
C'était mon mantra pendant les 6 premiers mois où j'ai appris Smalltalk. Comme la plupart des programmeurs à ce moment-là, j'avais une culture de programmation procédurale et il était très difficile de chambouler cet esprit. C'est là qu'entre en jeu l'infâme paradigme. La fenêtre Transcript est un objet, les menus de cette fenêtre sont des objets, les boutons sont des objets, la fenêtre Workspace est un objet, etc. Mais avant d'entrer dans le détail, commençons par le vénérable exemple « Hello World » :
Exemple 1. Hello World
Ouvrez un nouvel espace de travail (en cliquant
→ )Dans la fenêtre Workspace, tapez : Transcript cr. Transcript show: 'Hello World.'
Bravo, vous venez d'écrire votre premier code Smalltalk. Voyons maintenant comme il marche bien :
Mettez cette ligne de code en surbrillance, cliquez avec le bouton du milieu et sélectionnez
(ceci évalue le code Smalltalk que vous venez d'écrire)Vous devriez voir le texte « Hello World » dans la fenêtre Transcript :
Analysons le code Smalltalk :
Transcript cr. | Ce code permet de manipuler l'objet Transcript et lui demande d'afficher un retour chariot sur lui-même. |
Transcript show: 'Hello World' | Manipule l'objet Transcript et lui demande d'écrire « Hello World » sur lui-même. |
Vous pouvez aussi afficher « Hello World » sur la ligne de commande, ouvrir une fenêtre et écrire « Hello World » dedans, ou encore concevoir une interface utilisateur et placer « Hello World » dessus. Mais là encore, nous n'allons pas nous attarder.
cr
est un message envoyé à l'objet Transcript, tout comme show:
.
Ce sont seulement des messages auxquels Transcript sait comment répondre. Ils ne font pas partie de la syntaxe de Smalltalk.
Ce dernier point est important à retenir pour les programmeurs en non-OO, on envoie des messages aux objets pour leur demander de faire quelquechose.
Notez que vous venez d'exécutez votre premier code Smalltalk sans le compiler. Vous n'avez pas sauvegardé votre code, ni compilé, ni édité les liens avant de le lancer. « Bon alors, c'est un langage interprété », dites-vous. Eh bien non, pas vraiment. Pour être précis, c'est un langage compilé incrémentalement en pseudo-code. Je vais y revenir dans un moment. Pour l'instant, retenez juste que vous codez et exécutez du Smalltalk sans peine. Maintenant, passons à l'exemple suivant :
Exemple 2. Affichage de la date
Dans votre espace de travail, tapez : Date today
Mettez cette ligne de code en surbrillance, cliquez avec le bouton du milieu et sélectionnez
(ceci évalue le code Smalltalk que vous venez d'écrire)Vous devriez voir affichée la date courante, comme :
Date today | Demande à la classe Date quel jour on est |
Ok, voyons un peu plus en détails ce que Date today
évalue. Mettez en surbrillance cette ligne de code (sans la date qui a été
affichée), cliquez avec le bouton du milieu et sélectionnez .
Vous devriez voir :
C'est ce qu'on appelle un inspecteur (Inspector), qui est d'ailleurs un objet Inspector. Les objets Inspector permettent de jeter un œil dans les objets. Si vous cliquez sur dans l'Inspector, vous aurez une représentation textuelle de la date :
Ça vous dit quelquei chose ? C'est parce que dans la Fig. 5,
lorsque vous avez affiché la Date today
, vous avez réellement affiché une
représentation textuelle de l'objet Date. Si vous cliquez sur l'un des deux
autres attributs de cette date, vous verrez que day
stocke le numéro du
jour dans l'année (1→365, normalement), et year
stocke l'année concernée.
Tous les objets ont une représentation en texte, même si ce n'est que le type de l'objet (bien que cela ne soit pas très utile).
L'inspecteur est un concept très puissant. Vous avez juste demandé à
Date la date courante, et vous avez manipulé un objet date. Non seulement vous
pouvezregarder cet objet, mais vous pouvez aussi travailler avec et le
modifier. Par exemple, cliquez sur day
, et saisissez n+1
à la place de la
valeur. Dans la Fig. 7, le 6 février est le 37ème jour de l'année, donc je
saisis 38. Puis cliquez avec le bouton du milieu et choisissez .
Vous remarquerez qu'aucun changement ne semble avoir eu lieu, mais vous avez
fait que l'objet représente maintenant la date du n+1
ème jour de l'année.
Maintenant, si vous cliquez sur de la date, vous verrez que la date
affichée est celle du lendemain :
Finalement, non seulement on peut coder et exécuter immédiatement, mais en plus on peut attraper des objets et les manipuler directement avec effet instantané. Ces deux possibilités sont une partie de ce qui fait de Smalltalk un environnement productif. On peut coder&tester en temps réel. Si on ne comprend pas ce qui se passe, on peut attraper l'objet pour regarder son état et le manipuler vous voir comme il se comporte. Après une réalisation, s'il y a un bug lors des tests, on peut coder rapidement un correctif et le charger dans l'environnement de test — pas besoin de recompiler.
Autre chose à noter : la littéralité de
Smalltalk. Pour avoir la date du jour, nous avons juste demandé à
Date
de donner today
. Bien que Smalltalk soit un
langage très littéral, il y a évidemment des limites quelquepart, par exemple
on ne peut pas demander à Date
pour avoir tomorrow
. Ceci étant dit,
la syntaxe générale de Smalltalk est très simple et facile à lire. Gardez ceci
à l'esprit pendant la lecture des prochains exemples de code.
Continuons donc avec le 3ème exemple de cette section, qui évoque le changement d'état d'esprit nécessaire pour aborder l'OO :
Exemple 3. Illustration du changement de paradigme
Dans votre espace de travail, tapez : 1 + 2 * 3
Maintenant, avant d'évaluer ce code, pensez à ce que sera la réponse. Vous pensez probablement à 7. Bien, mettez le code en surbrillance et faites
.Vous remarquerez que la réponse est 9 :
C'est amusant, combien de programmeurs non-OO partent en courant en sanglotant quand je leur montre cela. « Quoi ! pas de priorité d'opérateurs, quel langage débile ! Je vais adhérer au C++, parce que je peux le comprendre ! » Sérieux, c'est arrivé plein de fois.
Cependant, la réalité dépend de vos oeillères ; quand j'ai écrit la réponse 7 tout à l'heure, j'avais le 9 en tête parce que je pensais en 00 et pas d'une manière procédurale.
La raison est (répétez après moi) : tout est objet. Dans cet exemple, les chiffres 1, 2 et 3 sont tous des objets. Les opérateurs : + et * sont justes des messages qui sont envoyés aux objets. Le raisonnement est donc que si + et * sont des messages, pourquoi auraient-ils une priorité par rapport aux autres messages ? Tous les messages du même type sont traités avec égalité par Smalltalk.
Pour le voir par vous-même, mettez 1
en surbrillance, cliquez le
bouton du milieu et choisissez . Vous obtiendrez un inspecteur sur
SmallInteger, qui est le type d'objet qu'est 1.
Donc, le code est évalué de cette manière :
(le nombre 1) reçoit la demande de (+) avec (le nombre 2)
(le nombre 1) l'exécute, renvoie l'objet : (le nombre 3)
(le nombre 3) reçoit la demande de (*) avec (le nombre 3)
(le nombre 3) l'exécute et renvoie l'objet : (le nombre 9)
Pour évaluer le code comme on l'entendrait dans l'esprit procédural, on peut utiliser des parenthèses : 1+(2*3)
« OK, pourquoi ne peut-on pas mettre la date affichée,
February 6, 2000
, en surbrillance et l'inspecter pour voir l'objet
date ? » Bonne question. La réponse est simple :
certains types d'objets peuvent être créés (instanciés) juste en inspectant une
répresentation textuelle de ces objets, d'autres types d'objets ne le peuvent
pas. Les entiers (Integers) font partie de ceux que l'on peut instancier en
inspectant une représentation textuelle.
Comme je l'ai déjà mentionné, Smalltalk est compilé en pseudo-code, de manière incrémentale. Certaines personnes le décrivent comme un croisement entre langages compilés et langages interprétés. Voici ce qui se passe quand on fait ou affiche quelquechose :
le compilateur Smalltalk traduit le code Smalltalk en pseudo-code
le pseudo-code est passé à la machine virtuelle pour l'exécution
le pseudo-code ext exécuté et le résultat est renvoyé.
Bon, ça semble plutôt interprêté, non ? Mais ce que nous avons fait jusqu'ici n'est pas de la programmation normale en Smalltalk. Rappelez-vous que les espaces de travail ne sont que des bacs à sable temporaires. Normalement, lorsque vous programmez, vous validez du code Smalltalk (sauvegarde dans l'image), et le code reste compilé en pseudo-code. Normalement, lorsque vous programmez, vous validez le code en méthodes pour une classe, et :
le compilateur Smalltalk traduit le code Smalltalk en pseudo-code
le pseudo-code est sauvé avec cette classe
quand un message est envoyé à une classe, le pseudo-code approprié pour la méthode est envoyé à, la machine virtuelle pour exécution
le pseudo-code est exécuté et le résultat est renvoyé.
Le résultat net est qu'à chaque fois que vous faites un changement dans vos classes, ce petit changement est sémantiquement vérifié, compilé, et prend effet immédiatement. C'est assez sympathique de faire un petit changement et de le voir immédiatement répercuté sur le comportement du programme.
Java est similaire, en ce qu'il est compilé en pseudo-code, mais différent en ce qu'il n'est pas incrémentalement compilé. Donc en programmation Java, il faut tout recompiler (ou en partie si on utilise make) et refaire les liens à chaque fois qu'on veut prendre en compte une modification.
La machine virtuelle est bien ce que cela veut dire — un ordinateur virtuel qui sait comment exécuter du pseudo-code Smalltalk. Elle est généralement implémentée en C (Squeak est une exception notable à cela, la machine virtuelle est elle-même implémentée en Smalltalk puis exportée en C par programmation). C'est la machine virtuelle qui permet une telle portabilité entre les différents types de machines. Smalltalk a suivi le paradigme « une fois écrit, ça marche partout » depuis des décennies ! Pour vous donner un aperçu de ceci, sélectionnez → . Dans le dialogue qui apparaît, choisissez le de , puis validez.
Maintenant vous remarquerez que votre système en entier fonctionne avec l'allure du Mac. La première fois que j'ai vu cela en 95, j'en ai été soufflé. Je venais de passer un an sur un pénible portage de OpenWindows à Motif sur des parties d'applications en C. Puis quelqu'un me montre comment porter son application du SunOS à Solaris à MacOS en un clic !
Rendez-vous compte que la fenêtre ci-dessus tourne sur une machine Linux ! J'utilise fréquemment cette fonctionnalité au bureau lorsqu'on développe pour WIndoze, parce que je préfère l'apparence de Motif.
C'est en cela que je considère Smalltalk réellement puissant : sa réflexivité. 98% de Smalltalk est écrit en Smalltalk, ce qui l'environnement rend facile à personnaliser, étendre, ou perfectionner (Squeak est l'exception, puisqu'écrit en Smalltalk à 100%). Alors il est facile de voir comment Smalltalk est écrit et de l'adapter à vos besoins. En fait, c'est la base du développement en Smalltalk. Vous commencez avec une application qui tourne, vous ajoutez des extensions spécifiques à votre affaire, ôtez les parties qui ne vous servent pas, et livrez l'application. Voici un exemple simple montrant comment étendre Smalltalk :
Exemple 4. Ajout de menus inspecter à toutes les fenêtres
Vous vous rappelez quand j'ai dit que Transcript et Workspace sont des objets ? Vous devriez donc pouvoir les inspecter, ok ? Ok. Cependant, ce n'est pas si simple, dans l'environnement tel qu'il est par défaut, de prendre n'importe quelle fenêtre pour l'inspecter. Nous allons ajouter une extension simple pour permettre ceci.
Ouvrez un navigateur de classe
→Vous avez maintenant sous les yeux un navigateur de classes, ou navigateur système.
En observant les colonnes de gauche à droite, vous voyez : les catégories, les classes, les protocoles, les méthodes, et le code de méthodes. De plus, vous verrez deux radio-boutons : le premier fait naviguer du côté instance, l'autre du côté classe. (Nous allons faire une méthode d'instance et une méthode de classe).
Cliquez avec le bouton du milieu sur la colonne catégorie et
sélectionnez StandardSystemController
dans
le dialogue qui s'affiche
Après que le navigateur a mis la classe
StandardSystemController
en surbrillance, cliquez sur le protocole
dans la colonne protocole, et sur la méthode back
dans
la colonne méthode. Vous devriez voir :
Résumons :
Les catégories sont des groupes de classes. La catégorie
Interface-Framework
est sélectionnée. La classe
StandardSystemController
est aussi sélectionnée. Les protocoles sont des
groupes de méthodes. Nous sommes donc actuellement dans le groupe menu
messages
. Les méthodes contiennent le code implémenté. Nous avons sélectionné
la méthode back
.
Nous allons ajouter une méthode dans le protocole menu
messages
. Pour ceci, mettez en surbrillance tout le contenu de la méthode
courante et effacez-le. Ne vous inquiétez pas, la méthode n'a pas disparu et ne
sera pas effacée pour autant. C'est juste une façon simple de créer une
nouvelle méthode dans le protocole actuellement sélectionné.
Puis tapez le code :
inspectView
self view model inspect.
Puis, pour sauver la méthode, cliquez avec le bouton du milieu et choisissez
Vous verrez que la méthode que vous venez de créer apparaît maintenant dans le navigateur. Elle a déjà été compilée et est prête à être exécutée. Vous devriez voir :
Ensuite, nous devons ajouter une méthode du côté classe. Cliquez sur le radio-bouton
dans le navigateur de classepuis cliquez sur le protocole flushMenus
comme précédemment, effacez le texte pour la méthode (la méthode flushMenus
ne sera pas détruite) et tapez :
initializeForAdditions
"initialize the menu."
"self initializeForAdditions"
ScheduledBlueButtonMenu :=
Menu
labels: relabel as...\refresh\move\resize\front\back\collapse\close\inspect'with CRs
lines: #(1 7 8)
values: #( #newLabel #display #move #resize #front #collapse #close #inspectView).
Après avoir saisi ceci, cliquez avec le bouton du milieu et choisissez
pour la méthode. Vous devriez voir maintenant :OK, maintenant ça devient joli. Cliquez du bouton droit sur la colonne méthode, vous devriez voir le menu de la fenêtre :
À ce moment-là, le code a été compilé en pseudo-code. Mais
comme c'est du code d'initialisation, il n'a pas encore été exécuté. On peut
l'exécuter directement depuis le navigateur ; placez le texte self
initializeForAdditions
en surbrillance, cliquez avec le bouton du milieu et
Puisque le code a été exécuté, vous devriez voir
ajouté en bas du menu de fenêtre :Maintenant on peut inspecter n'importe quelle fenêtre pour laquelle ce menu est défini. Essayez d'inspecter ce navigateur de classe que nous étions en train d'utiliser. Cliquez avec le bouton droit et choisissez
. Vous verrez un inspecteur sur le navigateur de classe. Si vous sélectionnez l'attribut , vous verrez que le nom de classe correspond à la classe sélectionnée à cet instant :Note : nous avons juste fait une extension de l'image de base. C'est un changement de manière de coder qui devrait être suivi avec précautions.
Quand je marche dans la vallée des délais désespérés, je ne crains aucune libération car Smalltalk est avec moi.
Ramasse-Miettes : alias Victor, Nettoyeur. Smalltalk possède un ramasse-miettes, ce qui veut dire que les objets qui ne sont plus référencés sont nettoyés pour libérer la mémoire. Je me souviens de m'être arraché les cheveux plus d'une fois en programmant en C++, à chercher des fuites de mémoire. Ceci parce qu'en C++ c'est au développeur de s'occuper de la mémoire. Si vous ne libérez pas la mémoire utilisée, votre application continuera sans fin à prendre de plus en plus de mémoire jusqu'à ce la machine n'en ait plus et plante.
En parlant de plantages de machine, vous remarquerez que nous n'avons jamais manipulé de pointeurs. C'est parce que Smalltalk n'a pas de pointeurs. (Bon, techniquement ce n'est pas correct. Chaque référence de variable est en fait un pointeur sur un objet, mais en Smalltalk le développeur est libéré du poids de la maintenance des pointeurs).
J'espère avoir été capable de faire un tour concis et informatif de Smalltalk, abordable pour des programmeurs non OO. J'ai montré que Smalltalk :
est un environnement OO pur, encourageant la programmation OO
peut sauvegarder l'état exact de l'environnement de développement (IDE)
est un langage littéral
est compilé en pseudo-code incrémentalement
est un environnement portable, une fois écrit, ça tourne partout (machine virtuelle/IHM)
peut inspecter et manipuler des objets en temps réel
fournit un haut degré de réfléxivité (démarrage avec une application lancée, extensions)
possède un ramasse-miettes, pas de pointeurs explicites.
Il y a bien d'autres choses que j'aurais voulu aborder dans cet article, mais les contraintes de longueur ne me le permettent pas :
l'aide en ligne
le débogueur
les nombres (essayez d'imprimer factorielle
1000000
dans un espace de travail (si vous avez le temps de creuser
— la taille de nombres est limitée uniquement par la quantité de
mémoire), ou essayez d'inspecter 12/7
)
les paquets — un mécanisme de partage de code
le navigateur de réimplémentations (Refactoring Browser) — Mon outil de programmation préféré
HotDraw — une structure de travail réutilisable pour le dessin
le test de structures — automatiser le test
le changement dynamique d'éléments de fenêtres pendant le fonctionnement
Un groupe de classes
Un type d'objet
Un marché qui a tendance à avoir un public large avec un faible impact dessus. Un logiciel prêt-à-cuire s'adresse à un marché horizontal. Par exemple, une suite bureautique — si ça plante, repartez sur votre dernière sauvegarde.
Un type d'interface graphique pour un objet, permettant d'observer et manipuler les objets
Une définition simple de la littéralité est le degré de lisibilité/simplicité du langage. La programmation littérale est une programmation « pour-le-développeur-qui-passe-après-vous ».
Un morceau de code Smalltalk pour un objet
Un groupe de données et d'opérations en relation. Son comportement est représenté par ses opérations sur ses données
Un groupe de méthodes
Manipulation d'un environnement dans lui-même. Dans Smalltalk, 98% étant écrit en Smalltalk, il est facile de personnaliser, étendre et adapter l'environnement. (Squeak est une exception, car écrit à 100% en Smalltalk)
La fenêtre principale de l'IDE, d'où les autres fenêtres (navigateurs, workspaces, etc) sont lancées. Conserve aussi une liste active des messages systèmes
Un bloc-notes où les développeurs peuvent faire des essais avec du code
Un marché qui a tendance à avoir un public restreint avec un très fort impact dessus. Par exemple, un système de gestion de réseau pour une société de télécommunications — si ça plante, la société perd un million de dollars chaque minute
WikiWikis :
Groupe de discussion : comp.lang.smalltalk
Archives Smalltalk libres :
Tutoriels :
La Smalltalk FAQ de Dave(il y a beaucoup de trucs ici et même si c'est un peu dépassé, c'est AMHA la meilleure. Dave, ce serait génial si jamais tu trouvais le temps de finir ça).
eXtreme Programming (qui est à l'origine d'un projet Smalltalk)
[1] Chaque implémentation a ses propres restrictions de licence. À ma connaissance, seul GNU Smalltalk et Squeak ont une licence de type GNU copyleft.
[2] Ces deux dernières implémentations sont les plus récentes.
[3] Dans l'article : http://x37.deja.com/getdoc.xp?AN=564595555&CONTEXT=949863157.89849870&hitnum=0
Author:
Eric Clayberg
<clayberg@instantiations.com>
Patrick Logan <patrick@c837917-a.potlnd1.or.home.com>
wrote in message
news:hTN84.453$HT1.6388@news.rdc1.wa.home.com...
>
> I wish the original Oak team had chosen to adopt Smalltalk
> rather than invent Java
They tried to, but ParcPlace wanted too much on a per-copy royalty basis...sigh/
[4] Bah ! Les vrais programmeurs réinventent toujours la roue, ça fait pousser le poil aux pattes !... héhé, je suis tombé dans le panneau trop souvent toutes ces années. Le plus souvent, les roues réinventées ont tendance à être carrées. C'est trop moche que les écoles encouragent cette mentalité pendant l'apprentissage théorique. (fin de digression)
[5] C'est une terminologie vague qui diffère selon les gens avec qui on parle. Dans mon idée, un langage basé sur de sobjets (OB) est un langage non-OO qui a évolué vers l'orienté-objets (C++, OO-COBOL, etc). Certaines personnes les appellent langages OO bâtards.
[6] Quelques numéros sur la productivité de Software Productivity Research (Un échantillon du rapport moyen instructions/fonctions du source : Smalltalk : 21, C : 128, C++ : 53, Visual Basic 5 : 29)
[7] GoodStart — who's using Smalltalk — http://www.goodstart.com/whoswho.html
L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.
Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.
Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.