Smalltalk
Smalltalk er et objektorientert, dynamisk typet, reflektivt programmeringsspråk av Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg m.fl. fra Xerox PARC fra 70-tallet. Språket er hovedsakelig inspirert av Sketchpad og Simula, men også fra LISP når det gjelder å tilby et integrert utviklingsmiljø, samt i det at det i hovedsak er skrevet i seg selv og dermed er lett utvid- og modifiserbart. Den mest kjente Smalltalk-utgaven er Smalltalk-80 som «dalte ned fra elfenbenstårnet» i august 1981-utgaven av datamagasinet Byte; en ANSI-standard for Smalltalk ble godkjent i 1998.[1]
Smalltalk | |||
---|---|---|---|
Tilblivelse | 1972 | ||
Paradigme | Multi-paradigme: Objektorientert programmering, klassebasert programmering | ||
Designet av | Alan Kay, Adele Goldberg, PARC | ||
Utviklet av | Alan Kay, Adele Goldberg, Daniel Henry Holmes Ingalls, Diana Merry | ||
Siste versjon(er) | ANSI Smalltalk | ||
Typetildeling | dynamisk, sterk | ||
Filendelse(r) | .st | ||
Påvirket av | |||
Lisp, Simula 67, Simula, Logo |
Historikk
redigerSmalltalk-71, Smalltalk-72, Smalltalk-76
Smalltalk i Norge
redigerTrygve Reenskaug, Senter for Industriforskning (SI) Model-view-controller (MVC)
CSCs norskutviklede, globale produkt for reassuranse, SICS/nt, er skrevet i Smalltalk (IBM VisualAge for Smalltalk). Ifølge IBM er SICS/nt det største produktet i verden skrevet i Smalltalk.
GeoKnowledges RRV programvare, GeoX, er skrevet i Smalltalk.
Semantikk og syntaks
redigerSmalltalks semantikk kan (siden Smalltalk-80) kort oppsummeres ved at alt er objekter. Enhver entitet man arbeider med er et objekt som er en instans av en klasse. (Dette gjelder også klassene selv, som er instanser av spesialiserte underklasser av klassen Class.) Det finnes ikke noe klart skille mellom program og utviklingsmiljø; typisk er verktøyene man utvikler i også representert ved objekter som bor i samme verden som objektene man selv definerer og lager.
Som hovedregel fungerer variabler som referanser til objekter heller enn til stykker av minnet; unntak gjelder for grunnleggende objekter som hel- eller flyttall, booleske størrelser og karakterer. Smalltalk har automatisk søppelsamling: når det ikke lenger finnes noen referanse til et objekt, vil minnet det opptok bli frigjort.
All interaksjon mellom objekter foregår via sending av meldinger. Når et objekt mottar en melding, finner det frem til den metoden som implementerer hvordan det skal reagere på meldingen, utfører det metoden angir, og returnerer et objekt som svar.
Smalltalks syntaks er meget enkel. Hver melding kan ha én av tre former (fet skrift og kursiv er kun brukt for å tydeliggjøre delene av en melding):
objekt melding
Meldingen melding sendes til objektet objekt. Et eksempel kan være mainWindow close.
objekt operatormelding argument
Meldingen operatormelding sendes til objektet objekt. Denne syntaksen brukes først og fremst for regneoperasjoner og lignende – kun visse tegn kan brukes i en slik melding. Et eksempel er 2 + 3, som sender meldingen + til objektet (heltallet) 2 med argumentet 3. Klassen som 2 er en instans av implementerer en metode + som returnerer summen av mottakeren og argumentet.
objekt melding: argument objekt meldingDel1: argument del2: argument2 objekt meldingDel1: argument del2: argument2 del3: argument3 osv.
Dette er måten man normalt sender en melding med ett eller flere argumenter. I det siste tilfellet mottar f.eks. objektet objekt meldingen meldingDel1:del2:del3: med tre argumenter. "Hello World"-eksemplet nedenfor viser en slik melding med ett argument; et eksempel med tre argumenter kan være
account processInvoice: inv1 vatPolicy: self foodPolicy logTo: logFile.
Prioritering av meldinger er rent syntaksbasert, og følger rekkefølgen meldingsformene er angitt i ovenfor. Innen hver meldingsform er prioriteten alltid fra venstre mot høyre – dette kan virke forvirrende på dem som er vant til andre språk, siden det f.eks. impliserer at 2 + 3 * 5 evaluerer til 25, ikke 17.
Smalltalk har kun fem reserverte ord. Disse er self (referanse til objektet selv), super (referanse til objektet selv som om det var en instans av sin umiddelbare overklasse), true (boolesk sannhet, referanse til den eneste instansen av klassen True), false (boolesk falskhet, referanse til den eneste instansen av klassen False) og nil ("ingen verdi", referanse til den eneste instansen av klassen UndefinedObject).
Hello World eksempel
redigerTranscript show: 'Hello, world!'.
Meldingen "show" sendes til klassen "Transcript" med teksten "Hello, world!" som argument. Aktivering av "show"-metoden fører så til at teksten blir vist i transcript/konsoll-vinduet. (PS Du må ha systemvinduet "Transcript" åpent for å se resultatet av eksekvering av dette eksemplet.)
Smalltalk-varianter
redigerSmalltalk/V
VisualAge Smalltalk fra IBM
VisualWorks fra Cincom Systems.
Squeak
Dolphin Smalltalk (for Windows), fra Object Arts
Referanser
rediger- ^ ANSI INCITS 319-1998 (R2007) Arkivert 22. februar 2014 hos Wayback Machine. "Information Technology - Programming Languages - Smalltalk", approved on May 19, 1998