Introduction à SmalltalkDate de publication : 14/06/2006 , Date de mise à jour : 15/06/2006
Par
hiko-seijuro (hiko-seijuro.developpez.com)
Cette introduction a pour objectif de vous présenter les bases du Smalltalk.
I. Pre-requis
Pour appréhender ce tutorial, il est préférable de connaitre les bases de la programmation
orientée objets. L'environnement utilisé sera Squeak qui est téléchargeable à l'adresse suivante
pour Windows et Linux : http://ftp.squeak.org/current_stable/.
Il existe d'autres environnements, comme visualworks, mais Squeak est libre. Pour appréhender ce tutorial, il est préférable de connaître les bases de la programmation orientée objets: l'héritage et le polymorphisme Le Smalltalk est un langage faiblement typé et repose sur la notion de typage dynamique. Cela signifie que la classe de l'objet est connue uniquement à l'exécution. Ainsi, lors de l'exécution d'un message, la machine virtuelle va remonter l'arbre d'héritage pour retrouver la méthode associée et donc l'exécuter. La machine virtuelle repose donc sur ces deux notions. Il faut le garder à l'esprit !!! II. IntroductionII-A. Smalltalk
Le Smalltalk est langage datant de 1972 pour sa première version. La version actuelle est le Smalltalk-80
(des années 80 :D). Contrairement à différents langages, il ne possède pas de point d'entrée spécifique. En effet,
l'environnement correspond au point d'entrée directement. L'avantage d'une telle structure est que l'on peut
exécuter une portion de code rapidement sans avoir à se soucier de la déclaration d'une fonction main, winmain, ...
Il faut préciser que le Smalltalk est un langage interprété, l'environnement de développement (sueak) dispose donc d'une machine virtuelle. Cela permet de "décompiler" le code rapidement et d’y naviguer plus facilement pour atteindre l'endroit qui a généré une exception. Ce qui s’avère très utile pour le « déboggage ». Bien que le Smalltalk soit surtout utilisé pour effectuer de la recherche , son objectif principal est d’écrire rapidement et clairement un algorithme. Il est utilisé dans de grands projets par des entreprises de renoms tels que Thales, AMD, ... Le Smalltalk est un langage généraliste bien que Squeak soit très orienté multimédia. On peut évidemment faire des interfaces graphiques et des objets graphiques (comme par exemple les E-Toys) mais aussi de la synthèse vocale, du graphisme en 2D et 3D, ... II-B. Avantages et inconvénients du Smalltalk
Le Smalltalk est langage simple à apprendre de part le peu d'éléments servant de syntaxe. De plus, peu de concepts
sont nécessaires pour le maîtriser. Les règles fixes, de visibilité et de priorités, ainsi que uniformité des entités (tout est objet)
ajoutent en simplicité au langage. Il s'agit aussi d'un langage puissant car il est extensible et l'environnement correspondant
permet d'effectuer des navigations et du deboggage très facilement. De plus, le Smalltalk est un méta-langage car il se décrit lui-même
et la notion d'image permet d'éviter les problèmes de fichiers et de chemins.
Le principal inconvénient du Smalltalk est le typage dynamique. En effet, cela peut dérouter le développeur débutant habitué à respecter le type d'une instance et à déclarer une variable en fonction de ce type. Le typage dynamique supprime cette déclaration et rend la tâche plus difficile en cas de maintenance.(ceci est un avis personnel :)) II-C. Des petits programmes ....
Les petits programmes suivants sont écrits en C. Leur objectif est de servir
de fil conducteur pour mieux comprendre comment fonctionne le Smalltalk :
III. SyntaxeIII-A. Eléments syntaxiques
Voici la liste des éléments syntaxiques constituant le Smalltalk :
Maintenant que les éléments de syntaxes ont été présentés, les petits programmes 1 et 2 vont pouvoir être traduits en Smalltalk :
Comme vous pouvez le constatez la variable ''hello'' n'a pas de type à la déclaration. Son type est connu seulement
à son affectation. De plus, aucune "console" n'est utilisée en Smalltalk. Son équivalent est le "Transcript" dont on verra
comment l'afficher à la section V.
Dans cette fonction, 3 notions ont été introduite : le bloc, la boucle for et le return.
Le block possède une fonction plus puissante qu'en C car il est possible de faire un block qui sera l'équivalent d'une macro.
Le programme n°2 donnera donc :
Cela permet d'éviter de recopier plusieurs fois le même block.
III-B. Explications sur les messages/ Règles de prioritésIII-B-1. Différents types de messages
Les messages Smalltalk se classent selon 3 types
III-B-2. Règles de priorités sur les messages
Trois règles régissent la priorité entre messages en Smalltalk :
Voici quelques exemples :
IV. CollectionsIV-A. Généralités sur les collections
Les collections permettent de regrouper et de faciliter l'accès aux données. Elles héritent de la classe Collection.
Voici l'arbre d'héritage des collections :
IV-A-1. Collections ordonnées
Les collections ordonnées héritent de la classe SequenceableCollection. Cette classe est abstraite et permet l'accès à ses éléments par des indices numériques.
On y distingue deux types de collections ordonnées :
IV-A-2. Collections non ordonnées
Les collections non ordonnées correspondent aux ensembles (classes Set et IdentitySet) ainsi qu'aux dictionnaires. La classe Bag représente une collection qui contient des éléments qui peuvent apparaître plus d'une fois, dans n'importe quel ordre sans possibilité d'accès. La classe Set représente un ensemble basique : un élément apparaît une fois dans la collection, à n'importe quel endroit. La classe Dictionary représente une collection ensembliste, de type Set, associant une clé et une valeur (un dictionnaire). IV-B. Messages spécifiques aux collections
Pour présenter les messages nous allons les diviser en 3 catégories. Commencons par les messages liées aux collections de taille variable (toutes sauf Array) :
Passons maintenant aux messages liés aux collections ordonnées :
Passons ensuite aux messages pour parcourir les collections :
Passons enfin aux messages spécifiques aux dictionnaires (classes héritant de Dictionary):
IV-C. Exemple d'utilisation d'une collection
L'exemple qui suit correspond à la traduction du programme n°3 en Smalltalk :
Comme on peut le constater, la notion de collections présente moins de restrictions qu'un tableau classique : la taille n'est pas limitée et la taille est connue. De plus un des gros avantages, est que l'on accède directement à l'élément sans passer par une indexation ce qui empêche d'effectuer des débordements mémoire par exemple. De plus, un des gros avantages du Smalltalk est mis en avant : la faible densité du code. V. Utilisation basique de squeak
Maintenant je vais vous expliquer comment utiliser Squeak pour pouvoir apprendre la syntaxe Smalltalk.
D'autres tutoriaux viendront plus tard pour vous apprendre à faire de la programmation orientée objets. Une petite indication :
pour effectuer des copier/coller les raccourcis se font grâce à la touche ALT et non CTRL.
Pour commencer, voici l'interface de Squeak au démarrage :
Maintenant, nous allons ouvrir le transcript. Pour cela, faites clic gauche(sous windows) et cliquez sur open
dans le menu suivant :
Ensuite choisissez "Transcript" dans le menu open :
Maintenant vous êtes dans le Transcript. Vous pouvez saisir du code qui pourra être exécuté.
Pour cela, vous saisissez le code puis vous passez 2 lignes pour la lisibilité si un affichage doit être fait.
Maintenant vous avez 2 solutions possibles : soit vous faites un "Do it" comme spécifié dans l'image suivante.
Ce cas est plutot à utiliser si un affichage dans le transcript doi être effectué. L'autre cas est de faire un "inspect it"
qui permet de voir les valeurs composants le dernier objet manipuler. (Petite astuce : si vous voulez voir un objet précis, saisissez
le nom de l'objet à la fin du code à exécuter). Pour ces 2 méthodes, il faut sélectionner le code à exécuter, comme dans l'image
suivante :
Et enfin, voici le résultat affiché :
VI. Conclusion
En conclusion, vous êtes maintenant capable de faire de petites procédures en Smalltalk et dans Squeak.
Dans le prochain article, on verra plus en détails l'environnement Squeak et la programmation orientée objets dans Squeak.
VII. Remerciements
Je tiens à remercier Miles, pcaboche, gorgonite, nico-pyright(c) et Gege2061 pour
leur aide et leur relectures. Je remercie plus particulièrement Farscape pour sa patience, son aide et tout ce qu'il a fait.
|
Copyright © 2006 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.