Csevej | |
Az első változat kelte | A fejlesztés 1969-ben kezdődött , 1980-ban nyilvánosan elérhető |
---|---|
Paradigmák | Tárgy |
Szerző | Alan Kay , Dan Ingals , Ted Kaehler , Adele Goldberg |
Fejlesztők | Xerox PARC |
Utolsó verzió | ANSI Smalltalk |
Gépelés | dinamikus |
Befolyásolta | Lisp , Simula |
Befolyásolt | Objective-C , Self , tölgy , Java , Dylan , AppleScript , NewtonScript , Python , Ruby , Scala , Perl 6 , Scratch |
Végrehajtások | Squeak , GNU Smalltalk , VisualWorks , Pharo |
Operációs rendszer | Cross-platform |
A Smalltalk egy objektumorientált , reflektív és dinamikusan beírt programozási nyelv . Ez volt az első olyan programozási nyelv, amelyteljesen grafikusan integrált fejlesztői környezettel rendelkezett . 1972- ben hozták létre. A Lisp és a Simula nyelv ihlette. Azt tervezték, Alan Kay , Dan Ingals , Ted Kaehler , Adele Goldberg a Palo Alto Research Center at Xerox . A nyelvet Smalltalk-80 néven formalizálták, és azóta sokan használják. A Smalltalk még mindig aktívan fejlődik.
A Smalltalk nagy hatással volt számos programozási nyelv fejlesztésére, többek között: Objective-C , Actor (in) , Java és Ruby .
Az 1990-es évek szoftvertervezésének számos újítása a Smalltalk programozói közösség részéről származott, mint például a tervezési minták (a szoftverekre alkalmazva), az extrém programozás (XP) és a refaktorálás . Ward Cunningham , a wiki koncepció kitalálója szintén Smalltalk programozó.
A Smalltalk számos változata létezik, amint ez a programozási nyelvek esetében gyakran előfordul. Minden további melléknév nélkül a Smalltalk szót gyakran használják a Smalltalk-80-ra, az első, 1980-ban nyilvánosságra hozott változatra.
A Smalltalk egy Alan Kay által vezetett kutatócsoport terméke a Xerox Palo Alto Kutatóközpontjában (PARC) ; Alan Kay tervezte a Smalltalk első verzióit, amelyeket Dan Ingalls hajtott végre . Az első verzió, a Smalltalk-71 elnevezésű, néhány reggel azzal a fogadással jött létre, hogy a Simula által inspirált üzenetek küldésének gondolatán alapuló programozási nyelv megvalósítható egy " kódlapon ".
A Smalltalk fő fogalmai a következők:
A Smalltalk a fő alapobjektumokon ( osztály , objektum , öröklődés , polimorfizmus ), az eredeti fogalmakon ( metaklass ) keresztül valósítja meg, és bevezeti a perzisztens tárgy, a kivételkezelés és a modell-nézet-vezérlő elvét .
Meglepő jellemzője Smalltalk teljes hiánya integrált irányítási utasításokat a nyelv: if- then- else, for, whilestb Ezeket az utasításokat objektumok segítségével valósítjuk meg. Például a döntéseket úgy hozzák meg, hogy üzenetet küldenek egy ifTruelogikai objektumnak, és átadnak egy végrehajtandó kódot, ha a logikai érték igaz. Az egyetlen alapértelmezés szerint beépített szempont az üzenet elküldése egy objektumhoz.
Az alábbi példa szemlélteti a Smalltalk programozási stílust. A kód futtatásával megtalálja a magánhangzókat egy karakterláncban. A változókat két függőleges oszlop között deklaráljuk | ... |, :deklaráljuk a paramétereket:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].Az utolsó sorban a karaktersorozat egy kódblokkot tartalmazó aStringüzenetet kap select:argumentumként. Itt van Collectiona feladatot ellátó szuperosztály kódja :
Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollectionEz a kód úgy válaszol az üzenetre, hogy tagjai révén iterál (ez a módszer do:), aBlockaz egyes karakterek kódjának kiértékelésével ; aBlockAz ( aCharacter isVowel) kiértékelésekor létrehoz egy logikai értéket, amelyet azután elküld a ifTrue:. Ha a logikai érték igaz, akkor a karakter hozzá lesz adva a visszatérő karakterlánchoz. Ahogy selectaz absztrakt osztályban definiáljuk, Collectionhasználhatnánk így is:
| 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].