Rupattelu | |
---|---|
Semantiikka | oliosuuntautunut |
Kieliluokka | ohjelmointikieli |
Esiintyi | Kehitys aloitettiin vuonna 1969, yleiseen käyttöön tuli vuonna 1980 |
Tekijä | Alan Kaye , Adele Goldberg , Dan Ingalls, Xerox PARC |
Kehittäjä | Kaye, Alan Curtis , Adele Goldberg [1] , Daniel Henry Holmes Ingalls [d] ja Diana Merry [d] |
Vapauta | Smalltalk-80 versio 2 |
Testiversio | 1980 |
Tyyppijärjestelmä | dynaaminen |
Tärkeimmät toteutukset | Pharo , Squeak , VisualWorks , GNU Smalltalk |
Vaikutettu | Simula , Sketchpad , Lisp , Logo |
vaikutti | Objective-C , AppleScript , C# , Dylan , Groovy , Io , Java , Lisaac , NewtonScript , Python , Ruby , Scala , Self , C++ |
Smalltalk ( [ˈsmɔːltɔːk] ) on dynaamisesti kirjoitettu olio- ohjelmointikieli , joka perustuu viestien lähettämiseen ja jonka Xerox PARCissa kehittivät Alan Kay , Dan Ingalls , Ted Kagler , Adele Goldberg ja muut 1970-luvulla . Se on integroitu kehitys- ja suoritusympäristö, jonka objektit ovat muokattavissa itsensä kautta ja ohjelmointi, jossa viime kädessä rajoittuu oman käyttäytymisensä muokkaamiseen. Kieli esiteltiin nimellä Smalltalk-80.
Smalltalk on yksi monista Simula -kieleen perustuvista oliokielistä [2] , jolla on itsellään ollut suuri vaikutus tällaisten oliokielten kehitykseen, kuten: Objective-C , Actor , Java , Erlang [ 3] , Groovy , Ruby ja monet muut. Monet 1980- ja 1990 -luvun ohjelmointiideoista ovat peräisin Smalltalk-yhteisöstä. Näitä ovat muuntaminen , suunnittelumallit (ohjelmistoon sovellettuina), luokka-vastuu-vuorovaikutuskartat ja Extreme Programming yleensä. Wiki -konseptin perustaja Ward Cunningham on myös osa Smalltalk-yhteisöä.
Smalltalkin pääideat ovat:
Smalltalk käyttää myös muita moderneja ideoita:
Yksi Smalltalkin erityispiirteistä on, että edes sellaiset perinteiset konstruktit kuin jos-then-else, for, while jne. eivät ole osa kieltä. Kaikki ne on toteutettu käyttämällä . Esimerkiksi päätös tehdään lähettämällä viesti ifTrue:loogiseen objektiin ja siirretään hallinta tekstinpätkälle, jos looginen arvo on tosi.
Itse asiassa kielessä on vähän sisäänrakennettuja syntaktisia rakenteita:
ja useita syntaksirakenteita kirjaimellisten objektien ja väliaikaisten muuttujien määrittämiseen.
Smalltalk-viestintämekanismin analogia on Internet: voit kuvitella jokaisen objektin verkkopalvelimeksi, joka vastaa pyyntöihin. Samanaikaisesti palvelin voi yksinkertaisesti antaa ennalta määritellyn vastauksen pyyntöihin, esimerkiksi tietyn polun varrella sijaitsevan verkkosivun; voi ohjata pyyntöviestin toiseen objektiin, analoginen on välityspalvelin; voi muuttaa pyyntöä tiettyjen sääntöjen mukaan, analoginen on url-uudelleenkirjoitustekniikka, ja tietysti se voi muodostaa kokonaan uuden sivun, joka vastaa viestin mukana välitettyä dataa. Jos objektilla ei ole ennalta määritettyä menetelmää vastata viestiin, kehys kutsuu #doesNotUnderstand: -metodia vastaanottimessa, aivan kuten verkkopalvelin palauttaa virhesivun, jos verkkosivun polku on olematon.
Lyhyt katsaus syntaksielementteihin:
|Tilapäisten muuttujien nimien luetteloa ympäröi erillinen merkkipari . Viestiä lähetettäessä merkki :sijoitetaan viestin nimen tai sen argumentin perään, ennen sen kanssa lähetettyä arvoa ja merkit [ja ]rajoittavat komentolohkoa, tai pikemminkin nimettömän funktion kirjaimellista. Mutta aluksi niitä voidaan pitää analogisina kiharan hakasulkeiden {kanssa myös }C-kaltaisilla kielillä. Tällaisen nimettömän funktion alussa, merkkiin asti |, voit luetella sen vaatimat argumentit. Sen tulos on viimeinen arvioima lauseke. Symboli .päättää yksittäisen komennon, symboli ; erottaa viestit, jotka on lähetettävä peräkkäin samalle objektille. Merkkipari :=tarkoittaa osoitusta muuttujalle, jonka nimi sijaitsee ennen sitä, kirjaimellista objektia tai sen jälkeen sijaitsevaa viestivastausobjektia.
Seuraava esimerkki, joka näyttää vokaalien löytämisen merkkijonosta, havainnollistaa Smalltalk-tyyliä.
| aString vokaalit | aString := 'Tämä on merkkijono' . vokaalit := amerkkijono valitse: [ : aHahmo | aCharacter isVowel ] .Esimerkin viimeisellä rivillä viesti lähetetään merkkijono select:-oliolle argumentin kanssa - anonyymi koodilohko, joka ottaa yhden argumentin ja palauttaa sen, mitä tällä argumentilla välitetyn objektin isVowel-tapahtumakäsittelijä palauttaa. Selektiivisanomaa käsiteltäessä kutsutaan menetelmä select:luokasta Collection(yksi sen luokan esivanhemmista, Stringjohon esimerkin toisella rivillä oleva merkkijonoliteraalin luoma objekti kuuluu). Tämän menetelmän teksti näkyy alla:
valitse: lohko | uusi kokoelma | newCollection := oma laji uusi . itse tee: [ : kukin | ( aBlock value: every ) ifTrue : [ newCollection add: every ]] . ^ uusi kokoelmaSe ottaa anonyymin funktion aBlock syötteenä, luo uuden, itseään muistuttavan kokoelman ja kutsuu sen elementtejä numeraatioksi (tämä on menetelmä do:) ja suorittaa sille välitetyn lohkon aBlockkullekin elementille; kun lohko suoritetaan (esimerkissä - aCharacter isVowel), se luo loogisen arvon, johon viesti sitten lähetetään ifTrue:. Jos tämä arvo on true, kirjain lisätään palautettuun merkkijonoon. Lopussa luotu kokoelma palautetaan vastauksena viestiin, jonka ilmaisee paluu vastauksena -symbolilla ^. Koska se on select:määritelty abstraktissa luokassa Collection, voimme käyttää sitä myös näin:
| suorakulmiot aPoint | suorakulmiot := Tilattu Kokoelma : ( Suorakulmio vasen: 0 oikea: 10 ylhäällä: 100 alaosa: 200 ) kanssa: ( Suorakulmio vasen: 10 oikea: 10 ylhäällä: 110 alaosa: 210 ) . aPiste := Piste x: 20 v: 20 . törmäykset := suorakulmiot valitse: [ : aRect | aRect includePoint : aPoint ] .Smalltalkin loi Alan Kayn johtama tutkijaryhmä Xerox PARC Research Centerissä . Ensimmäinen toteutus, nimeltään Smalltalk-71, syntyi muutamassa kuukaudessa keskustelun tuloksena siitä, että Simulan viestien lähettämisen ideaan perustuva ohjelmointikieli tulisi toteuttaa "koodisivulla". Tutkimustyössä käytetty myöhempi versio tunnetaan nyt nimellä Smalltalk-72. Sen syntaksi ja suoritusmalli olivat hyvin erilaisia kuin nykyajan Smalltalk, niin paljon, että sitä on pidettävä eri kielenä.
Merkittävien muutosten jälkeen, jotka korjasivat useita suoritussemantiikan näkökohtia tehokkuuden vuoksi, luotiin Smalltalk-76-niminen versio. Tämä versio lisää perinnön, Smalltalk-80:tä läheisemmän syntaksin ja kehitysympäristön, joka sisältää useimmat nykypäivän Smalltalk-kehittäjille tutut työkalut.
Metaluokat lisättiin Smalltalk-80:een, mikä teki lauseesta "kaikki on objekti" totta yhdistämällä ominaisuuksia ja käyttäytymistä yksittäisiin luokkiin (esimerkiksi tukemalla erilaisia ilmentämistapoja). Smalltalk-80 oli ensimmäinen versio, joka oli saatavilla PARCin ulkopuolella – ensin Smalltalk-80 Version 1, joka jaettiin pienelle määrälle yrityksiä ja yliopistoja "vertaisarviointia varten". Myöhemmin, vuonna 1983, julkinen toteutus, joka tunnettiin nimellä Smalltalk-80 Version 2, julkaistiin kuvana (alustasta riippumaton tiedosto, joka sisältää objekteja) ja virtuaalikoneen määrittelynä.
Tällä hetkellä Smalltalkilla on kaksi toteutusta, jotka ovat Smalltalk-80:n suoria jälkeläisiä, Squeak ja VisualWorks . [4] Smalltalk-80 version 2 -näköistiedosto on käynnissä Hobbesissa, ST-80-virtuaalikoneessa, joka on toteutettu VisualWorksissä.
Tämä esimerkki näyttää Smalltalkin kaksi puolta.
Ensin viestin lähettäminen: Smalltalkissa kaikki toiminnot suoritetaan lähettämällä viestejä objekteille. Tässä tapauksessa viesti on show: 'Hello, world!', ja se lähetetään objektille Transcript. Tämän viestin käsittelemiseksi kutsutaan Transcript-menetelmää show:, jonka tulee tutkia argumenttinsa (merkkijono "Hei, maailma!") ja yhdistää tämä argumentti transkriptioon (huomaa, että sinulla on oltava Transcript -ikkuna , jotta näet tuloksen).
Toiseksi tämä esimerkki näyttää perussyntaksin viestin lähettämiselle Smalltalkissa: <viestin vastaanottaja> <välilyönti> <viesti>. Toisin kuin C++ , vastaanottimen jälkeen ei ole pisteitä eikä argumenttien ympärillä ole sulkeita.
Tämä on yksinkertainen luokkamääritelmä, jossa on nimi ja luokkamäärittely. Yleensä kehitysympäristö tarjoaa tynkä suurimman osan tämän esimerkin tekstistä.
Menetelmän määritelmä julkaise transkriptioesitys : 'Hei, maailma!'Tämä on menetelmän määritelmä publish. Menetelmän runko on sama kuin yksinkertaisessa esimerkissä.
Menetelmäkutsu MessagePublisher uusi julkaisuTässä esimerkissä luokalle MessagePublisher( MessagePublisher new) luodaan ilmentymä, jonka jälkeen sille lähetetään viesti publish. Huomaa, että kielen avainsanaa ei käytetä objektin luomiseen (kuten C++, Java, C#), vaan normaali viesti lähetetään osoitteeseen new. MessagePublisherObjektin luontiviestit ohitetaan joskus. Esimerkiksi abstrakti luokka voi vastata newpalauttamalla jonkin konkreettisista alaluokistaan esiintymän.
Sanakirjat ja tietosanakirjat | |
---|---|
Bibliografisissa luetteloissa |
Ohjelmointikielet | |
---|---|
|
Olio kielet | |
---|---|
Käännetty | |
Käsikirjoitettu |
|
Molemmat esitykset |