Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

Smalltalk

Z Wikipedie, otevřené encyklopedie
Smalltalk
Paradigmaobjektově orientovaný
AutorAlan Kay,Dan Ingalls,Adele Goldberg
VývojářAlan Kay,Dan Ingalls,Adele Goldberg,Ted Kaehler,Diana Merry,Scott Wallace,Peter Deutsch aXerox PARC
První vydání1972
Poslední verzeSmalltalk-80 version 2 (1980)
Typová kontrolasilná,dynamická
Hlavní implementaceAmber,Dolphin Smalltalk,GemStone/S,GNU Smalltalk,Pharo, Smalltalk/X,Squeak,VA Smalltalk,VisualWorks
Ovlivněn jazykyLisp,[1]Simula,[1]Euler,[1]IMP,[1]Planner,[1]Logo,[1]Sketchpad,[1]ARPAnet,[1]Burroughs B5000,[1]buňka[1]
Ovlivnil jazykyAppleScript,Common Lisp Object System,Dart,Dylan,Erlang,Etoys,Falcon,Go,Groovy,Io,Ioke,Java,Lasso,Lisaac,Logtalk,NewtonScript,Object REXX,Objective-C,PHP 5,Perl 6,Python,Ruby,Scala,Scratch,Self
OSmultiplatformní

Smalltalk (výslovnost[ˈsmɔ:ltɔ:k]IPA) jeinterpretovaný, dynamicky a striktně typovaný,čistě objektovýprogramovací jazyk, který v sedmdesátých letech20. století vyvinuli ve firměXerox PARCAlan Kay,Dan Ingalls,Ted Kaehler aAdele Goldberg. Inspiraci čerpali převážně z projektůSketchpad aSimula.

Přestože se nejedná o nejrozšířenější jazyk pro psaní podnikových aplikací či výuku, je dodnes hojně používán. Právě komunita kolem Smalltalku vyvinulaextrémní programování, systém testování programu SUnit (jeho známější verzeJUnit se hojně využívá v Javě),refaktoring anávrhové vzory.

Původní implementace jazyka měla velmi vysoké pořizovací náklady, což bránilo většímu rozšíření mezi amatéry. V současné době se stávají populární jehosvobodné implementace, např.Squeak, neboPharo.

Historie

[editovat |editovat zdroj]

Smalltalk vyvinula skupina výzkumníků kolemAlana Kaye ve výzkumném centruXerox Palo Alto Research Center. Alan Kay navrhl většinu raných verzí Smalltalku, Adele Goldberg napsala většinu dokumentace a Dan Ingalls většinu raných verzí implementoval. První verzi, známou jako Smalltalk-71, vytvořil Alan Kay během několika rán jako sázku, že programovací jazyk založený na myšlence zasílání zpráv, inspirovaném jazykem Simula, lze napsat na „jediné stráncekódu“. Pozdější variantu, která už byla skutečně využívána pro výzkum, dnes známe jako Smalltalk-72, avšak její syntaxe i způsob provádění byly stále velmi odlišné od verzí používaných dnes.

Smalltalk-80 byla první verze, která opustila PARC, nejprve jako Smalltalk-80 Version 1, ji dostali na přezkoumání a otestování některé vybrané společnosti (Hewlett-Packard,Apple Computer,Tektronix aDigital Equipment Corporation) a univerzity (Berkeley). Smalltalk-80 Version 2 už byla vydaná jako tzv.image soubor a specifikacevirtuálního stroje.

V současné době jsou velmi populární komerční VisualAge Smalltalk odIBM,svobodný softwareSqueak, který má velmi aktivní komunitu vývojářů, včetně mnohých vývojářů původního Smalltalku, a konečněpřekladač GNU Smalltalk odGNU, distribuovaný pod licencíGPL, jehož vývoj však poslední dobou stagnoval.

Objektově orientované programování

[editovat |editovat zdroj]

Všechny datové typy jsou Objekt (tak tomu není např. u jazykůJava neboC++, které navíc rozlišují primitivní typy), dokonce i blok kódu je objekt. Programátor může měnit chování jakékoli třídy objektů. Může dokonce zaměnit i hodnotytrue afalse, pokud to považuje za vhodné.

Objekt ve Smalltalku umí přesně tři věci:

  • Udržet stav (reference na další objekty)
  • Obdržet zprávu od jiného objektu nebo od sebe
  • V rámci zpracování přijaté zprávy může zaslat zprávu sobě nebo jinému objektu

Stav objektu je ostatním objektům skryt. Ostatní objekty se však na stav mohou dotazovat zasíláním zpráv.

Syntaxe

[editovat |editovat zdroj]

Syntaxe jazyka je velmi snadná. Smalltalk má jen těchto pět vyhrazených klíčových slov:true,false,nil,self asuper. Jediné vestavěné jazykové konstrukce jsou: zasílání zpráv, přiřazení proměnné, návrat hodnoty z metody a syntaxe literálů pro některé objekty. Vše ostatní, včetně řídicích struktur pro zpracovánípodmínek acyklů, je jimi tvořeno.

Následující příklady uvádějí nejpoužívanější objekty, které se ve Smalltalku mohou zapsat jako literál.

42-42123.451.2345e22r1001001016rA000

Poslední dva příklady jsou čísla vedvojkové ašestnáctkovéčíselné soustavě, kder značí základ soustavy (podle anglického slovaradix [ˈreidiks]). Samozřejmě jsou možné i jiné soustavy, například36rSMALLTALK je platný zápis čísla s hodnotou 80738163270632 (desítkově).

Zápisu znaků předchází znakdolaru. Příklad:

$A

Řetězce jsou uzavřeny meziapostrofy. Pro vložení apostrofu se tento zdvojuje.

'hello world''ScarletO''Hara'

Dva řetězce jsou si rovny, pokud mají stejné všechny znaky, přestože mají různou adresu v paměti počítače.

Symboly jsou posloupnost znaků, podobně jako řetězce, ale Smalltalk zaručuje, že neexistují dva shodné symboly, které jsou zároveň rozdílné objekty. Pro tuto vlastnost se symboly velmi jednoduše porovnávají, a jsou tedy často používané jako názvy zpráv (viz níže).

Před zápisem symbolu se uvádí znak #

#foo

Například pole čtyř typůinteger:

#(1234)

Bloky programu

[editovat |editovat zdroj]
["nějaké příkazy" ]

Deklarace názvů proměnných

[editovat |editovat zdroj]

Proměnné se deklarují na začátku bloku, obalené znaky svislé čáry:|

| index slabika|

Tento příklad deklaruje dvě proměnné pojmenovanéindex aslabika. Typy proměnných se nedeklarují, vše je objekt.

Přiřazení proměnné

[editovat |editovat zdroj]

Podobně jako v Pascalu, proměnné se přiřazují syntaxí:=

slabika:='la'

Zasílání zpráv je základní stavební kamen Smalltalku. Následující příklad zašle číslu „42“ zprávu „factorial“ pro výpočetfaktoriálu.

42factorial

V tomto případě je objekt „42“ tzv.příjemce zprávy a název „factorial“ je tzv.selektor zprávy. Příjemce odpoví na zaslání zprávy navrácením hodnoty. Ta může být například uložena do proměnné:

cislo:=42factorial

Zpráva „factorial“ je příklad tzv.unární zprávy neboť je zahrnut jen jeden objekt –příjemce. Pokud mají mít zprávy jakoargumenty další objekty, provádí se to takto:

2raisedTo:4

Zpráva může mít i více argumentů:

'hello world'indexOf:$lstartingAt:6

Výraz může zahrnovat více zaslání zpráv. V tom případě se zpracovávají v následujícím pořadí: unární zprávy, binární zprávy, ostatní zprávy.

3factorial+4factorialbetween:10and:100

se zpracuje takto:

((3factorial)+ (4factorial))between:10and:100

Výsledná hodnota příkladu jetrue.Protože Smalltalk nezachovává prioritu operátorů, výraz:

3+4*5

se implicitně zpracuje jako:

(3+4)*5

Následující příklad vytvoří novou instanci okna a uloží ji do proměnnéwindow, které pak zašle dvě zprávy.

| window|window:=Windownew.windowlabel:'Hello'.windowopen.

Pokud takto více výrazů pracuje se stejným příjemcem, je možné použít tzv.kaskádu, která se odděluje znakem středník, čímž již není potřeba proměnné z posledního příkladu:

Windownewlabel:'Hello';open

Blok se uzavírá do hranatých závorek.

[:"parametry"|"příkazy" ]

Kdeparametry je seznam názvů proměnných, které kód přijímá. Například kód pro přičtení hodnoty čísla 1 vypadá následovně:

[:x|x+1]

Jedná se o jakousi funkci s parametrem. Říká se jí takélambda funkce,anonymní funkce či (nepřesně)uzávěr, popřípaděanonymní objekt. Podobný typ funkce je běžný vefunkcionálním programování v jazycích jakoLisp,Scheme čiPython.

Tento kód je možné spustit zasláním zprávy s parametrem.

Zavedením těchto bloků ve Smalltalku je možné zapsat i složitější programy velmi přehledně. Například kód, který vybere ze seznamu jen kladná čísla, by se v ostatních jazycích psal pomocícyklů. Ve Smalltalku je mnohem přehlednější:

novySeznamKladnychCisel:=seznamCiselselect: [:jednaHodnota|jednaHodnotaisPositive]

Řídicí struktury

[editovat |editovat zdroj]

Řídicí struktury nejsou součástí syntaxe jazyka, namísto toho jsou implementovány jako zprávy zasílané objektům. Napříkladpodmínka je implementována jako zaslání zprávy ifTrue: objektuBoolean, kde argumentem je blok kódu, který se spustí, pokud se jedná o objekttrue.

result:=a>bifTrue: ['promenna a ma vetsi hodnotu' ]ifFalse: ['promenna a ma mensi hodnotu' ]

Programátoři často používají bloky kódu k vytváření nových řídicích struktur, například:

| mujText souhlasky|mujText:='This is a string'.samohlasky:=mujTextselect: [:pismenko|pismenkoisVowel].

Na poslední řádce příkladu přijímá textový objektmujText zaslanou zprávuselect: s parametrem, kterým je v tomto případě blok kódu. Textový objekt v reakci na zprávuselect: prochází všechny znaky v textu a spouští blok předaný jako parametr. Výsledkem spuštění bloku[:pismenko | pismenko isVowel] je buďtrue (v případě, že se jedná o samohlásku) nebofalse v opačném případě. Pokud byl výsledektrue, je zkoumaný znak vložen do kolekce, která se nakonec uloží do proměnnésamohlasky.Protože je metodaselect: definována ve tříděCollection, může se použít i takto

| obdelniky bod|obdelniky:=OrderedCollectionwith: (Rectangleleft:0right:10top:100bottom:200)with: (Rectangleleft:10right:10top:110bottom:210).bod:=Pointx:20y:20.kolize:=obdelnikyselect: [:obdelnik|obdelnikcontainsPoint:bod].

Třídy

[editovat |editovat zdroj]

Takto vypadá definice třídy:

Objectsubclass:#MessagePublisherinstanceVariableNames:''classVariableNames:''poolDictionaries:''category:'Smalltalk Examples'

Když se objektu zašle zpráva, vyvolá se metoda. Následují kód definuje metodunapsat a tím také definuje, co se stane, když se objektu zašle zprávanapsat.

napsatTranscriptshow:'Hello, World!'

Všimněte si, že objekt vyhledá metodu podle zprávy za běhu programu (zatímco mnoho jazyků toto vyhodnocuje v době překladu).

Instance třídy

[editovat |editovat zdroj]

Následující kód

PisatelZpravynew

vytváří (vrací) novou instanci třídyPisatelZpravy. Většinou se takový objekt uloží do proměnné:

pisatel:=PisatelZpravynew

Toto není nutné vždy, je také možné zaslat zprávu objektu, který nebyl uložen do proměnné. Takovému objektu se říká „anonymní objekt“:

PisatelZpravynewnapsat

Příklad

[editovat |editovat zdroj]

Klasický příkladHello World je možné zapsat takto:

Transcriptshow:'Hello, world!'.

ObjektuTranscript se posílá zprávashow: s parametrem 'Hello, world!'. Vyvolání metodyshow: vypíše na konzoli řetězec, který se předal jako parametr.

Pozor: okno Transcript se musí nejdřív otevřít, než je mu možné tuto zprávu poslat.

Reference

[editovat |editovat zdroj]
  1. 12345678910KAY, Alan; Stefan Ram.E-Mail of 2003-07-23 [online].Berlín: Stefan Ram, 2003-07-23 [cit. 2017-11-01].Dostupné online. (anglicky) 

Externí odkazy

[editovat |editovat zdroj]
Programovací jazyky
abecední seznam programovacích jazyků
multiparadigmatické

AdaC++Common LispDF#GoOberonPerlPHPPythonRakuRubyRustScalaSwiftTcl (Tk) •Vala

strukturované (procedurální)

AWKCCOBOLDCLForthFortranLuaModula-2 /Modula-3PascalPawnPL/SQL

objektové
funkcionální
dotazovací

LINQSPARQLSQLXQueryXSL (XSLTXSL-FOXPath)

logické
výukové
ezoterické
historické

ALGOLAPLBBASICCPL (BCPL) •JMUMPSPL/ISimula 67SNOBOL

další
skriptovací/strojový kódkompilované/interpretovanéinteraktivní/dávkovéWYSIWYG
Autoritní dataEditovat na Wikidatech
Citováno z „https://cs.wikipedia.org/w/index.php?title=Smalltalk&oldid=24501588
Kategorie:
Skryté kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp