Karel na Internetu

 

Tomáš Macek

Katedra počítačů, FEL, ČVUT

Abstract

A new Java based implementation of Karel is presented in this paper. Karel has been designed to be a friendly language for teaching of computer programming. This paper presents a short review of Karel followed by a description of the new implementation. The advantage of the presented approach is the platform independence. The user gets a uniform environment, which is available for all the commonly used operating systems. Karel was implemented in two-language version (English and Czech) and accompanied with html documentation.

  1. Úvod

    V roce 1981 vyšla knížka Richarda E. Patise: Karel the Robot. Knížka poprvé představila malého robota s českým jménem Karel. Do České republiky (tehdy ještě ČSSR) se Karel dostal velmi brzy a stal se značně populárním. Možná trochu i pro jeho český název. Karel je však stále populární i v zahraničí. Má už i objektového bratříčka, který se jmenuje Karel++.

    Prvé implementace jazyka byly na tehdy populárních počítačích ZX Spectrum, IQ151 a pod. Od té doby vznikla řada dalších implementací pro různé operační systémy a různé počítače. Od prvého vydání knížky Karel the Robot se mnohé událo. Vznikl například Internet a programovací jazyk Java. Tento článek popisuje prvé výsledky projektu, který byl právě Internetem inspirován. Předmětem projektu je vývoj internetové implementace jazyka Karel.

    Následující text je členěn do čtyř částí. V prvé části je vysvětleno, co to je programovací jazyk Karel. Další část vysvětluje koncept projektu internetové implementace jazyka. Následuje krátký popis implementace s ukázkou rozhraní a závěr.

  2. Karel

    Karel je jednoduchý programovací jazyk, který byl navržen k tomu, aby pomohl začátečníkům proniknout do tajů programování. Základem koncepce jazyka je snaha poskytnout skoro všechno to, co umí normální programovací jazyk a to pomocí co nejjednoduššího příkazového repertoáru. Jazyk je určen pro výuku a nečiní si ambice být normálním programovacím jazykem.

    Základem je robot Karel, který je v prostoru omezeném zdmi, tzv. městě. Karel zná jen několik málo příkazů. Umí udělat krok vpřed a otočit se vlevo. Umí také položit a zvednout značku. To je ale skoro vše co zná. Neumí se třeba otočit vpravo. Je to ale nadmíru zvědavý robot. Jakmile dostane příkaz, kterému nerozumí, hned se ptá co znamená. Otočit se vpravo lze například popsat třemi příkazy pro otočení vlevo. Jakmile jednou vysvětlíme příkaz, příkaz je zařazen do známých slov a může být použit pro vysvětlování dalších příkazů. V terminologii programovacích jazyků je vysvětlování nového slova definicí nové procedury.

    Karel rozumí také základním programovým konstrukcím, jako je podmíněný příkaz nebo příkaz cyklu. Jako podmínku lze uvést test na existenci značky pod robotem nebo test na existenci zdi před robotem. Lze tak psát relativně složité programy. Do prostoru, kde se Karel pohybuje lze připravit různé překážky nebo položit značky. Je pak možné řešit problémy typu jak naučit Karla, aby nalezl cestu z bludiště nebo jak naučit Karla, aby přerovnal značky z jednoho kouta na druhý.

    Při vysvětlování významu nových příkazů je možné použít i příkaz právě vysvětlovaný. Což je vlastně rekurze. S využitím rekurze je možné naučit Karla řešit problémy, které jsou relativně obtížné i v „opravdových“ programovacích jazycích. Příkladem je úloha hanojských věží.

    Programovací jazyk Karel je skvělým úvodem do programování. Student není zatěžován množstvím detailních informací . Nemusí ani používat cizí slova, protože příkazy jsou přeloženy do jeho mateřského jazyka. Může se tedy věnovat jen a právě programování. Svojí koncepcí jazyk navádí k využívání dobrých programovacích technik, jako je dekompozice problému nebo strukturované programování. K používání jazyka jsou potřeba minimální předchozí znalosti. Je vhodný i pro malé děti. Jedinou omezující podmínkou je znalost psaní. Počítat už programátor Karla umět nemusí.

  3. Koncepce projektu

    Karel byl implementován již v řadě jazykových mutací a na množství různých počítačů. Každá implementace je ale trochu jiná. Pokud má student jiný počítač doma a jiný ve škole, musí si zvyknout na dvě prostředí. To je nepříjemné i pro učitele. Pro studenta-začátečníka to může být neřešitelný problém.

    Implementace, která je zde popisována, tento problém řeší. Karel je napsán jako program v jazyku Java. Program je vytvořen jako applet vložený do html dokumentu. Výhod takové koncepce je několik. Jsou shrnuty v následujících bodech.

    • Platformová nezávislost,
    • není potřeba instalovat,
    • podpora pro vytváření jazykových mutací,
    • snadná integrovatelnost s doprovodnými texty a příklady.

    Program je distribuován v tzv. byte kódu, který vznikne překladem programu z jazyka Java. Byte kód je forma, která je nezávislá na architektuře počítače či na operačním systému. K tomu, aby mohl byt program v byte kódu proveden, musí být na počítači nainstalován tzv. virtuální stroj (Java Virtual Machine). Ten potom kód interpretuje. Tento zdánlivě komplikující požadavek je zajištěn instalací některého z WWW prohlížečů, například Netscape nebo Internet Explorer.

    Pokud je uživatel připojen k Internetu, nemusí program vůbec instalovat. Stačí zadat příslušnou WWW adresu po spuštění svého prohlížeče. Pokud k Internetu připojen není, je třeba program přinést na disketě.

    Na rozdíl od jiných programovacích jazyků existuje jazyk Karel v řadě jazykových verzí. To proto, aby student nebyl zatěžován memorováním cizích slovíček a mohl se soustředit na problémy spojené s programováním. Je tedy potřeba vytvořit implementaci, která by byla snadno přeložitelná. To vyšší verze jazyka Java umožňují. Všechny texty jsou uloženy v jediném souboru, který lze snadno přeložit. Program získává všechny texty z tohoto souboru. Není ho tedy třeba znovu překládat.

    Poslední výše uvedená přednost implementace Karla v jazyku Java je snadná integrovatelnost s doprovodnými texty a příklady. Applet je vložen do WWW stránky, odkud se vyvolá zmáčknutím tlačítka. WWW stránky mohou obsahovat doprovodný text, obrázky, zvuky nebo příklady. Doprovodné materiály mohou být „ušity na míru“ pro typ studentů, kteří je budou používat.

  4. Implementace

    V popisované implementaci je Karel (viz [2]) realizován jako applet v jazyku Java. Applet je součástí WWW dokumentů, které obsahují doprovodné texty. Po spuštění appletu se zobrazí základní okno, ve kterém lze editovat, kompilovat a spouštět. Po spuštění programu se vytvoří další okno s robotem Karlem a jeho prostředím. Příklad prostředí znázorňuje obrázek 1.

    Program i doprovodné texty jsou připraveny ve dvou jazykových mutacích (česky a anglicky). Lze je najít na adrese:

    http://cs.felk.cvut.cz/~macek/karel/index.html

    Obrázek 1: Prostředí jazyka Karel

     

  5. Závěr

    Cíle tohoto článku byly dva. Zaprvé šlo o to připomenout čtenáři koncept programovacího jazyka Karel, jednoho z nejúspěšnějších pokusů, jak usnadnit začátečníkům vstup do světa programování.

    Druhým cílem bylo uvedení nové implementace jazyka Karel, která je výsledkem jedné z bakalářských prací na KP, FEL, ČVUT.

    Popisovaná implementace je součástí rozsáhlejšího projektu. Do podzimu tohoto roku má vzniknout nová verze appletu, která bude obsahovat řadu rozšíření. Vznikne celé vývojové prostředí, které bude zahrnovat kompilátor a interpret jazyka a kvalitnější prostředky pro ladění programu. Je vyvíjena i obdobná verze jazyka Karel++.

  6. Poděkování

    Rád bych poděkoval svým studentům Marku Pospíchalovi a Miroslavu Salačovi, kteří se podílejí na projektu internetové implementace jazyků Karel a Karel++. Prvá implementace Karla, z níž jsou zde uvedeny ukázky, je dílem Marka Pospíchala.

  7. Použitá literatura

    [1]

    Pattis, R.E., revised by Roberts, J., Stehlik M.: Karel the Robot, A Gentle Introduction to the Art of Programming, 2nd edition, John Wiley and Sons, ISBN: 0-471-59725-2, 1995.

    [2]

    Pospichal M.: Karel na Internetu, Bakalářská práce, Katedra počítačů, ČVUT, FEL, 1997

     

    Autor:

    Dr. Ing. Tomáš Macek, Katedra počítačů, FEL, ČVUT,

    Karlovo náměstí 13, 121 35 Praha 2, Tl: (+420 2) 2435 7410, Fax: (+420 2) 29 80 98

    email: macek@cs.felk.cvut.cz, url: http://cs.felk.cvut.cz/~macek