Småprat

Småprat
Alan Kay , Adele Goldberg , Daniel Henry Holmes Ingalls, Jr. og Diana Merry
Generell informasjon
Paradigme objekt orientert
Dukket opp i Utbygging startet i 1969. Offentlig tilgjengelig i 1980
Designet av Alan Kay
type system dynamisk
implementeringer flere
påvirket av Simulerer , Sketchpad , LISP
har påvirket Objective-C , Java , Self , Python , Ruby , AppleScript

Smalltalk er et reflekterende , objektorientert , dynamisk skrevet programmeringsspråk . På grunn av egenskapene kan Smalltalk også betraktes som et miljø av objekter, der til og med selve systemet er et objekt . Metaforisk kan en Smalltalk betraktes som en virtuell verden der objekter lever og kommuniserer med hverandre ved å sende meldinger .

Et Smalltalk-system består av:

Smalltalk ble rangert som nummer to for "mest elskede programmeringsspråk" i Stack Overflows utviklerundersøkelser i 2017. [ 1 ]

Historikk

Smalltalks opprinnelse ligger i forskningen utført av Alan Kay , Dan Ingalls , Ted Kaehler , Adele Goldberg og andre i løpet av 1970-årene ved Xerox Palo Alto Research Center ( kjent som Xerox PARC ), og skapte et utdanningsorientert datasystem. Målet var å lage et system som ville utvide kreativiteten til brukerne, og gi et miljø for eksperimentering, skapelse og forskning.

Terminologi

Et Smalltalk-program består kun av objekter, et konsept som brukes universelt innenfor ethvert Smalltalk-system. Så å si alt fra et naturlig tall som 4 til en webserver er et objekt. Smalltalk-objekter har felles egenskaper:

Objekter kommuniserer med hverandre ved å sende meldinger . Et objekt kan også gi mange operasjoner (for øyeblikket bestemmes dette av hver implementering).

Definisjonene av disse operasjonene på objekter kalles metoder . En metode spesifiserer reaksjonen til et objekt når det mottar en melding som er adressert til den metoden. Oppløsningen, i bindende forstand, av et budskap til en metode er dynamisk. Hele samlingen av metoder for et objekt kalles objektets meldingsprotokoll eller meldingsgrensesnitt . Meldingene kan parameteriseres, disse parameterne vil være objekter, og resultatet eller responsen på det vil også være et objekt.

De vanlige egenskapene til objekter fanges opp under begrepet klasse , på en slik måte at objektene som er gruppert under en klasse kalles forekomster av den. Forekomster opprettes under kjøringen av et program for et eller annet formål og blir automatisk tømt når de ikke lenger er nødvendig av søppelsamleren. Bortsett fra noen spesielle objekter som de veldig enkle som kalles bokstaver (tall, strenger, osv.), har hvert objekt sin egen lokale stat og representerer en annen forekomst av sin klasse.

Funksjoner

Smalltalk regnes som det første av de objektorienterte språkene , selv om det første som faktisk implementerte objektorientert programmering var Simula . I Smalltalk er alt et objekt, inkludert reelle tall eller selve Smalltalk -miljøet .

Som språk har det følgende egenskaper:

Smalltalk har hatt stor innflytelse på andre språk som Java eller Ruby , og mange av utviklingspraksisene og verktøyene som for tiden kunngjøres av smidige metoder (refaktorering, inkrementell utvikling, testdrevet utvikling, etc.) har dukket opp fra miljøet.

Smalltalk-miljøet

Store Smalltalk-implementeringer ( VisualWorks , Squeak , VisualSmalltalk , VisualAge , Dolphin , Pharo Smalltalk, Smalltalk X) har et helt annet interaksjonsmiljø enn det typiske utviklingsmiljøet for andre teknologier som Microsoft Visual Studio .Net eller Eclipse . Smalltalk-miljøet er primært grafisk og fungerer som et kjøretidssystem som integrerer ulike programmeringsverktøy (Smalltalk) , multimedieverktøy , grensesnitt for utføring av ikke -Smalltalk -kode og operativsystemtjenester . [ 2 ] Disse mulighetene, som har påvirket arbeidsmetodikken og oppfatningen av programmering, oversettes til tendensen til å betrakte Smalltalk mer enn et enkelt programmeringsspråk . Måten å utvikle programvare på i Smalltalk består ikke av den typiske syklusen av tradisjonelle teknologier: Start en tekstredigerer , kompiler og kjør og fullfør applikasjonen. I Smalltalk blir selve miljøet manipulert, vanligvis gjennom systemnettleseren .

Syntaks

Tradisjonelt har ikke Smalltalk en eksplisitt notasjon for å beskrive et helt program. En eksplisitt syntaks brukes til å definere visse elementer i et program, for eksempel metoder, men måten slike elementer er strukturert i et helt program, er generelt definert av de flere implementeringene . Standarden i seg selv fremmer ingen annen retning, så den definerer en abstrakt Smalltalk-programsyntaks, som definerer alle elementene som utgjør et Smalltalk-program og hvordan disse elementene er logisk sammensatt av andre elementer, men hver implementering er fri til å definere og bruke mange mulige syntakser som samsvarer med standard abstrakt syntaks. Et eksempel på en konkret syntaks er Smalltalk Interchange Format (eller SIF, for Smalltalk Interchange Format) definert i samme standard.

Smalltalk-80-syntaksen har en tendens til å være minimalistisk. Dette betyr at det er et lite sett med reserverte ord og erklæringer sammenlignet med de fleste populære språk. Smalltalk har et sett med 6 reserverte ord: self , super , nil , true , usant og thisContext .

Søppelinnsamling

Smalltalk trenger ikke eksplisitt å kaste ut objekter, så det gir ingen mekanisme for det. Implementeringer bruker søppeloppsamlingsteknikker for å oppdage og gjenvinne minneplass knyttet til objekter som ikke lenger vil bli brukt av systemet. I Smalltalk er søppelinnsamling innebygd konfigurerbar . Formen for utførelse av søppelsamleren er i bakgrunnen , det vil si som en ikke-interaktiv lavprioritet prosess, selv om det i noen implementeringer er mulig å utføre den på forespørsel, idet det er mulig å definere spesielle minnekonfigurasjoner for hvert system gjennom policyer (for eksempel i VisualWorks ). Hyppigheten og egenskapene til samlingen avhenger av teknikken som brukes av implementeringen. I tillegg gir noen implementeringer av Smalltalk støtte for fullføringsmekanismer som bruk av ephemerons .

Beregningsrefleksjon

Smalltalk-80 gir beregningsmessig og strukturell refleksjon, siden det er et selvimplementert system. Strukturell refleksjon manifesterer seg ved at klassene og metodene som systemet definerer også i seg selv er objekter og er en del av selve systemet. De fleste implementeringer av Smalltalk har en tendens til å eksponere Smalltalk-kompilatoren for programmeringsmiljøet, slik at (ordrett) kildekode kan kompileres inn i systemet , transformere den til metodeobjekter, som ofte er forekomster av CompiledMethod -klassen . Systemet bygger vanligvis inn disse metodene i klasser, og lagrer dem i metodeordboken til klassen du vil legge til atferden som metoden utfører. Dette, i tillegg til å legge til nye klasser til systemet, gjøres i selve systemet; selv om de fleste av implementeringene har visuelle verktøy som skjuler kompleksiteten ved å samhandle med klassen som vanligvis tar seg av slike oppgaver, ClassBuilder .

Den beregningsmessige refleksjonen til Smalltalk-80 manifesteres i muligheten for å observere beregningstilstanden til systemet. På språk avledet fra den originale Smalltalk-80, under sending av meldinger mellom objekter, konsulterer hvert mottakende objekt i en melding sin klasse for å få tilgang til metodene den definerer. Hvis metoden finnes i klassen, sies metoden å være "aktivert". Denne aktiveringen av en metode som kjøres for øyeblikket er tilgjengelig via et nøkkelord kalt thisContext . Ved å sende meldinger til denne konteksten kan du stille spørsmål som "hvem sendte meg denne meldingen?". Disse fasilitetene gjør det mulig å implementere Prolog - stil koroutiner , fortsettelser eller back-tracking uten å måtte endre den virtuelle maskinen . En av de mest interessante bruksområdene for denne funksjonen er i Avi Bryants Seaside - nettrammeverk .

Smalltalk eksempler

I Smalltalk er alt et objekt, og meldinger sendes til et objekt. For eksempel:

1 + 1

Det betyr at til objektet "1" sender vi meldingen "+" med den eksterne samarbeidspartneren, et annet objekt, "1". Dette eksemplet resulterer da i objektet "2".

Transkripsjonsshow : 'Hei, verden!'

I den typiske Hello World er objektet en transkripsjon, som mottar showmeldingen med den eksterne bidragsyteren 'Hello World!'.

For å lage en forekomst av et objekt, send bare en ny melding til en klasse:

ObjectClass ny

Slik henter du vokalene fra en tekststreng:

'Dette er en tekst' velg: [ : aTegn | et tegn erVokal ] .

Bibliografi

Referanser

  1. Stack Overflow Developer Survey 2017
  2. Konsepter for programmeringsspråk. Sebesta, Robert (Addison-Wesley, 1996 3. utgave)

Eksterne lenker