Småsnak | |
Dato for første version | Udviklingen startede i 1969 , offentligt tilgængelig i 1980 |
---|---|
Paradigmer | Objekt |
Forfatter | Alan Kay , Dan Ingals , Ted Kaehler, Adele Goldberg |
Udviklere | Xerox PARC |
Sidste version | ANSI Smalltalk |
Indtastning | dynamisk |
Påvirket af | Lisp , Simula |
Påvirket | Objective-C , Self , Oak , Java , Dylan , AppleScript , NewtonScript , Python , Ruby , Scala , Perl 6 , Scratch |
Implementeringer | Squeak , GNU Smalltalk , VisualWorks , Pharo |
Operativ system | Tværplatform |
Smalltalk er et objektorienteret , reflekterende og dynamisk skrevet programmeringssprog . Det var et af de første programmeringssprog, der havde etfuldt grafisk integreret udviklingsmiljø . Det blev etableret i 1972 . Det er inspireret af sprogene Lisp og Simula . Det blev designet af Alan Kay , Dan Ingals , Ted Kaehler , Adele Goldberg ved Palo Alto Research Center i Xerox . Sproget blev formaliseret som Smalltalk-80 og er siden blevet brugt af et stort antal mennesker. Smalltalk er stadig aktivt udviklet.
Smalltalk var en stor indflydelse på udviklingen af mange programmeringssprog, herunder: Objective-C , Actor (in) , Java og Ruby .
Mange af innovationer inden for software engineering fra 1990'erne kom fra Smalltalk programmeringssamfundet, såsom designmønstre (anvendt på software), ekstrem programmering (XP) og refactoring . Ward Cunningham , opfinderen af wiki- konceptet , er også en Smalltalk-programmør.
Der er et stort antal variationer af Smalltalk, som det ofte er tilfældet med programmeringssprog. Uden yderligere adjektiv bruges ordet Smalltalk ofte til at henvise til Smalltalk-80, den første version, der blev frigivet til offentligheden i 1980.
Smalltalk er produktet af en gruppe forskere ledet af Alan Kay ved Xerox's Palo Alto Research Center (PARC) ; Alan Kay designede de første versioner af Smalltalk, som blev implementeret af Dan Ingalls . Den første version, der hedder Smalltalk-71, blev oprettet om nogle få morgener på væddemål om, at et programmeringssprog baseret på ideen om at sende meddelelser inspireret af Simula kunne realiseres i "en kodeside".
De vigtigste begreber i Smalltalk er:
Smalltalk implementerer ud over de vigtigste grundlæggende objekter ( klasse , objekt , arv , polymorfisme ) originale koncepter ( metaklasse ) og introducerer forestillingen om vedvarende objekt, undtagelseshåndtering og model-view-controller- princippet .
Et overraskende træk ved Smalltalk er det totale fravær af integrerede kontrol instruktioner til sproget: if- then- else, for, whileetc. Alle disse instruktioner er implementeret ved hjælp af objekter. For eksempel træffes beslutninger ved at sende en besked ifTruetil et boolsk objekt og videregive et stykke kode, der skal udføres, hvis det boolske er sandt. Det eneste aspekt, der er indbygget som standard, er syntaksen til afsendelse af en besked til et objekt.
Følgende eksempel illustrerer Smalltalk-programmeringsstilen. Hvis du kører denne kode, finder vokalerne i en streng. Variablerne er deklareret mellem to lodrette søjler | ... |, :erklær parametrene:
| aString vowels | aString := 'This is a string'. vowels := aString select: [:aCharacter | aCharacter isVowel].I den sidste linje aStringmodtager strengen en besked select:med en kodeblok som et argument. Her er koden til den superklasse, Collectionder udfører jobbet:
Collection>>select: aBlock | newCollection | newCollection := self species new. self do: [:each | (aBlock value: each) ifTrue: [newCollection add: each]]. ^newCollectionDenne kode reagerer på meddelelsen ved at gentage gennem dens medlemmer (dette er metoden do:) ved at evaluere koden aBlockfor hvert tegn; aBlock( aCharacter isVowel) når den evalueres opretter en boolsk, som derefter sendes til ifTrue:. Hvis det boolske er sandt, tilføjes tegnet til den streng, der returneres. Som selectdefineret i den abstrakte klasse Collection, kunne vi også bruge det på denne måde:
| 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].