Småprat

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 18 augusti 2015; kontroller kräver 43 redigeringar .
Småprat
Semantik objektorienterad
Språkklass programmeringsspråk
Framträdde i Utvecklingen startade 1969, blev tillgänglig för allmänt bruk 1980
Författare Alan Kaye , Adele Goldberg , Dan Ingalls, Xerox PARC
Utvecklaren Kaye, Alan Curtis , Adele Goldberg [1] , Daniel Henry Holmes Ingalls [d] och Diana Merry [d]
Släpp Smalltalk-80 version 2
Testversion 1980  ( 1980 )
Typ system dynamisk
Stora implementeringar Pharo , Squeak , VisualWorks , GNU Smalltalk
Blivit påverkad Simula , Skissblock , Lisp , Logotyp
påverkas Objective-C , AppleScript , C# , Dylan , Groovy , Io , Java , Lisaac , NewtonScript , Python , Ruby , Scala , Self , C++

Smalltalk ( [ˈsmɔːltɔːk] ) är ett dynamiskt maskinskrivet objektorienterat programmeringsspråk baserat på idén att skicka meddelanden , utvecklat på Xerox PARC av Alan Kay , Dan Ingalls , Ted Kagler , Adele Goldberg och andra på 1970 -talet . Det är en integrerad utvecklings- och exekveringsmiljö, vars objekt är tillgängliga för modifiering genom sig själv, och programmering där i slutändan handlar om att modifiera sitt eget beteende. Språket introducerades som Smalltalk-80.

Smalltalk är ett av många objektorienterade språk baserade på Simula -språket [2] , som i sig har haft stort inflytande på utvecklingen av sådana objektorienterade språk som: Objective-C , Actor , Java , Erlang [ 3] , Groovy , Ruby och många andra. Många av 1980- och 1990 -talens programmeringsidéer har sitt ursprung i Smalltalk-gemenskapen. Dessa inkluderar refactoring , designmönster (som tillämpas på programvara), klass-ansvar-interaktionskartor och extrem programmering i allmänhet. Grundaren av wikikonceptet , Ward Cunningham , är också en del av Smalltalk-communityt.

Huvudidéer

Huvudidéerna för Smalltalk är:

Smalltalk använder också andra moderna idéer:

En av särdragen med Smalltalk är att inte ens sådana traditionella konstruktioner som om-då-annat, för, medan, etc. inte är en del av språket. Alla implementeras med hjälp av . Till exempel fattas ett beslut genom att skicka ett meddelande till ett ifTrue:booleskt objekt och överför kontrollen till en textbit om det booleska värdet är sant.

Egentligen finns det få inbyggda syntaktiska konstruktioner i språket:

och flera syntaxkonstruktioner för att definiera bokstavliga objekt och temporära variabler.

Analogen till Smalltalks meddelandemekanism är Internet: du kan föreställa dig varje objekt som en webbserver som svarar på förfrågningar. Samtidigt kan servern helt enkelt ge ett fördefinierat svar på förfrågningar, till exempel en webbsida som ligger längs en viss väg; kan omdirigera begäran-meddelandet till ett annat objekt, den analoga är en proxyserver; kan ändra begäran enligt vissa regler, den analoga är url-omskrivningstekniken, och naturligtvis kan den bilda en helt ny sida som motsvarar de data som överförs med meddelandet. Om objektet inte har en fördefinierad metod för att svara på meddelandet anropar ramverket metoden #doesNotUnderstand: på mottagaren, precis som en webbserver returnerar en felsida om en obefintlig webbsidas sökväg ges.

En kort översikt över syntaxelementen:

Ett separat teckenpar |omger listan över variabelnamn som kommer att vara tillfälliga. :När ett meddelande överförs, placeras tecknet efter namnet på meddelandet eller dess argument, före värdet som överförs med det, och tecknen [och ]begränsa blocket av kommandon, eller snarare bokstaven i den anonyma funktionen. Men de kan till att börja med uppfattas som analoga med lockiga hängslen {på }C-liknande språk också. I början av en sådan anonym funktion, upp till ett tecken |, kan du lista de argument som den kräver. Dess resultat kommer att vara det sista uttrycket det utvärderade. En symbol .avslutar ett enskilt kommando, en symbol ; separerar meddelanden som måste sekventiellt överföras till samma objekt. Ett teckenpar :=betecknar tilldelningen till en variabel vars namn är placerat före den, ett bokstavligt objekt eller ett meddelandesvarsobjekt efter det.

Följande exempel, som visar att hitta vokaler i en sträng, illustrerar Smalltalk-stilen.

| aSträngvokaler | aString := 'Detta är en sträng' . vokaler := aString välj: [ : aTecken | ett tecken ärVokal ] .

På den sista raden i exemplet skickas ett meddelande till strängobjektet select:med ett argument - ett anonymt kodblock som tar ett argument och returnerar vad isVowel-händelsehanteraren för objektet som skickas med detta argument kommer att returnera. Vid bearbetning av select-meddelandet anropas en metod select:från klassen Collection(en av förfäderna till klassen Stringtill vilken objektet som skapats av strängen literal i den andra raden i exemplet tillhör). Texten för denna metod visas nedan:

välj: blockera | nykollektion | newCollection := själv art ny . själv gör: [ : varje | ( aBlockvärde : varje ) ifTrue: [ newCollection add: each ]] . ^ ny samling

Den tar den anonyma funktionen aBlock som indata, skapar en ny samling som liknar sig själv och kallar dess element uppräkning (detta är metoden do:), och exekverar blocket som skickas till den aBlockför varje element; när blocket exekveras (i exemplet - aCharacter isVowel), skapar det ett booleskt värde, till vilket meddelandet sedan skickas ifTrue:. Om detta värde är trueläggs bokstaven till den returnerade strängen. I slutet returneras den skapade samlingen som ett svar på meddelandet, vilket indikeras av retur som svarssymbol ^. Eftersom den är select:definierad i en abstrakt klass Collectionkan vi också använda den så här:

| rektanglar aPoint | rektanglar := OrderedCollection med: ( Rektangel vänster: 0 höger: 10 topp: 100 botten: 200 ) med: ( Rektangel vänster: 10 höger: 10 topp: 110 botten: 210 ) . aPoint := Punkt x: 20 y: 20 . kollisioner := rektanglar välj: [ : aRect | aRect containsPoint: aPoint ] .

Historik

Smalltalk skapades av en grupp forskare, ledd av Alan Kay , vid Xerox PARC Research Center . Den första implementeringen, känd som Smalltalk-71, skapades inom några månader som ett resultat av en debatt om att ett programmeringsspråk baserat på Simula-idén om meddelandesändning skulle implementeras i en "kodsida". Den senare versionen som faktiskt används för forskningsarbete är nu känd som Smalltalk-72. Dess syntax och exekveringsmodell skilde sig mycket från modern Smalltalk, så mycket att det måste betraktas som ett annat språk.

Efter betydande revisioner som fixade flera aspekter av exekveringssemantiken för effektivitet, skapades en version känd som Smalltalk-76. Den här versionen lägger till arv, en syntax närmare Smalltalk-80 och en utvecklingsmiljö som innehåller de flesta verktyg som är bekanta med dagens Smalltalk-utvecklare.

Metaklasser lades till i Smalltalk-80, vilket gjorde frasen "allt är ett objekt" sant genom att associera egenskaper och beteenden med individuella klasser (till exempel stödja olika sätt att instansiera). Smalltalk-80 var den första versionen som var tillgänglig utanför PARC – först som Smalltalk-80 Version 1, distribuerad till ett litet antal företag och universitet för "peer review". Senare, 1983, släpptes en offentlig implementering känd som Smalltalk-80 Version 2 som en bild (en plattformsoberoende fil som innehåller objekt) och en virtuell maskinspecifikation.

Det finns för närvarande två implementeringar av Smalltalk som är direkta ättlingar till Smalltalk-80, Squeak och VisualWorks . [4] Smalltalk-80 version 2-bilden körs på Hobbes, en ST-80 virtuell maskin implementerad på VisualWorks.

"Hej världen!"

Ett enkelt exempel

Avskriftsshow : 'Hej, värld!'

Det här exemplet visar två sidor av Smalltalk.

Först, skicka ett meddelande: i Smalltalk utförs alla åtgärder genom att skicka meddelanden till objekt. I det här fallet är meddelandet show: 'Hello, world!', och det skickas till objektet Transcript. För att bearbeta det här meddelandet kommer Transcript-metoden att kallas show:, som bör undersöka dess argument (strängen 'Hello, world!') och mappa det argumentet till transkriptet (observera att du måste ha ett Transcript- fönster öppet för att se resultatet).

För det andra visar detta exempel den grundläggande syntaxen för att skicka ett meddelande i Smalltalk: <meddelandemottagare> <mellanslag> <meddelande>. Till skillnad från C++ finns det inga punkter efter mottagaren och inga parenteser runt argument.

Ett exempelobjekt

Klassdefinition Objektunderklass : #MessagePublisher instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' kategori: 'Smalltalk-exempel'

Detta är en enkel klassdefinition med en namn- och kategoridefinition. Vanligtvis tillhandahåller utvecklingsmiljön en stubb med det mesta av texten för detta exempel.

Metoddefinition publicera Transcript show: "Hej, värld!"

Detta är definitionen av en metod som heter publish. Metodens kropp är densamma som i det enkla exemplet.

Metodanrop MessagePublisher ny publicering

I det här exemplet skapas en instans av klassen MessagePublisher( MessagePublisher new) och sedan skickas ett meddelande till den publish. Observera att ett språknyckelord inte används för att skapa ett objekt (som i C++, Java, C#), utan ett normalt meddelande skickas newtill MessagePublisher. Meddelanden för att skapa objekt åsidosätts ibland. Till exempel kan en abstrakt klass svara genom newatt returnera en instans av en av dess konkreta underklasser.

Implementeringar

Anteckningar

  1. 1 2 https://www.cs.umd.edu/hcil/muiseum/goldberg/goldberg_page.htm
  2. Simula-språket var också objektorienterat och föregicks och har erkänts som ett inflytande på Smalltalk-språket, men det var ett modelleringsspråk, inte ett allmänspråk.
  3. Cesarini F., Thompson S. Programmering i Erlang = Erlang Programmering. - M. : DMK Press, 2012. - S. 200. - 488 sid. - ISBN 978-5-94074-617-1 .
  4. Skärmdump av Smalltalk-80 Arkiverad 19 april 2003.
  5. Cincom Smalltalk-webbplats Arkiverad 27 augusti 2008 på Wayback Machine , Wiki Arkiverad 2006-10-10 . , Cincom Smalltalk Blog Arkiverad 13 januari 2005 på Wayback Machine
  6. Pharo Smalltalk-webbplats . Hämtad 19 maj 2022. Arkiverad från originalet 11 maj 2020.
  7. net.net - En av Internets premiäradresser  (inte tillgänglig länk)
  8. IBM - VisualAge Smalltalk - Produktöversikt . Hämtad 10 januari 2005. Arkiverad från originalet 8 april 2002.
  9. Smalltalk/X - en objektorienterad IDE . Hämtad 18 februari 2018. Arkiverad från originalet 13 april 2022.
  10. GNU Smalltalk | Smalltalken för de som kan skriva . Hämtad 1 oktober 2007. Arkiverad från originalet 1 mars 2020.
  11. Object Connect Home . Hämtad 10 januari 2005. Arkiverad från originalet 26 februari 2021.
  12. LSW Vision-Smalltalk 2008 . Hämtad 10 januari 2005. Arkiverad från originalet 9 januari 2005.
  13. Ambrai Smalltalk . Hämtad 11 april 2005. Arkiverad från originalet 5 april 2005.
  14. Sitio Web de Guillermo Adrián Molina . Hämtad 6 maj 2008. Arkiverad från originalet 18 maj 2008.

Litteratur

  • Robert W. Sebesta. 2.15. Objektorienterad programmering: Smalltalk Language // Basic Concepts of Programming Languages ​​= Concepts of Programming Languages/ Per. från engelska. - 5:e uppl. - M .: Williams , 2001. - S.  109 -112. — 672 sid. - 5000 exemplar.  — ISBN 5-8459-0192-8 (ryska), ISBN 0-201-75295-6 (engelska).
  • Yu. A. Kiryutenko, V. A. Saveliev. Objektorienterad programmering. Smalltalk-språket . - M . : Vuzovskaya bok, 2007. - 328 s. — ISBN 5-9502-0097-7 . Arkiverad 4 mars 2016 på Wayback Machine
  • Specialnummer om Smalltalk  // BYTE  :  magazine. - McGraw-Hill, 1981. - August ( vol. 6 , nr 8 ). Arkiverad från originalet den 7 maj 2016.

Länkar