Pokec

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 18. srpna 2015; kontroly vyžadují 43 úprav .
Pokec
Sémantika objektově orientovaný
Jazyková třída programovací jazyk
Objevil se v Vývoj začal v roce 1969, pro všeobecné použití se stal dostupným v roce 1980
Autor Alan Kaye , Adele Goldberg , Dan Ingalls, Xerox PARC
Vývojář Kaye, Alan Curtis , Adele Goldberg [1] , Daniel Henry Holmes Ingalls [d] a Diana Merry [d]
Uvolnění Smalltalk-80 verze 2
Testovací verze 1980  ( 1980 )
Typový systém dynamický
Hlavní implementace Pharo , Squeak , VisualWorks , GNU Smalltalk
Byl ovlivněn Simula , Sketchpad , Lisp , Logo
ovlivnil Objective-C , AppleScript , C# , Dylan , Groovy , Io , Java , Lisaac , NewtonScript , Python , Ruby , Scala , Self , C++

Smalltalk ( [ˈsmɔːltɔːk] ) je dynamicky typovaný objektově orientovaný programovací jazyk založený na myšlence odesílání zpráv , který v Xerox PARC vyvinuli Alan Kay , Dan Ingalls , Ted Kagler , Adele Goldberg a další v 70. letech 20. století . Jedná se o integrované vývojové a spouštěcí prostředí, jehož objekty jsou k dispozici pro modifikace samo o sobě a programování, ve kterém nakonec dochází k modifikaci jeho vlastního chování. Jazyk byl představen jako Smalltalk-80.

Smalltalk je jeden z mnoha objektově orientovaných jazyků založených na jazyku Simula [2] , který sám o sobě měl velký vliv na vývoj takových objektově orientovaných jazyků jako: Objective-C , Actor , Java , Erlang [ 3] , Groovy , Ruby a mnoho dalších. Mnoho z 80. a 90. let 20. století vzniklo v komunitě Smalltalk. Patří mezi ně refaktoring , návrhové vzory (aplikované na software), mapy tříd-odpovědnost-interakce a extrémní programování obecně. Zakladatel konceptu wiki , Ward Cunningham , je také součástí komunity Smalltalk.

Hlavní myšlenky

Hlavní myšlenky Smalltalku jsou:

Smalltalk také používá další moderní nápady:

Jednou ze zvláštností Smalltalku je, že ani takové tradiční konstrukty jako if-then-else, for, while atd. nejsou součástí jazyka. Všechny jsou implementovány pomocí . Rozhodnutí je například učiněno odesláním zprávy do ifTrue:booleovského objektu a přenese řízení na část textu, pokud je logická hodnota pravdivá.

Ve skutečnosti je v jazyce několik vestavěných syntaktických konstrukcí:

a několik konstrukcí syntaxe pro definování doslovných objektů a dočasných proměnných.

Analogem mechanismu zasílání zpráv Smalltalk je internet: každý objekt si můžete představit jako webový server, který odpovídá na požadavky. Současně může server jednoduše vydat předem definovanou odpověď na požadavky, například na webovou stránku umístěnou podél určité cesty; může přesměrovat požadavek-zprávu na jiný objekt, analog je proxy server; může změnit požadavek podle určitých pravidel, analogem je technika přepisování url a samozřejmě může tvořit zcela novou stránku odpovídající datům přenášeným se zprávou. Pokud objekt nemá předdefinovanou metodu odpovědi na zprávu, framework zavolá na přijímači metodu #doesNotUnderstand:, stejně jako webový server vrátí chybovou stránku, pokud je zadána neexistující cesta k webové stránce.

Stručný přehled prvků syntaxe:

Samostatná dvojice znaků |obklopuje seznam názvů proměnných, které budou dočasné. Při přenosu zprávy se znak :umístí za název zprávy nebo její argument, před hodnotu s ní přenášenou a znaky [a ]omezí blok příkazů, nebo spíše doslovný znak anonymní funkce. Ale pro začátek mohou být vnímány jako analogie složených závorek {v }jazycích podobných C. Na začátku takové anonymní funkce, až do znaku |, můžete uvést argumenty, které vyžaduje. Jeho výsledkem bude poslední výraz, který vyhodnotil. Symbol .ukončuje jeden příkaz, symbol ; odděluje zprávy, které je třeba postupně přenášet do stejného objektu. Dvojice znaků :=označuje přiřazení k proměnné, jejíž název se nachází před ní, doslovný objekt nebo objekt odezvy na zprávu umístěný za ní.

Následující příklad, který ukazuje hledání samohlásek v řetězci, ilustruje styl Smalltalk.

| aString samohlásky | aString := 'Toto je řetězec' . samohlásky := aString vybrat: [ : aZnak | aCharacter isVowel ] .

V posledním řádku příkladu je do objektu typu string odeslána zpráva select:s argumentem – anonymním blokem kódu, který vezme jeden argument a vrátí to, co vrátí obsluha události isVowel objektu předaného s tímto argumentem. Při zpracování zprávy select je volána metoda select:ze třídy Collection(jeden z předků třídy String, do které patří objekt vytvořený řetězcovým literálem na druhém řádku příkladu). Text této metody je uveden níže:

vyberte: blok | nová kolekce | newCollection := vlastní druh nový . sám dělat: [ : každý | ( aBlock value: every ) ifTrue : [ newCollection add: every ]] . ^ nová kolekce

Vezme anonymní funkci aBlock jako vstup, vytvoří novou kolekci podobnou sobě samé a zavolá její prvky enumeration (toto je metoda ), přičemž pro každý prvek do:provede blok, který jí byl předán ; aBlockkdyž je blok vykonán (v příkladu - aCharacter isVowel), vytvoří booleovskou hodnotu, na kterou je pak odeslána zpráva ifTrue:. Pokud je tato hodnota true, pak se písmeno přidá k vrácenému řetězci. Na konci je vytvořená kolekce vrácena jako odpověď na zprávu, označená návratem jako symbolem odpovědi ^. Protože je select:definována v abstraktní třídě Collection, můžeme ji také použít takto:

| obdélníky bod | obdélníky := OrderedCollection with: ( Obdélník vlevo: 0 vpravo: 10 nahoře: 100 dole: 200 ) with: ( Obdélník vlevo: 10 vpravo: 10 nahoře: 110 dole: 210 ) . aBod := Bod x: 20 y: 20 . kolize := obdélníky vyberte: [ : aRect | aRect obsahujePoint: aPoint ] .

Historie

Smalltalk vytvořila skupina výzkumníků vedená Alanem Kayem ve výzkumném středisku Xerox PARC . První implementace, známá jako Smalltalk-71, byla vytvořena během několika měsíců jako výsledek debaty o tom, že programovací jazyk založený na myšlence Simula o odesílání zpráv by měl být implementován do „stránky kódu“. Pozdější verze skutečně používaná pro výzkumnou práci je nyní známá jako Smalltalk-72. Jeho syntaxe a model provedení se velmi lišily od moderního Smalltalku, a to natolik, že musí být považován za odlišný jazyk.

Po významných revizích, které opravily několik aspektů sémantiky provádění pro efektivitu, byla vytvořena verze známá jako Smalltalk-76. Tato verze přidává dědičnost, syntaxi blížící se Smalltalku-80 a vývojové prostředí, které zahrnuje většinu nástrojů známých dnešním vývojářům Smalltalku.

Ve Smalltalk-80 byly přidány metatřídy, díky nimž byla fráze „všechno je objekt“ pravdivá tím, že sdružovala vlastnosti a chování s jednotlivými třídami (například podporou různých způsobů vytváření instance). Smalltalk-80 byla první verze dostupná mimo PARC – nejprve jako Smalltalk-80 verze 1, distribuovaná malému počtu společností a univerzit pro „peer review“. Později, v roce 1983, byla vydána veřejná implementace známá jako Smalltalk-80 verze 2 jako obrázek (soubor nezávislý na platformě obsahující objekty) a specifikace virtuálního stroje.

V současné době existují dvě implementace Smalltalk, které jsou přímými potomky Smalltalk-80, Squeak a VisualWorks . [4] Obraz Smalltalk-80 verze 2 běží na Hobbes, virtuálním stroji ST-80 implementovaném na VisualWorks.

"Ahoj světe!"

Jednoduchý příklad

Přepis pořadu: 'Ahoj, světe!'

Tento příklad ukazuje dvě strany Smalltalku.

Za prvé, odeslání zprávy: ve Smalltalku se všechny akce provádějí odesíláním zpráv objektům. V tomto případě je zpráva show: 'Hello, world!'a je odeslána objektu Transcript. Pro zpracování této zprávy se zavolá metoda Přepis , která by měla prozkoumat její argument (řetězec 'Ahoj, světe!') a namapovat tento argument na přepis (všimněte si, že pro zobrazení výsledku show:musíte mít otevřené okno Přepis ).

Za druhé, tento příklad ukazuje základní syntaxi pro odeslání zprávy ve Smalltalku: <příjemce zprávy> <mezera> <zpráva>. Na rozdíl od C++ nejsou za přijímačem žádné tečky a žádné závorky kolem argumentů.

Příklad objektu

Definice třídy Podtřída objektu : #MessagePublisher instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' kategorie: 'Smalltalk Příklady'

Toto je jednoduchá definice třídy s názvem a definicí kategorie. Vývojové prostředí obvykle poskytuje útržek s většinou textu pro tento příklad.

Definice metody zveřejnit Přepis show: 'Ahoj, světe!'

Toto je definice metody s názvem publish. Tělo metody je stejné jako v jednoduchém příkladu.

Volání metody Nové publikování MessagePublisher

V tomto příkladu je vytvořena instance třídy MessagePublisher( MessagePublisher new) a poté je do ní odeslána zpráva publish. Všimněte si, že klíčové slovo jazyk se nepoužívá k vytvoření objektu (jako v C++, Java, C#), ale normální zpráva je odeslána newdo MessagePublisher. Zprávy pro vytvoření objektu jsou někdy přepsány. Například abstraktní třída může reagovat newvrácením instance jedné ze svých konkrétních podtříd.

Implementace

Poznámky

  1. 1 2 https://www.cs.umd.edu/hcil/muiseum/goldberg/goldberg_page.htm
  2. Jazyk Simula byl také objektově orientovaný a předcházel mu a byl rozpoznán jako vliv na jazyk Smalltalk, ale byl to modelovací jazyk, nikoli jazyk pro všeobecné použití.
  3. Cesarini F., Thompson S. Programování v Erlangu = Erlang Programming. - M. : DMK Press, 2012. - S. 200. - 488 s. - ISBN 978-5-94074-617-1 .
  4. Snímek obrazovky Smalltalk-80 Archivováno 19. dubna 2003.
  5. Webová stránka Cincom Smalltalk Archivováno 27. srpna 2008 na Wayback Machine , Wiki Archivováno 2006-10-10 . , Cincom Smalltalk Blog Archivováno 13. ledna 2005 na Wayback Machine
  6. Web Pharo Smalltalk . Získáno 19. května 2022. Archivováno z originálu dne 11. května 2020.
  7. net.net - Jedna z premiérových adres internetu  (nedostupný odkaz)
  8. IBM - VisualAge Smalltalk - Přehled produktu . Získáno 10. ledna 2005. Archivováno z originálu 8. dubna 2002.
  9. Smalltalk/X - objektově orientované IDE . Získáno 18. února 2018. Archivováno z originálu 13. dubna 2022.
  10. GNU Smalltalk | Smalltalk pro ty, kteří umí psát . Získáno 1. října 2007. Archivováno z originálu dne 1. března 2020.
  11. Object Connect Home . Získáno 10. ledna 2005. Archivováno z originálu 26. února 2021.
  12. LSW Vision-Smalltalk 2008 . Získáno 10. ledna 2005. Archivováno z originálu 9. ledna 2005.
  13. Ambrai Smalltalk . Získáno 11. dubna 2005. Archivováno z originálu 5. dubna 2005.
  14. Webová stránka Guillermo Adrián Molina . Získáno 6. května 2008. Archivováno z originálu 18. května 2008.

Literatura

Odkazy