Småprat | |
Dato for første versjon | Utviklingen startet i 1969 , offentlig tilgjengelig i 1980 |
---|---|
Paradigmer | Gjenstand |
Forfatter | Alan Kay , Dan Ingals , Ted Kaehler, Adele Goldberg |
Utviklere | Xerox PARC |
Siste versjon | ANSI Smalltalk |
Skrive | dynamisk |
Påvirket av | Lisp , Simula |
Påvirket | Objective-C , Self , Oak , Java , Dylan , AppleScript , NewtonScript , Python , Ruby , Scala , Perl 6 , Scratch |
Implementeringer | Squeak , GNU Smalltalk , VisualWorks , Pharo |
Operativsystem | Kryssplattform |
Smalltalk er et objektorientert , reflekterende og dynamisk skrevet programmeringsspråk . Det var et av de første programmeringsspråkene som hadde etfullt grafisk integrert utviklingsmiljø . Det ble etablert i 1972 . Den er inspirert av språkene Lisp og Simula . Den ble designet av Alan Kay , Dan Ingals , Ted Kaehler , Adele Goldberg ved Palo Alto Research Center i Xerox . Språket ble formalisert som Smalltalk-80 og har siden blitt brukt av et stort antall mennesker. Smalltalk er fortsatt aktivt utviklet.
Smalltalk var en stor innflytelse i utviklingen av mange programmeringsspråk, inkludert: Objective-C , Actor (in) , Java og Ruby .
Mange av innovasjonene innen programvareutvikling fra 1990-tallet kom fra Smalltalk-programmeringssamfunnet, for eksempel designmønstre (brukt på programvare), ekstrem programmering (XP) og refactoring . Ward Cunningham , oppfinneren av wiki- konseptet , er også en Smalltalk-programmerer.
Det er et stort antall varianter av Smalltalk, som ofte er tilfelle med programmeringsspråk. Uten ytterligere adjektiv brukes ordet Smalltalk ofte for å referere til Smalltalk-80, den første versjonen som ble gitt ut for publikum i 1980.
Smalltalk er et produkt av en gruppe forskere ledet av Alan Kay ved Xeroxs Palo Alto Research Center (PARC) ; Alan Kay designet de første versjonene av Smalltalk som ble implementert av Dan Ingalls . Den første versjonen, kalt Smalltalk-71, ble opprettet om noen få morgener om at et programmeringsspråk basert på ideen om å sende meldinger inspirert av Simula kunne realiseres på "en kodeside".
Hovedkonseptene til Smalltalk er:
Smalltalk implementerer, i tillegg til de viktigste grunnleggende objektene ( klasse , objekt , arv , polymorfisme ), originale konsepter ( metaklass ) og introduserer forestillingen om vedvarende objekt, unntakshåndtering og prinsippet om modell-visningskontroller .
Et overraskende trekk ved Smalltalk er det totale fravær av integrerte kontroll instruksjoner til språket: if- then- else, for, whileetc. Alle disse instruksjonene er implementert ved hjelp av objekter. For eksempel blir avgjørelser tatt ved å sende en melding ifTruetil et boolsk objekt, og sende en kode som skal utføres hvis den boolske er sann. Det eneste aspektet som er innebygd som standard er syntaksen for å sende en melding til et objekt.
Følgende eksempel illustrerer Smalltalk-programmeringsstilen. Når du kjører denne koden, finner du vokalene i en streng. Variablene er deklarert mellom to vertikale søyler | ... |, :erklærer parametrene:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].På den siste linjen aStringmottar strengen en melding select:med en kodeblokk som argument. Her er koden for superklassen Collectionsom gjør jobben:
Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollectionDenne koden svarer på meldingen ved å itere gjennom medlemmene (dette er metoden do:) ved å evaluere koden aBlockfor hvert tegn; aBlock( aCharacter isVowel) når den evalueres skaper en boolsk som deretter sendes til ifTrue:. Hvis boolesk er sant, legges tegnet til strengen som skal returneres. Som selectdefinert i abstraktklassen Collection, kan vi også bruke den på denne måten:
| 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].