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 |
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 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á kolekceVezme 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 ] .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.
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ů.
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í MessagePublisherV 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.
Slovníky a encyklopedie | |
---|---|
V bibliografických katalozích |
Programovací jazyky | |
---|---|
|
Objektově orientované jazyky | |
---|---|
Sestaven | |
Naskriptováno |
|
Obě představení |