Smalltalk

Image manquante
Langage_progr.png
image:Langage_progr.png

Cet article fait partie de la série
Langages de programmation
Langages à objets
Ada 95 - C++ - C#
Common Lisp
Delphi - Eiffel - Java
Nice - Oz - Python
Simula - Smalltalk
Visual Basic
Langages impératifs
APL - ASP - Assembleur
BASIC - C - COBOL
Forth - FORTRAN - Logo
Pascal - Perl - PHP
Langages fonctionnels
Erlang - Haskell
ML/OCaml - Oz
Lisp/Common Lisp
Scheme
Langages déclaratifs
Clips - Oz - Prolog
Langages concurrents
Ada 95 - Erlang
Java - Oz
Langages balisés
HTML - SGML - XML
Dialectes XML
S-expressions
Voir aussi
Conception - Codage
Tests - Optimisations

Smalltalk est un des premiers langages de programmation orienté objet. Il a été créé en 1972. Il est inspiré par Lisp et Simula. Il a été conçu par Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg au Palo Alto Research Center de Xerox. Le langage a été formalisé en tant que Smalltalk-80 et est depuis utilisé par un grand nombre de personnes. Smalltalk est toujours activement développé et dispose d'une base loyale d'utilisateurs.

Smalltalk a été d'une grande influence dans le développement de nombreux langages de programmation, dont : Objective-C, Actor, Java et Ruby.

Un grand nombre des innovations de l'ingenierie logicielle des années 90 viennent de la communauté des programmeurs Smalltalk, tels que les Design Patterns (appliqués au logiciel), l'Extreme Programming(XP) et le refactoring. Ward Cunningham, l'inventeur du concept du WikiWiki, est également un programmeur Smalltalk.

Les principaux concepts de Smalltalk sont :

Il implémente, en plus des principes objets de bases (classe, objet, héritage, polymorphisme), des concepts originaux (métaclasse) et introduit la notion d'objet persistant, de traitement des exceptions et le principe Modèle-Vue-Contrôleur.

Une caractéristique surprenante de Smalltalk est l'absence totale d'instructions de contrôles intégrées au langage: if-then-else, for, while, etc. Toutes ces instructions sont implémentés en utilisant des objets. Par exemple, les décisions sont prises en envoyant un message ifTrue à un objet Booléen, et en passant un fragment de code a exécuter si le Booléen est vrai. La seule chose d'intégré par défaut est la syntaxe pour envoyer un message à un objet.

L'exemple suivant (un code permettant de trouver les voyelles dans une chaîne) illustre le style de programmation Smalltalk. (le | déclare les variables, : déclare les paramètres, et dites-vous pour le moment que [ et ] sont des acollades { et }):

 | aString vowels |
 aString := 'This is a string'.
 vowels := aString select: [:aCharacter | aCharacter isVowel].
 

À la dernière ligne, la chaîne reçoit un message select: avec un bloc de code en argument. Voici le code de la super-classe Collection qui fait le travail:

 | newCollection |
 newCollection := self species new.
 self do: [:each | 
     (aBlock value: each) 
         ifTrue: [newCollection add: each]].
 ^newCollection
 

Ce code répond au message en itérant au travers de ses membres (c'est la methode do:) en évaluant le code aBlock à chaque caractère; aBlock (aCharacter isVowel) une fois évalué crée un booléen, qui est alors envoyé à ifTrue:. Si le booléen est vrai, alors le caractère est ajouté à la chaîne qui sera retourné. Comme select est défini dans la classe abstraite Collection, on pourrait également l'utiliser de cette facon :

 | rectangles aPoint|
 rectangles := OrderedCollection 
   with: (Rectangle left: 0 right: 10 top: 100 bottom: 200)
   with: (Rectangle left: 10 right: 10 top: 110 bottom: 210).
 aPoint := Point x: 20 y: 20.
 collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].
 

Liens externes

Implementations

Tutorials

Modèle:List of programming languages

See also: Smalltalk, 1972, APL (langage), Active server pages, Ada (langage), Alan Kay, Assembleur (langage), Basic, CLOS