Convorbire scurtă | |
Data primei versiuni | Dezvoltarea a început în 1969 , disponibilă public în 1980 |
---|---|
Paradigme | Obiect |
Autor | Alan Kay , Dan Ingals , Ted Kaehler, Adele Goldberg |
Dezvoltatori | Xerox PARC |
Ultima versiune | ANSI Smalltalk |
Tastare | dinamic |
Influențată de | Lisp , Simula |
Influențat | Objective-C , Self , Oak , Java , Dylan , AppleScript , NewtonScript , Python , Ruby , Scala , Perl 6 , Scratch |
Implementări | Squeak , GNU Smalltalk , VisualWorks , Pharo |
Sistem de operare | Cross-platform |
Smalltalk este un limbaj de programare orientat obiect , reflectiv și tastat dinamic . A fost unul dintre primele limbaje de programare care a avut un mediu de dezvoltare integrat complet grafic. A fost înființată în 1972 . Este inspirat din limbajele Lisp și Simula . A fost proiectat de Alan Kay , Dan Ingals , Ted Kaehler , Adele Goldberg la Centrul de Cercetare Palo Alto din Xerox . Limbajul a fost oficializat ca Smalltalk-80 și de atunci a fost folosit de un număr mare de oameni. Smalltalk este încă dezvoltat activ.
Smalltalk a avut o mare influență în dezvoltarea multor limbaje de programare, inclusiv: Objective-C , Actor (în) , Java și Ruby .
Multe dintre inovațiile în ingineria software din anii 1990 au venit de la comunitatea de programare Smalltalk, cum ar fi modelele de proiectare (aplicate software-ului), programarea extremă (XP) și refactorizarea . Ward Cunningham , inventatorul conceptului wiki , este, de asemenea, un programator Smalltalk.
Există un număr mare de variante ale Smalltalk, așa cum se întâmplă adesea cu limbajele de programare. Fără adjectiv suplimentar, cuvântul Smalltalk este adesea folosit pentru a se referi la Smalltalk-80, prima versiune care a fost lansată publicului în 1980.
Smalltalk este produsul unui grup de cercetători condus de Alan Kay la Centrul de Cercetare Palo Alto (PARC) de la Xerox ; Alan Kay a proiectat primele versiuni ale Smalltalk care au fost implementate de Dan Ingalls . Prima versiune, numită Smalltalk-71, a fost creată în câteva dimineți pe pariul că un limbaj de programare bazat pe ideea de a trimite mesaje inspirate de Simula ar putea fi realizat într-o „pagină de cod”.
Principalele concepte ale Smalltalk sunt:
Smalltalk implementează, pe lângă principalele obiecte de bază ( clasă , obiect , moștenire , polimorfism ), concepte originale ( metaclasă ) și introduce noțiunea de obiect persistent, tratarea excepțiilor și principiul model-vizualizare-controler .
O trăsătură surprinzătoare Smalltalk este absența totală a instrucțiunilor de control integrat în limba: if- then- else, for, whileetc. Toate aceste instrucțiuni sunt implementate folosind obiecte. De exemplu, deciziile se iau prin trimiterea unui mesaj ifTruecătre un obiect boolean și trecerea unei bucăți de cod pentru a fi executată dacă booleanul este adevărat. Singurul aspect încorporat implicit este sintaxa pentru trimiterea unui mesaj către un obiect.
Următorul exemplu ilustrează stilul de programare Smalltalk. Rularea acestui cod va găsi vocalele într-un șir. Variabilele sunt declarate între două bare verticale | ... |, :declară parametrii:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].În ultima linie, șirul aStringprimește select:ca argument un mesaj cu un bloc de cod. Iată codul pentru superclasa Collectioncare face treaba:
Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollectionAcest cod răspunde la mesaj prin iterarea prin membrii săi (aceasta este metoda do:) prin evaluarea codului aBlockpentru fiecare caracter; aBlock( aCharacter isVowel) atunci când este evaluat creează un boolean, care este apoi trimis către ifTrue:. Dacă booleanul este adevărat, atunci caracterul este atașat la șirul care va fi returnat. După cum selecteste definit în clasa abstractă Collection, am putea să-l folosim și în acest fel:
| 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].