Hlavní navigace

První kroky ve Squeaku

22. 7. 2010
Doba čtení: 12 minut

Sdílet

Ve třetí části seriálu o programovacích jazycích vhodných pro výuku programování se seznámíme s jazykem Squeak a především s vývojovým prostředím založeným na grafickém uživatelském rozhraní Morphic, které je společně s tímto jazykem dodáváno a velmi intenzivně používáno.

Obsah

1. První kroky ve Squeaku

2. Instalace Squeaku a součásti jeho prostředí

3. Vývojové prostředí Squeaku a GUI Morphic

4. Okno „Workspace“

5. Poslání zprávy objektu

6. Okno „Transcript“

7. Obsah následující části seriálu

8. Odkazy na Internetu

1. První kroky ve Squeaku

V úvodních dvou částech seriálu o programovacích jazycích vhodných pro výuku programování jsme se zmínili jak o dnes již „klasických“ výukových jazycích, jakým je kupříkladu Pascal či Logo (popř. o nových dialektech Loga, jakým je například NetLogo nebo Elica) a taktéž o těch programovacích jazycích, které se na školách používají teprve několik let (i když samotné jazyky mohou být mnohem starší). Příkladem jazyka patřícího do druhé skupiny je například Python, ke kterému v současnosti existuje celá řada integrovaných vývojových prostředí, z nichž některá jsou komerční, ale mnohem více jich je vyvíjených jako open source nástroje. Dnes a taktéž v několika následujících částech tohoto seriálu se seznámíme s programovacím jazykem Squeak, což je dialekt plně objektového programovacího jazyka Smalltalk-80, jenž je doplněný o komplexní vývojové prostředí založené na grafickém uživatelském rozhraní Morphic.

Obrázek 1: ERIC – jedno z mnoha vývojových prostředí určených pro psaní a ladění aplikací v Pythonu. V tomto prostředí lze plně využít reflexe jazyka Python (podobně jako je tomu ve Squeaku).

Squeak se v mnoha ohledech odlišuje od všech již popsaných či alespoň letmo zmíněných programovacích jazyků, takže si v dnešním článku některé jeho zajímavé vlastnosti popíšeme. Taktéž si popíšeme základní ovládací prvky, pomocí nichž je možné ve Squeaku vytvářet vlastní objekty, posílat jim zprávy či tyto objekty testovat. Mimo dalších informací se taktéž zmíníme o základním mechanismu, který ve Squeaku zajišťuje komunikaci mezi objekty – jedná se o takzvané „posílání zpráv“, které se sice podobá volání metod známému například z C++ či Javy, ovšem posílání zpráv je poněkud obecnější mechanismus.

Obrázek 2: Ukázka grafického uživatelského rozhraní Squeaku.

2. Instalace Squeaku a součásti jeho prostředí

Squeak je možné na mnoha distribucích Linuxu nainstalovat přímo pomocí nástrojů použitého balíčkovacího systému, ovšem v případě, že balíček s tímto jazykem není dostupný, nebo není dostupná poslední verze jazyka (konkrétně se jedná o verzi 4.1), lze si ze stránek http://www.squ­eak.org/ všechny potřebné soubory stáhnout a nainstalovat ručně, což není díky poněkud netradiční architektuře Squeaku vlastně vůbec nic složitého. Typická instalace Squeaku se skládá ze čtyř částí. První částí je virtuální stroj, který zajišťuje přenositelnost obrazu Sqeaku (viz další odstavec) na různé platformy. Většinou se jedná o spustitelný soubor doplněný o několik pomocných knihoven. Virtuální stroj je jediná část Squeaku, která se na jednotlivých platformách odlišuje. Dále se v instalaci Squeaku nachází soubor SqueakV_verze_­.sources obsahující, jak již ostatně jeho název napovídá, zdrojové kódy všech tříd. Jedná se o jediný soubor, který je dnes již velmi rozsáhlý (cca 25 MB), ovšem tato velikost není podstatná, protože se ručně needituje.

Třetí částí instalace Squeaku je soubor nazvaný SqueakV_verze_­.changes, jenž obsahuje změny oproti výše popsanému souboru se zdrojovými kódy všech tříd. Poslední částí instalace je jeden či více souborů s koncovkou .image, které obsahují stav všech objektů v systému (třídy a metody jsou též objekty, takže i jejich stav je zde zaznamenán). Obrazy systému (protože se skutečně nejedná o nic jiného, než o zakonzervovaný stav celého Squeaku) jsou uloženy jako binární data, na rozdíl od textového souboru se zdrojovými kódy a souboru se změnami. Důležité je, že jak samotný virtuální stroj, tak i soubor SqueakV_verze_­.sources, jsou neměnné, tj. mohou být na disku uloženy pouze jedenkrát (ideálně s nastavenými právy pouze pro čtení) a sdílené mezi více uživateli. Z technologického hlediska je zajímavé, že soubory s obrazy systému obsahují stavy objektů, z nichž některé byly vytvořeny (myšleno je zde vytvoření jejich instance) již před více než 20 lety, takže lze Squeak považovat za jeden z nejdéle běžících systémů vůbec (jinými slovy – Squeak se nerestartuje, pouze hibernuje a opětovně probouzí, a to mnohdy na zcela odlišné platformě).

3. Vývojové prostředí Squeaku a GUI Morphic

Již v úvodní kapitole jsme si řekli, že Squeak používá vývojové prostředí s přenositelným a na všech platformách prakticky shodným grafickým uživatelským rozhraním Morphic (mimochodem, jedná se o projekt, který vznikl pro potřeby jazyka Self a posléze byl upraven pro Squeak). Vývojové prostředí se ovládá kombinací klávesnice a myši, což není nic překvapivého, protože moderní GUI vzniklo právě ve Smalltalku. Ve Squeaku je využito všech tří tlačítek myši (prostřední tlačítko lze v případě potřeby emulovat). V dokumentaci a nápovědě se jednotlivá tlačítka nepopisují podle toho, kde jsou na myši umístěna (tj. slovy pravé, levé, prostřední), ale barvami – je to ostatně logické, když si uvědomíme, že například na počítači nakonfigurovaném pro leváky, je funkce pravého a levého tlačítka prohozena.

Obrázek 3: Vývojové prostředí Squeaku s jedním otevřeným oknem a trojicí minimalizovaných o­ken.

Na většině počítačů je levé tlačítko myši totožné s červeným tlačítkem, pravé tlačítko s modrým tlačítkem a konečně prostřední tlačítko se žlutým tlačítkem. Většina ovládacích prvků je ve Squeaku sdružena v oknech, které je možné pomocí čtveřice ikon (viz třetí obrázek) zavřít, maximalizovat, minimalizovat atd. Navíc je možné stiskem modrého tlačítka myši (tj. dnes většinou scrollovacího kolečka) zobrazit kolem téměř jakéhokoli okna sadu ikon umožňujících s oknem provádět mnoho dalších operací. Zajímavá, i když popravdě řečeno nepříliš užitečná funkce (s příchodem smartphonů se užitečnost této funkce zvyšuje) se skrývá například pod modrou ikonou zobrazenou vlevo dole. S pomocí této ikony lze okno libovolným způsobem natočit. Další zajímavou funkcí je duplikace okna (ikona vpravo nahoře), která interně skutečně vede k duplikaci objektu, který okno představuje.

Obrázek 4: Zobrazení sady ikon okolo okna při stlačení modrého tlačítka myši, tj. většinou prostředního tlačítka popř. scrollovacího kolečka.

Obrázek 5: Natočení okna posunem modré ikony zobrazené vlevo dole pod oknem.

4. Okno „Workspace“

Nedílnou součástí vývojového prostředí Sqeaku jsou i různá kontextová menu. Ta mají dvě důležité vlastnosti – většinou se jedná o nemodální menu, takže mohou být zobrazena na obrazovce jako formulář či nemodální dialog a z „grafického“ hlediska se menu chovají podobně jako další okna, tj. lze jimi například otáčet nebo je lze klonovat. Velmi důležité je kontextové menu plochy celého prostředí, které se příhodně nazývá World menu. Toto menu lze zobrazit klikem levého (červeného) tlačítka myši na pracovní plochu prostředí – viz též šestý obrázek.

Obrázek 6: World menu zobrazené po stisku červeného (levého) tlačítka myši na ploše Squeaku.

Z tohoto menu lze mj. otevírat i různá důležitá okna, mezi jinými i okno Workspace. V tomto okně je možné provádět poměrně velké množství operací, především posílat zprávy různým objektům, zkoumat atributy těchto objektů, jejich metody (přesněji řečeno přes kontextové menu či klávesové zkratky otevírat příslušná okna) atd. V následujících kapitolách si některé operace, jenž lze provádět s využitím okna Workspace ukážeme.

Obrázek 7: Okno Workspace zobrazené přes příkaz vyvolaný z  World menu.

5. Poslání zprávy objektu

Jednou ze základních operací, kterou je možné v okně Workspace provádět, je posílání zpráv různým objektům, ať již se jedná o objekty vytvořené samotným uživatelem nebo o objekty systémové (ostatně právě tímto způsobem je možné měnit chování celého prostředí, protože vše je zde objektem). Na obrázcích 8 až 10 je ukázán typický, i když současně i velmi jednoduchý příklad, jakým způsobem je možné poslat zprávu některému objektu a zobrazit výsledek, což je další objekt. Pokud do okna Workspace zapíšeme řetězec „6 * 7“ (bez uvozovek), je tento text Squeakem chápán jako poslání zprávy * s jedním parametrem (7) objektu 6. Ve Squeaku jsou totiž i celá čísla, podobně jako například čísla reálná či pravdivostní hodnoty, plnohodnotnými objekty, jimž lze posílat různé typy zpráv s různými parametry, nebo i zprávy bez parametrů, například 42 factorial.

Obrázek 8: Jednoduchý příkaz (poslání zprávy objektu 6) zapsaný v okně Workspace.

V jiných objektově orientovaných jazycích by se zápis „6 * 7“ nejspíše zapsal takto: „6.multiply(7)“, samozřejmě jen za předpokladu, že by v takovém jazyce byla čísla chápána jako plnohodnotné objekty, což s sebou přináší mnoho předností. O posílání zpráv si řekneme podrobnější informace až v následující části tohoto seriálu, nyní se vraťme k oknu Workspace. Pokud se má zpráva skutečně poslat a my budeme chtít zobrazit objekt, který může (ale nemusí) být výsledkem poslání této zprávy, lze pro tento účel použít příkaz print it dostupný z kontextového menu. Ovšem vzhledem k tomu, že se tento příkaz používá poměrně často, byla pro něj vytvořena i klávesová zkratka CTRL+p (malé „p“).

Obrázek 9: Výpis výsledku operace poslání zprávy pomocí příkazu „print it“.

Po provedení tohoto příkazu se výsledek zobrazí opět do okna Workspace, popř. se zde taktéž mohou zobrazit různá chybová hlášení.

Obrázek 10: Výsledek se zobrazil v okně Workspace.

6. Okno „Transcript“

Dalším důležitým oknem, které lze při programování použít, je okno Transcript. Toto okno si můžeme poněkud zjednodušeně představit jako standardní terminálový výstup, do nějž mohou různé procesy (či přesněji řečeno vlákna) zapisovat libovolné informace. Toto okno lze taktéž zobrazit přes kontextové World menu. Okno Transcript je (poněkud překvapivě :-) reprezentováno objektem Transcript, jemuž lze posílat různé zprávy. My si ukážeme typický příklad – vypsání řetězce zajištěného zprávou show: s jedním parametrem. Příkaz, který zajistí výpis řetězce, je ukázán na obrázku číslo 11.

Obrázek 11: Příkaz pro poslání zprávy objektu Transcript.

Poslání zprávy lze provést příkazem do it z kontextového menu, popř. klávesovou zkratkou CTRL+d (opět je zde použito malé písmeno!). Řetězec, který je předaný jako parametr zprávy, je skutečně vypsán do okna Transcript, o čemž se lze snadno přesvědčit (okno však musí být nejdříve otevřené, aby se v něm text zobrazil). Proč však používáme příkaz do it namísto již popsaného příkazu print it? I ten je samozřejmě možné použít, ovšem při jeho zavolání je do okna Workspace vypsán objekt navrácený po zavolání zprávy (v tomto případě se jedná o samotný výstupní proud).

Obrázek 12: Zavolání příkazu do it.

Obrázek 13: Okno Transcript po zavolání zprávy Transcript show: ‚řetězec‘.

7. Obsah následující části seriálu

V následující části seriálu o programovacích jazycích vhodných pro výuku programování si popíšeme další tři okna používaná při vývoji ve Squeaku. Jedná se o okna nazvaná Inspector, Object a především o velmi často využívané okno System Browser. Ovšem největší rozsah textu bude věnován samotné syntaxi a sémantice Squeaku. Řekneme si, které tři typy zpráv je možné v tomto programovacím jazyku používat při komunikaci mezi objekty, význam jeho klíčových slov (to je jednoduché, protože jich je jenom šest :-) a taktéž se zmíníme o tom, jakým způsobem je možné tvořit bloky kódu, podmínky a programové smyčky. Zajímavé je, že ve Squeaku jakožto plně objektově orientovaném programovacím jazyce, nejsou podmínky ani programové smyčky řešeny formou klíčových slov či speciálních syntaktických kategorií, ale „pouze“ posíláním zpráv s parametry vhodným objektům.

Obrázek 14: Zkoumání vlastností objektu.

skoleni

Obrázek 15: Zkoumání vlastností objektu (zde jeho hodnoty).

Obrázek 16: System Browser.

8. Odkazy na Internetu

  1. Squeak home page
    http://www.squ­eak.org/
  2. XO: The Children's Machine
    http://wiki.lap­top.org/go/The_Chil­dren's_Machine
  3. Squeak na Wikipedii EN
    http://en.wiki­pedia.org/wiki/Squ­eak
  4. Squeak na Wikipedii CZ
    http://cs.wiki­pedia.org/wiki/Squ­eak
  5. Squeak by Example
    http://squeak­byexample.org/
  6. Squeak Land
    http://www.squ­eakland.org/
  7. SqueakNotes
    http://squeak­.zwiki.org/Squ­eakNotes
  8. Squeak FAQ
    http://wiki.squ­eak.org/squeak/471
  9. Learning Squeak
    http://c2.com/cgi/wi­ki?LearningSqu­eak
  10. Scratch home page
    http://scratch­.mit.edu/
  11. Scratch (programming language)
    http://en.wiki­pedia.org/wiki/Scrat­ch_(programmin­g_language)
  12. Lazarus (Software)
    http://en.wiki­pedia.org/wiki/La­zarus_%28softwa­re%29
  13. FreePascal
    http://www.fre­epascal.org/
  14. „Why I Love Python“ slides
    http://www.min­dviewinc.com/dow­nloads/pub/ec­kel/LovePython­.zip
  15. „Why I love Python“ (presentation)
    http://www.sli­deshare.net/di­dip/why-i-love-python
  16. První jazyk: Python
    http://macek.san­dbox.cz/texty/prvni-jazyk-python/
  17. Programovací jazyk Python
    http://www.py­.cz/FrontPage
  18. Python – Wikipedia CS
    http://cs.wiki­pedia.org/wiki/Pyt­hon
  19. IPython
    http://en.wiki­pedia.org/wiki/I­python
  20. IPython: an interactive computing environment
    http://ipython­.scipy.org/mo­in/
  21. Category:Python
    http://rosetta­code.org/wiki/Ca­tegory:Python
  22. Educational programming language
    http://en.wiki­pedia.org/wiki/E­ducational_pro­gramming_langu­age
  23. Seriál Letní škola programovacího jazyka Logo
    http://www.ro­ot.cz/serialy/let­ni-skola-programovaciho-jazyka-logo/
  24. Logo Tree Project:
    http://www.eli­ca.net/downlo­ad/papers/Logo­TreeProject.pdf
  25. Language Poster (O'Reilly):
    http://www.ore­illy.com/news/grap­hics/prog_lan­g_poster.pdf
  26. Informace o Comenius Logu:
    http://www.com­logo.input.sk/in­dex.html
  27. Stránka nabízející stažení Comenius Loga:
    http://www.com­logo.input.sk/nas­tiahnutie.html
  28. Seminární práce o Comenius Logu:
    http://nwit.ped­f.cuni.cz/rotal9ap/lo­go/
  29. Informace o LEGO/Logu:
    http://educati­on.otago.ac.nz/nzlnet/L­ogo/legologo.html
  30. Informace o systému Elica:
    http://www.eli­ca.net/site/in­dex.html
  31. Informace o systému NetLogo:
    http://ccl.nor­thwestern.edu/ne­tlogo/
  32. Stažení NetLoga:
    http://ccl.nor­thwestern.edu/ne­tlogo/download­.shtml
  33. Uživatelský manuál NetLoga ve formátu PDF:
    http://ccl.nor­thwestern.edu/ne­tlogo/docs/Net­Logo%20User%20Ma­nual.pdf
  34. NetLogo FAQ:
    http://ccl.nor­thwestern.edu/ne­tlogo/docs/faq­.html
  35. Domácí stránka Daniela Azumy (autora implementace Turtle Tracks):
    http://alumnus­.caltech.edu/~da­zuma/home/
  36. Informace o aUCBLogu:
    http://www.phy­sik.uni-augsburg.de/~miche­ler/
  37. Domácí stránka MSW Loga:
    http://www.sof­tronix.com/lo­go.html
  38. Karel online
    http://karel.ol­dium.net/
  39. EDU-SIG: Python in Education
    http://www.pyt­hon.org/commu­nity/sigs/curren­t/edu-sig/
  40. Guido van Robot
    http://en.wiki­pedia.org/wiki/Gu­ido_van_Robot
  41. The Guido van Robot Programming Language
    http://gvr.sou­rceforge.net/
  42. An Introduction to Programming with Karel J. Robot
    http://blog.thin­goid.com/2003/10­/karel-intro/
  43. Teaching a young robot new tricks
    http://blog.thin­goid.com/2003/11­/karel-new-tricks/
  44. Karel and Company – More Robots
    http://blog.thin­goid.com/2003/12­/karel-and-company/
  45. Karel heads for the stars
    http://blog.thin­goid.com/2004/03­/karel-star/
  46. Karel programming language documentation
    http://mormegil­.wz.cz/prog/ka­rel/prog_doc.htm
  47. Karel J. Robot
    http://www.ma­inlandregional­.net/dklipp/Ho­nors%20Computer%20Sci­ence%20Java.htm
  48. Karel (programming language)
    http://en.wiki­pedia.org/wiki/Ka­rel_(programmin­g_language)
  49. Richard E. Pattis
    http://en.wiki­pedia.org/wiki/Richar­d_E._Pattis
  50. XKarel home page
    http://xkarel­.sourceforge.net/en­g/
  51. KKarel – screenshoty oken
    http://xkarel­.sourceforge.net/en­g/program.php#Ok­na
  52. Greenfoot
    http://www.gre­enfoot.org/abou­t/whatis.html
  53. Computer programming – Educational programming languages
    http://www.kid­slike.info/com­puter_program­ming_educatio­nal_programmin­g_languages
  54. Making Great Programmers: Why BASIC is Still Relevant
    http://kidbasic­.sourceforge.net/en/why­.html
  55. Gambas Wiki
    http://en.wiki­books.org/wiki/Gam­bas
  56. Free tool offers ‚easy‘ coding
    http://news.bbc­.co.uk/2/hi/tec­hnology/6647011­.stm
  57. Scratch Lowers Resistance to Programming
    http://www.wi­red.com/gadge­tlab/2009/03/scrat­ch-lowers/
  58. Základy želví grafiky
    http://www.ro­ot.cz/clanky/za­klady-zelvi-grafiky/
  59. Bill Kendrick's Web Turtle
    http://www.so­nic.net/~nbs/web­turtle/

Autor článku

Pavel Tišnovský vystudoval VUT FIT a v současné době pracuje ve společnosti Red Hat, kde vyvíjí nástroje pro OpenShift.io.