Smalltalk

{{#ifeq:||Un article de Ziki, l'encyclopédie libre.|Une page de Ziki, l'encyclopédie libre.}}

Modèle:Voir homophone Modèle:Infobox Langage de programmation

Modèle:Langue est un langage de programmation orienté objet, réflexif et dynamiquement typé. Il fut l'un des premiers langages de programmation à disposer d'un environnement de développement intégré complètement graphique. Il a été créé en 1972. Il est inspiré par les langages Lisp et Simula. Il a été conçu par Alan Kay, Dan Ingals, 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é.

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

Un grand nombre des innovations de l'ingénierie logicielle des années 1990 viennent de la communauté des programmeurs Smalltalk, tels que les [[Patron de conception|Modèle:Lang]] (appliqués au logiciel), l’Modèle:Lang (XP) et le refactoring. Ward Cunningham, l'inventeur du concept du wiki, est également un programmeur Smalltalk.

Historique

Il existe un grand nombre de variantes de Smalltalk, comme c'est souvent le cas avec les langages de programmation<ref>Modèle:Lien web.</ref>. Sans autre qualificatif, le mot Smalltalk est souvent utilisé pour désigner Smalltalk-80, la première version à avoir été rendue publique en 1980.

Smalltalk est le produit d'un groupe de chercheurs conduit par Alan Kay au Palo Alto Research Center (PARC) de Xerox ; Alan Kay a conçu les premières versions de Smalltalk qui ont été implémentées par Dan Ingalls. La première version, nommée Smalltalk-71, a été créée en quelques matinées sur le pari qu'un langage de programmation basé sur l'idée d'envoi de messages inspirée de Simula pouvait être réalisé en « une page de code ».

Concepts

Les principaux concepts de Smalltalk sont :

  • « Tout est objet » : les chaînes de caractères, les entiers, les booléens, les définitions de classes, les blocs de code, les piles et la mémoire sont représentés en tant qu'objets ;
  • Tout est modifiable. Le langage permet par exemple de changer d'IDE en cours d'utilisation, sans recompiler ni redémarrer l'application. De même, il est possible de créer de nouvelles instructions de contrôle dans le langage. Certaines implémentations permettent de changer la syntaxe du langage, ou la façon dont le ramasse-miettes fonctionne ;
  • Le typage est dynamique, donnant ainsi une certaine concision au langage ;
  • Un ramasse-miettes mémoire est intégré et transparent pour le développeur ;
  • Un système de gestion d'exceptions avec reprise est fourni ;
  • Les programmes Smalltalk sont généralement compilés en bytecode, exécutés par une machine virtuelle ;
  • La compilation est faite à la volée : les machines virtuelles commerciales modernes compilent le bytecode vers le code machine natif de façon à obtenir de meilleures performances, une technique dont Smalltalk-80 a été le pionnier, développé par ParcPlace Systems au milieu des années 1980. Cette idée a été adoptée par le langage de programmation Java quelque dix ans après et renommée « compilation Modèle:Lang », ou JIT ;
  • Une classe peut hériter d'une seule autre classe (héritage simple).

Description

Smalltalk implémente, en plus des principaux objets de base (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ôle intégrées au langage : <syntaxhighlight lang="text" inline="">if​</syntaxhighlight>-<syntaxhighlight lang="text" inline="">then​</syntaxhighlight>-<syntaxhighlight lang="text" inline="">else​</syntaxhighlight>, <syntaxhighlight lang="text" inline="">for​</syntaxhighlight>, <syntaxhighlight lang="text" inline="">while​</syntaxhighlight>, etc. Toutes ces instructions sont implémentées en utilisant des objets. Par exemple, les décisions sont prises en envoyant un message <syntaxhighlight lang="text" inline="">ifTrue​</syntaxhighlight> à un objet booléen, et en passant un fragment de code à exécuter si le booléen est vrai. Le seul aspect intégré par défaut est la syntaxe pour envoyer un message à un objet.

L'exemple suivant illustre le style de programmation Smalltalk. L'exécution de ce code permet de trouver les voyelles dans une chaîne. Les variables sont déclarées entre deux barres verticales |...|, <syntaxhighlight lang="text" inline="">:​</syntaxhighlight> déclare les paramètres : <syntaxhighlight lang="smalltalk"> | aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel]. </syntaxhighlight>

À la dernière ligne, la chaîne <syntaxhighlight lang="text" inline="">aString​</syntaxhighlight> reçoit un message <syntaxhighlight lang="text" inline="">select:​</syntaxhighlight> avec un bloc de code en argument. Voici le code de la super-classe <syntaxhighlight lang="text" inline="">Collection​</syntaxhighlight> qui fait le travail : <syntaxhighlight lang="smalltalk"> Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each |

   (aBlock value: each) 
       ifTrue: [newCollection add: each]].

^newCollection </syntaxhighlight>

Ce code répond au message en itérant au travers de ses membres (c'est la méthode <syntaxhighlight lang="text" inline="">do:​</syntaxhighlight>) en évaluant le code <syntaxhighlight lang="text" inline="">aBlock​</syntaxhighlight> à chaque caractère ; <syntaxhighlight lang="text" inline="">aBlock​</syntaxhighlight> (<syntaxhighlight lang="text" inline="">aCharacter isVowel​</syntaxhighlight>) une fois évalué crée un booléen, qui est alors envoyé à <syntaxhighlight lang="text" inline="">ifTrue:​</syntaxhighlight>. Si le booléen est vrai, alors le caractère est ajouté à la chaîne qui sera retourné. Comme <syntaxhighlight lang="text" inline="">select​</syntaxhighlight> est défini dans la classe abstraite <syntaxhighlight lang="text" inline="">Collection​</syntaxhighlight>, on pourrait également l'utiliser de cette façon : <syntaxhighlight lang="smalltalk"> | 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]. </syntaxhighlight>

Annexes

Modèle:Autres projets

Articles connexes

Liens externes

  • ESUG (Modèle:Lang) : association qui réunit industriels et universitaires utilisateurs de Smalltalk. Organise notamment une conférence annuelle depuis 1993.
  • {{#invoke:Langue|indicationDeLangue}} Modèle:Lang agrège des blogs sur Smalltalk.
  • {{#invoke:Langue|indicationDeLangue}} « Modèle:Lang » blog d'un passionné de Smalltalk,

Didacticiels

Bibliographie

  • Clavel Gilles, Programmer objets avec Smalltalk Modèle:ISBN
  • Briffaut X. et Sabah G., Smalltalk : Programmation orientée objet et développement d'applications,
  • Erard P.J. et Déguénon P., Simulation par événements discrets, Concept et réalisations en Simula, Ada et Smalltalk, PPUR, coll. Informatique, Lausanne, 1996
  • Goldberg, Adele (December 1983). Smalltalk-80: The Interactive Programming Environment. Addison-Wesley. Modèle:ISBN.
  • Goldberg, Adele; Robson, David (May 1983). Smalltalk-80: The Language and its Implementation. Addison-Wesley. Modèle:ISBN.

Notes et références

<references />
Modèle:Palette Langages de programmation Modèle:Portail