Csevej

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2015. augusztus 18-án felülvizsgált verziótól ; az ellenőrzések 43 szerkesztést igényelnek .
Csevej
Szemantika objektum orientált
Nyelvóra programozási nyelv
Megjelent A fejlesztés 1969-ben indult, általános használatra 1980-ban vált elérhetővé
Szerző Alan Kaye , Adele Goldberg , Dan Ingalls, Xerox PARC
Fejlesztő Kaye, Alan Curtis , Adele Goldberg [1] , Daniel Henry Holmes Ingalls [d] és Diana Merry [d]
Kiadás Smalltalk-80 2-es verzió
Teszt verzió 1980  ( 1980 )
Típusrendszer dinamikus
Főbb megvalósítások Pharo , Squeak , VisualWorks , GNU Smalltalk
Befolyásolva Simul , Sketchpad , Lisp , Logo
befolyásolta Objective-C , AppleScript , C# , Dylan , Groovy , Io , Java , Lisaac , NewtonScript , Python , Ruby , Scala , Self , C++

A Smalltalk ( [ˈsmɔːltɔːk] ) egy dinamikusan tipizált objektum-orientált programozási nyelv , amely az üzenetküldés ötletén alapul , amelyet Alan Kay , Dan Ingalls , Ted Kagler , Adele Goldberg és mások fejlesztettek ki a Xerox PARC -nál az 1970 -es években . Ez egy integrált fejlesztői és végrehajtási környezet, amelynek objektumai önmagán keresztül módosíthatók, és programozás, amelyben végső soron saját viselkedése módosítható. A nyelvet Smalltalk-80 néven vezették be.

A Smalltalk a Simula nyelven [2] alapuló számos objektum-orientált nyelv egyike , amely maga is nagy hatással volt az olyan objektum-orientált nyelvek fejlődésére, mint: Objective-C , Actor , Java , Erlang [ 3] , Groovy , Ruby és még sokan mások. Az 1980 -as és 1990 -es évek programozási ötletei közül sok a Smalltalk közösségből származik. Ezek közé tartozik az átalakítás , a tervezési minták (a szoftverre alkalmazva), az osztály-felelősség-interakciós térképek és általában az extrém programozás . A wiki koncepció alapítója, Ward Cunningham szintén a Smalltalk közösség tagja.

Fő ötletek

A Smalltalk fő gondolatai a következők:

A Smalltalk más modern ötleteket is használ:

A Smalltalk egyik sajátossága, hogy még az olyan hagyományos konstrukciók sem, mint az if-then-else, for, while stb., nem részei a nyelvnek. Mindegyik a segítségével valósul meg . Például a döntés úgy történik, hogy üzenetet küld egy ifTrue:logikai objektumnak, és átadja a vezérlést egy szövegrészre, ha a logikai érték igaz.

Valójában kevés beépített szintaktikai konstrukció van a nyelvben:

és számos szintaktikai konstrukció literális objektumok és ideiglenes változók meghatározásához.

A Smalltalk üzenetküldési mechanizmus analógja az Internet: minden objektumot elképzelhet webszerverként, amely válaszol a kérésekre. Ugyanakkor a szerver egyszerűen előre definiált választ adhat a kérésekre, például egy bizonyos útvonal mentén elhelyezkedő weboldalra; át tudja irányítani a kérés-üzenetet egy másik objektumra, az analóg egy proxy szerver; bizonyos szabályok szerint módosíthatja a kérést, az analóg az url átírási technika, és természetesen az üzenettel továbbított adatoknak megfelelő teljesen új oldalt is képezhet. Ha az objektum nem rendelkezik előre meghatározott metódussal az üzenetre válaszolni, a keretrendszer meghívja a #doesNotUnderstand: metódust a vevőn, ahogy a webszerver hibaoldalt ad vissza, ha nem létező weboldal elérési utat ad meg.

A szintaktikai elemek rövid áttekintése:

Külön karakterpár |veszi körül az ideiglenes változónevek listáját. Üzenet továbbításakor a karakter :az üzenet neve vagy argumentuma mögé kerül, a vele együtt továbbított érték elé, valamint a karakterek [és ]korlátozzák a parancsblokkot, vagy inkább az anonim függvény szó szerintijét. Kezdetben azonban a göndör fogszabályzóval analógnak tekinthetők {a }C-szerű nyelvekben is. Egy ilyen névtelen függvény elején egy karakterig |felsorolhatja a szükséges argumentumokat. Ennek eredménye lesz az utolsó kiértékelt kifejezés. Egy szimbólum .egyetlen parancsot zár le, egy szimbólum ; elválasztja azokat az üzeneteket, amelyeket egymás után kell továbbítani ugyanahhoz az objektumhoz. A karakterpár :=egy olyan változóhoz való hozzárendelést jelöli, amelynek a neve előtte található, egy szó szerinti objektumhoz vagy egy utána elhelyezkedő üzenetválasz objektumhoz.

A következő példa, amely a magánhangzók keresését mutatja be egy karakterláncban, a Smalltalk stílust illusztrálja.

| aString magánhangzók | aString := 'Ez egy karakterlánc' . magánhangzók := aString select: [ : aKarakter | aCharacter isVowel ] .

A példa utolsó sorában üzenetet küldünk a string objektumnak select:egy argumentummal - egy névtelen kódblokk, amely egy argumentumot vesz fel, és azt adja vissza, amit az ezzel az argumentummal átadott objektum isVowel eseménykezelője ad vissza. A select üzenet feldolgozása során select:az osztályból Collection(annak az osztálynak az egyik őse, Stringamelyhez a példa második sorában szereplő string literál által létrehozott objektum tartozik) metódus hívódik meg. Ennek a módszernek a szövege az alábbiakban látható:

kiválasztás: blokk | újGyűjtemény | newCollection := saját faj új . saját do: [ : mindegyik | ( aBlock érték: mindegyik ) ifTrue: [ newCollection add: every ]] . ^ új gyűjtemény

Bemenetként veszi az aBlock névtelen függvényt, létrehoz egy magához hasonló új gyűjteményt, és elemeit felsorolásnak hívja (ez a metódus do:), végrehajtva a neki átadott blokkot aBlockminden elemnél; a blokk végrehajtásakor (a - példában aCharacter isVowel) logikai értéket hoz létre, amelyre az üzenetet elküldi ifTrue:. Ha ez az érték true, akkor a betű hozzáadódik a visszaadott karakterlánchoz. A végén a létrehozott gyűjtemény az üzenetre adott válaszként kerül visszaadásra, amelyet a válaszként való visszatérés szimbólum jelez ^. Mivel select:egy absztrakt osztályban van definiálva Collection, így is használhatjuk:

| téglalapok aPoint | téglalapok := RendezettGyűjtemény : ( Téglalap balra: 0 jobbra: 10 felül: 100 alul: 200 ) with: ( Balra téglalap : 10 jobbra: 10 felül: 110 alul: 210 ) . aPoint := Pont x: 20 y: 20 . ütközések := téglalapok kiválasztása: [ : aRect | aRect includePoint : aPoint ] .

Történelem

A Smalltalkot egy kutatócsoport hozta létre Alan Kay vezetésével a Xerox PARC Kutatóközpontban . Az első, Smalltalk-71 néven ismert implementáció néhány hónapon belül megszületett annak a vita eredményeként, hogy a Simula üzenetküldési ötletén alapuló programozási nyelvet egy "kódoldalon" kell megvalósítani. A kutatási munkához ténylegesen használt későbbi verziót ma Smalltalk-72 néven ismerik. Szintaxisa és végrehajtási modellje nagyon különbözött a modern Smalltalktól, olyannyira, hogy más nyelvnek kell tekinteni.

Jelentős átdolgozások után, amelyek a végrehajtási szemantika több szempontját is javították a hatékonyság érdekében, létrehozták a Smalltalk-76 néven ismert verziót. Ez a verzió az öröklődést, a Smalltalk-80-hoz közelebb álló szintaxist és egy olyan fejlesztői környezetet ad, amely tartalmazza a mai Smalltalk fejlesztők számára ismert eszközök többségét.

Metaosztályokat adtak hozzá a Smalltalk-80-hoz, így igazzá tették a "minden egy objektum" kifejezést azáltal, hogy tulajdonságokat és viselkedéseket társítottak az egyes osztályokhoz (például támogatva a példányosítás különböző módjait). A Smalltalk-80 volt az első verzió, amely a PARC-on kívül volt elérhető – először Smalltalk-80 Version 1 néven, amelyet kis számú vállalatnak és egyetemnek terjesztettek ki "szakértői értékelés" céljából. Később, 1983-ban megjelent a Smalltalk-80 2. verziójaként ismert nyilvános implementáció képként (objektumokat tartalmazó platformfüggetlen fájl) és virtuális gép specifikációként.

Jelenleg a Smalltalk két implementációja létezik, amelyek a Smalltalk-80 közvetlen leszármazottai, a Squeak és a VisualWorks . [4] A Smalltalk-80 2-es verziójú lemezképe Hobbes-on, egy VisualWorks rendszeren megvalósított ST-80 virtuális gépen fut.

"Helló Világ!"

Egy egyszerű példa

Átiratműsor : 'Hello, world!'

Ez a példa a Smalltalk két oldalát mutatja be.

Először is, üzenet küldése: a Smalltalk-ban minden művelet az objektumok üzeneteinek küldésével történik. Ebben az esetben az üzenet show: 'Hello, world!', és elküldésre kerül az objektumnak Transcript. Az üzenet feldolgozásához a Transcript metódust hívják show:meg, amelynek meg kell vizsgálnia az argumentumát (a "Hello, world!" karakterláncot), és le kell képeznie az argumentumot az átirathoz (vegye figyelembe, hogy az eredmény megtekintéséhez meg kell nyitnia egy Átirat ablakot ).

Másodszor, ez a példa bemutatja a Smalltalk üzenetküldésének alapvető szintaxisát: <üzenet címzettje> <szóköz> <üzenet>. A C++ -tól eltérően a vevő után nincsenek pontok, és nincsenek zárójelek az argumentumok körül.

Egy példaobjektum

Osztálydefiníció Objektum alosztály: #MessagePublisher instanceVariableNames: '' classVariableNames: '' poolSzótárak: '' kategória: 'Smalltalk példák'

Ez egy egyszerű osztálydefiníció névvel és kategóriadefinícióval. A fejlesztői környezet általában egy csonkot biztosít a példa szövegének nagy részével.

Módszer meghatározása közzéteszi az átiratot : 'Hello, world!'

Ez a definíciója a metódusnak publish. A módszer törzse ugyanaz, mint az egyszerű példában.

Módszerhívás MessagePublisher új közzététel

Ebben a példában az osztály MessagePublisher( MessagePublisher new) példánya jön létre, majd üzenetet küld neki publish. Vegye figyelembe, hogy a nyelvi kulcsszó nem használható objektum létrehozására (mint a C++, Java, C#), hanem egy normál üzenetet küld newa MessagePublisher. Az objektum létrehozásához szükséges üzeneteket néha felülírják. Például egy absztrakt osztály úgy válaszolhat, hogy newvisszaadja valamelyik konkrét alosztályának egy példányát.

Megvalósítások

Jegyzetek

  1. 1 2 https://www.cs.umd.edu/hcil/muiseum/goldberg/goldberg_page.htm
  2. A Simula nyelv is objektum-orientált volt, megelőzte és befolyást gyakorolt ​​a Smalltalk nyelvre, de modellező nyelv volt, nem általános célú nyelv.
  3. Cesarini F., Thompson S. Programozás Erlang nyelven = Erlang Programozás. - M. : DMK Press, 2012. - S. 200. - 488 p. - ISBN 978-5-94074-617-1 .
  4. Smalltalk-80 képernyőkép Archiválva : 2003. április 19.
  5. Cincom Smalltalk webhely Archivált : 2008. augusztus 27., a Wayback Machine , Wiki Archíválva : 2006.10.10 . , Cincom Smalltalk Blog archiválva : 2005. január 13. a Wayback Machine -nél
  6. Pharo Smalltalk webhely . Letöltve: 2022. május 19. Az eredetiből archiválva : 2020. május 11.
  7. net.net – Az internet egyik premier címe  (nem elérhető link)
  8. IBM - VisualAge Smalltalk - Termék áttekintése . Letöltve: 2005. január 10. Az eredetiből archiválva : 2002. április 8..
  9. Smalltalk/X – objektum-orientált IDE . Letöltve: 2018. február 18. Az eredetiből archiválva : 2022. április 13.
  10. GNU Smalltalk | A Smalltalk azoknak, akik tudnak gépelni . Letöltve: 2007. október 1. Az eredetiből archiválva : 2020. március 1.
  11. Object Connect Home . Letöltve: 2005. január 10. Az eredetiből archiválva : 2021. február 26..
  12. LSW Vision-Smalltalk 2008 . Letöltve: 2005. január 10. Az eredetiből archiválva : 2005. január 9..
  13. Ambrai Smalltalk . Letöltve: 2005. április 11. Az eredetiből archiválva : 2005. április 5..
  14. Sitio Web de Guillermo Adrián Molina . Letöltve: 2008. május 6 .. Archiválva az eredetiből: 2008. május 18..

Irodalom

Linkek