Småsnak

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 18. august 2015; checks kræver 43 redigeringer .
Småsnak
Semantik objektorienteret
Sprog klasse programmeringssprog
Dukkede op i Udvikling startede i 1969, blev tilgængelig til almindelig brug i 1980
Forfatter Alan Kaye , Adele Goldberg , Dan Ingalls, Xerox PARC
Udvikler Kaye, Alan Curtis , Adele Goldberg [1] , Daniel Henry Holmes Ingalls [d] og Diana Merry [d]
Frigøre Smalltalk-80 version 2
Test version 1980  ( 1980 )
Type system dynamisk
Større implementeringer Pharo , Squeak , VisualWorks , GNU Smalltalk
Blev påvirket Simula , Skitseblok , Lisp , Logo
påvirket Objective-C , AppleScript , C# , Dylan , Groovy , Io , Java , Lisaac , NewtonScript , Python , Ruby , Scala , Self , C++

Smalltalk ( [ˈsmɔːltɔːk] ) er et dynamisk skrevet objektorienteret programmeringssprog baseret på ideen om at sende beskeder , udviklet på Xerox PARC af Alan Kay , Dan Ingalls , Ted Kagler , Adele Goldberg og andre i 1970'erne . Det er et integreret udviklings- og eksekveringsmiljø, hvis objekter er tilgængelige for modifikation gennem sig selv, og programmering, hvor i sidste ende kommer ned på at ændre sin egen adfærd. Sproget blev introduceret som Smalltalk-80.

Smalltalk er et af mange objektorienterede sprog baseret på Simula -sproget [2] , som selv har haft stor indflydelse på udviklingen af ​​sådanne objektorienterede sprog som: Objective-C , Actor , Java , Erlang [ 3] , Groovy , Ruby og mange andre. Mange af 1980'ernes og 1990'ernes programmeringsideer opstod i Smalltalk-samfundet. Disse omfatter refactoring , designmønstre (som anvendt på software), klasse-ansvar-interaktionskort og ekstrem programmering generelt. Grundlæggeren af ​​wiki -konceptet, Ward Cunningham , er også en del af Smalltalk-fællesskabet.

Hovedideer

Hovedideerne i Smalltalk er:

Smalltalk bruger også andre moderne ideer:

En af de særlige kendetegn ved Smalltalk er, at selv sådanne traditionelle konstruktioner som hvis-så-andet, for, mens osv. ikke er en del af sproget. Alle af dem er implementeret ved hjælp af . For eksempel træffes en beslutning ved at sende en besked til et ifTrue:boolsk objekt og overfører kontrol til et stykke tekst, hvis den boolske værdi er sand.

Faktisk er der få indbyggede syntaktiske konstruktioner i sproget:

og adskillige syntakskonstruktioner til at definere bogstavelige objekter og midlertidige variabler.

Analogen til Smalltalk-meddelelsesmekanismen er internettet: du kan forestille dig hvert objekt som en webserver, der reagerer på anmodninger. Samtidig kan serveren blot udsende et foruddefineret svar på anmodninger, for eksempel en webside placeret langs en bestemt sti; kan omdirigere anmodningsmeddelelsen til et andet objekt, den analoge er en proxyserver; kan ændre anmodningen efter visse regler, den analoge er url-omskrivningsteknikken, og den kan selvfølgelig danne en helt ny side svarende til de data, der sendes med beskeden. Hvis objektet ikke har en foruddefineret metode til at svare på beskeden, kalder frameworket #doesNotUnderstand: metoden på modtageren, ligesom en webserver returnerer en fejlside, hvis der gives en ikke-eksisterende websidesti.

En kort oversigt over syntakselementerne:

Et separat tegnpar |omgiver listen over variabelnavne, der vil være midlertidige. :Når du sender en meddelelse, placeres tegnet efter navnet på meddelelsen eller dens argument, før den værdi, der sendes med den, og tegnene [og ]begrænser blokken af ​​kommandoer, eller rettere, det bogstavelige af den anonyme funktion. Men de kan for det første opfattes som analoge med krøllede seler også {på }C-lignende sprog. I begyndelsen af ​​en sådan anonym funktion, op til et tegn |, kan du liste de argumenter, den kræver. Resultatet vil være det sidste udtryk, det evaluerede. Et symbol .afslutter en enkelt kommando, et symbol ; adskiller meddelelser, der skal sendes sekventielt til det samme objekt. Et tegnpar :=angiver tildelingen til en variabel, hvis navn er placeret foran den, et bogstaveligt objekt eller et meddelelsessvarobjekt placeret efter det.

Det følgende eksempel, der viser at finde vokaler i en streng, illustrerer Smalltalk-stilen.

| aString vokaler | aString := 'Dette er en streng' . vokaler := aString vælg: [ : aTegn | et tegn erVokal ] .

I den sidste linje i eksemplet sendes en besked til select:strengobjektet med et argument - en anonym kodeblok, der tager ét argument og returnerer det, som isVowel-hændelseshandleren for objektet, der sendes med dette argument, vil returnere. Ved behandling af select-meddelelsen kaldes en metode select:fra klassen Collection(en af ​​forfædrene til klassen String, som objektet, der er oprettet af strengen literal i eksemplets anden linje, tilhører). Teksten til denne metode er vist nedenfor:

vælg: bloker | ny samling | newCollection := selv art ny . selv gør: [ : hver | ( aBlokværdi : hver ) ifTrue: [ newCollection add: each ]] . ^ ny samling

Den tager den anonyme funktion aBlock som input, opretter en ny samling, der ligner sig selv, og kalder dens elementer opregning (dette er metoden do:), og udfører den blok, der er sendt til den aBlockfor hvert element; når blokken udføres (i eksemplet - aCharacter isVowel), skaber den en boolesk værdi, hvortil beskeden så sendes ifTrue:. Hvis denne værdi er true, tilføjes bogstavet til den returnerede streng. I slutningen returneres den oprettede samling som et svar på beskeden, angivet med retursymbolet som svar ^. Fordi det er select:defineret i en abstrakt klasse Collection, kan vi også bruge det sådan her:

| rektangler aPoint | rektangler := Bestilt Samling med: ( Rektangel venstre: 0 højre: 10 top: 100 bund: 200 ) med: ( Rektangel venstre: 10 højre: 10 top: 110 bund: 210 ) . aPunkt := Punkt x: 20 y: 20 . kollisioner := rektangler vælg: [ : aRekt | aRect indeholderPunkt: aPunkt ] .

Historie

Smalltalk blev skabt af en gruppe forskere, ledet af Alan Kay , ved Xerox PARC Research Center . Den første implementering, kendt som Smalltalk-71, blev skabt inden for få måneder som et resultat af en debat om, at et programmeringssprog baseret på Simula-ideen om afsendelse af beskeder skulle implementeres i en "side med kode". Den senere version, der faktisk bruges til forskningsarbejde, er nu kendt som Smalltalk-72. Dens syntaks og udførelsesmodel var meget forskellig fra moderne Smalltalk, så meget, at det må betragtes som et andet sprog.

Efter betydelige revisioner, der fikserede flere aspekter af udførelsessemantikken for effektivitet, blev en version kendt som Smalltalk-76 oprettet. Denne version tilføjer arv, en syntaks tættere på Smalltalk-80 og et udviklingsmiljø, der indeholder de fleste af de værktøjer, som nutidens Smalltalk-udviklere kender.

Metaklasser blev tilføjet i Smalltalk-80, hvilket gør udtrykket "alt er et objekt" sandt ved at associere egenskaber og adfærd med individuelle klasser (f.eks. understøtte forskellige måder at instansiere på). Smalltalk-80 var den første version tilgængelig uden for PARC - først som Smalltalk-80 Version 1, distribueret til et lille antal virksomheder og universiteter til "peer review". Senere, i 1983, blev en offentlig implementering kendt som Smalltalk-80 Version 2 frigivet som et billede (en platformsuafhængig fil indeholdende objekter) og en virtuel maskinspecifikation.

Der er i øjeblikket to implementeringer af Smalltalk, der er direkte efterkommere af Smalltalk-80, Squeak og VisualWorks . [4] Smalltalk-80 version 2-billedet kører på Hobbes, en ST-80 virtuel maskine implementeret på VisualWorks.

"Hej Verden!"

Et simpelt eksempel

Transskription viser: 'Hej, verden!'

Dette eksempel viser to sider af Smalltalk.

Først, at sende en besked: i Smalltalk udføres alle handlinger ved at sende beskeder til objekter. I dette tilfælde er beskeden show: 'Hello, world!', og den sendes til objektet Transcript. For at behandle denne besked kaldes Transcript-metoden show:, som skal undersøge dens argument (strengen 'Hej, verden!') og tilknytte dette argument til transskriptionen (bemærk, at du skal have et Transcript -vindue åbent for at se resultatet).

For det andet viser dette eksempel den grundlæggende syntaks for at sende en besked i Smalltalk: <beskedmodtager> <mellemrum> <meddelelse>. I modsætning til C++ er der ingen prikker efter modtageren og ingen parenteser omkring argumenter.

Et eksempelobjekt

Klassedefinition Objektunderklasse : #MessagePublisher instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' kategori: 'Smalltalk-eksempler'

Dette er en simpel klassedefinition med en navn- og kategoridefinition. Typisk giver udviklingsmiljøet en stump med det meste af teksten til dette eksempel.

Metodedefinition udgiv Transcript show: 'Hej, verden!'

Dette er definitionen af ​​en metode, der hedder publish. Metodens krop er den samme som i det simple eksempel.

Metodekald MessagePublisher ny udgivelse

I dette eksempel oprettes en forekomst af klassen MessagePublisher( MessagePublisher new), hvorefter der sendes en besked til den publish. Bemærk, at et sprognøgleord ikke bruges til at oprette et objekt (som i C++, Java, C#), men en normal besked sendes newtil MessagePublisher. Meddelelser til oprettelse af objekter tilsidesættes nogle gange. For eksempel kan en abstrakt klasse reagere ved newat returnere en forekomst af en af ​​dens konkrete underklasser.

Implementeringer

Noter

  1. 1 2 https://www.cs.umd.edu/hcil/muiseum/goldberg/goldberg_page.htm
  2. Simula-sproget var også objektorienteret og foregået og er blevet anerkendt som en indflydelse på Smalltalk-sproget, men det var et modelleringssprog, ikke et almindeligt sprog.
  3. Cesarini F., Thompson S. Programmering i Erlang = Erlang Programmering. - M. : DMK Press, 2012. - S. 200. - 488 s. - ISBN 978-5-94074-617-1 .
  4. Skærmbillede af Smalltalk-80 Arkiveret 19. april 2003.
  5. Cincom Smalltalk-websted Arkiveret 27. august 2008 på Wayback Machine , Wiki Arkiveret 2006-10-10 . , Cincom Smalltalk Blog Arkiveret 13. januar 2005 på Wayback Machine
  6. Pharo Smalltalk hjemmeside . Hentet 19. maj 2022. Arkiveret fra originalen 11. maj 2020.
  7. net.net - En af internettets premiereadresser  (utilgængeligt link)
  8. IBM - VisualAge Smalltalk - Produktoversigt . Hentet 10. januar 2005. Arkiveret fra originalen 8. april 2002.
  9. Smalltalk/X - en objektorienteret IDE . Hentet 18. februar 2018. Arkiveret fra originalen 13. april 2022.
  10. GNU Smalltalk | Smalltalken for dem, der kan skrive . Hentet 1. oktober 2007. Arkiveret fra originalen 1. marts 2020.
  11. Objekt Connect Home . Hentet 10. januar 2005. Arkiveret fra originalen 26. februar 2021.
  12. LSW Vision-Smalltalk 2008 . Hentet 10. januar 2005. Arkiveret fra originalen 9. januar 2005.
  13. Ambrai Smalltalk . Hentet 11. april 2005. Arkiveret fra originalen 5. april 2005.
  14. Sitio Web de Guillermo Adrián Molina . Hentet 6. maj 2008. Arkiveret fra originalen 18. maj 2008.

Litteratur

  • Robert W. Sebesta. 2.15. Objektorienteret programmering: Smalltalk-sprog // grundlæggende begreber for programmeringssprog = begreber for programmeringssprog / Pr. fra engelsk. - 5. udg. - M .: Williams , 2001. - S.  109 -112. — 672 s. - 5000 eksemplarer.  — ISBN 5-8459-0192-8 (russisk), ISBN 0-201-75295-6 (engelsk).
  • Yu. A. Kiryutenko, V. A. Saveliev. Objektorienteret programmering. Smalltalk-sproget . - M . : Vuzovskaya bog, 2007. - 328 s. — ISBN 5-9502-0097-7 . Arkiveret 4. marts 2016 på Wayback Machine
  • Specialudgave om Smalltalk  // BYTE  :  magazine. - McGraw-Hill, 1981. - August ( vol. 6 , nr. 8 ). Arkiveret fra originalen den 7. maj 2016.

Links