MASARYKOVA UNIVERZITA }w¡¢£¤¥¦§¨  FAKULTA INFORMATIKY !"#$%&'()+,-./012345

Programovacı´jazyky pro vy´uku programova´nı´na SSˇ

DIPLOMOVA´ PRA´ CE

Bc. Luka´sˇRy´dlo

Brno, 2012

Prohla´sˇenı´

Prohlasˇuji, zˇe tato diplomova´pra´ce je my´m pu˚vodnı´m autorsky´m dı´lem, ktere´ jsem vypracoval samostatneˇ. Vsˇechny zdroje, prameny a literaturu, ktere´jsem prˇi vypracova´nı´pouzˇı´val nebo z nich cˇerpal, v pra´ci rˇa´dneˇcituji s uvedenı´m u´plne´ho odkazu na prˇı´slusˇny´zdroj.

Vedoucı´pra´ce: doc. RNDr. Toma´sˇPitner, Ph..

iii

Podeˇkova´nı´

Ra´d bych podeˇkoval vedoucı´mu sve´pra´ce, doc. RNDr. Toma´sˇi Pitnerovi, Ph.D. za ochotu ve´st me´te´ma, nevsˇednı´vstrˇı´cnost a trpeˇlivost i konkre´tnı´tipy.

v Abstrakt

Pra´ce prˇina´sˇı´zhodnocenı´ru˚zny´ch programovacı´ch jazyku˚, metodik a prostrˇedı´ pro potrˇeby vy´uky na strˇednı´ch sˇkola´ch. V u´vodnı´kapitole jsou popsane´teoreticke´ koncepty, formy vy´uky, analy´za metodik v oblasti vy´uky programova´nı´, vhodnost jednotlivy´ch paradigmat. Druha´kapitola prˇina´sˇı´prˇehled za´kladnı´ch metod graficke´ho popisu algoritmu, jejich vhodnost a vyuzˇitelnost prˇi vy´uce. Trˇetı´kapitola zacˇı´na´na´vrhem metodiky hodnocenı´programovacı´ch jazyku˚pro potrˇeby vy´uky a jejich prˇehledem. Dalsˇı´ka- pitola hodnotı´pro zmeˇnu ru˚zna´vy´vojova´prostrˇedı´, at’uzˇpouzˇı´vana´v beˇzˇne´praxi nebo urcˇena´prˇı´mo pro vy´uku. Za´veˇr pra´ce je veˇnova´n vy´ukovy´m materia´lu˚m pro semina´rˇz programova´nı´na gymna´ziu v jazyce Java metodou objects first, resp. model first (viz kapitola 1.5).

Abstract

This thesis is focused on teaching programming at secondary level schools, in the way of choosing languages, methodics, paradigms and development environment useful for educational process as well as real life. First chapter contains theoretical concepts, teaching methods, paradigm analy- sis. Second chapter briefly describes graphical representation of algorithms. Third chapter begins with language comparison methodics and then compares selected lan- guages with description. Next chapter compares development environments, both used in real work and specialized on teaching purposes. Last part brings teaching materials for programming course on high school, in or- der to support teaching Java and object oriented programming/modeling in objects- first way. This thesis is written in Czech language.

Klı´cˇova´slova

vy´uka programova´nı´, programovacı´jazyky, didaktika informatiky, strˇednı´sˇkoly, IDE, teaching programming, high school, paradigms

vi Obsah

0 U´ vod ...... 1 1 Teoreticky´za´klad ...... 3 1.1 Koho budu ucˇit ...... 3 1.2 Forma vy´uky ...... 5 1.3 Co a procˇbudu ucˇit ...... 6 1.4 Paradigmata ...... 8 1.4.1 Funkciona´lnı´...... 8 1.4.2 Logicke´...... 9 1.4.3 Imperativnı´strukturovane´...... 9 1.4.4 Objektoveˇorientovane´...... 10 1.4.5 Uda´lostmi rˇı´zene´...... 11 1.4.6 Multiparadigmaticke´jazyky...... 11 1.5 Zarˇazenı´paradigmat do vy´uky ...... 12 1.6 Jak budu ucˇit – obecna´metodika ...... 14 2 Graficky´popis algoritmu˚ ...... 21 2.1 Vy´vojove´diagramy ...... 21 2.2 Kopenogram ...... 24 2.3 Nassi-Shneidermannu˚v diagram ...... 26 2.4 UML ...... 26 3 Jazyky ...... 35 3.1 Metodika volby jazyka ...... 35 3.1.1 Kriteria hodnocenı´jazyku˚...... 36 3.2 Prˇehled vybrany´ch jazyku˚ ...... 39 3.2.1 Pascal...... 39 3.2.2 ...... 41 3.2.3 C++...... 42 3.2.4 C# (.NET)...... 44 3.2.5 Visual Basic...... 45 3.2.6 Java...... 46 3.2.7 PHP...... 48 3.2.8 JavaScript (resp. ECMAScript)...... 50 3.2.9 ...... 51 3.2.10 Python...... 53 3.2.11 Ruby...... 54 3.2.12 Karel...... 56

vii 4 Vy´vojova´a vy´ukova´prostrˇedı´ ...... 57 4.1 Robot Karel ...... 57 4.2 Lego Mindstorms ...... 58 4.3 Arduino ...... 59 4.4 Baltı´k ...... 59 4.5 Scratch ...... 61 4.6 Alice 3D ...... 61 4.7 BlueJ ...... 62 4.8 Greenfoot ...... 62 4.9 Dev-C++ ...... 63 4.10 MS Visual Studio Express ...... 63 4.11 Netbeans ...... 64 5 Prˇı´pravypro semina´rˇprogramova´nı´ ...... 65 1. lekce – Terminologie a algoritmizace...... 66 2. lekce – Algoritmizace...... 70 3. lekce – Za´klady OOP...... 75 4. lekce – Atributy a datove´typy...... 77 5. lekce – Metody, API Greenfootu...... 78 6. lekce – Podmı´nky a vy´jimky...... 79 7. lekce – Cykly...... 80 8. lekce – Procvicˇova´nı´...... 81 9. lekce – Testy a TDD, BlueJ...... 82 10. a 11. lekce – Pole, kolekce, itera´tory...... 83 12. lekce – Souborovy´vstup/vy´stup...... 84 Dalsˇı´navrhovane´lekce...... 85 6 Shrnutı´ ...... 89

viii Kapitola 0 U´ vod

Jizˇneˇkolik let docha´zı´ke zmeˇna´m v prˇı´stupu k vy´uce programova´nı´na vysoky´ch sˇkola´ch, byt’v Cˇeske´republice k tomu docha´zı´s mı´rny´m zpozˇdeˇnı´m vu˚cˇi za´padnı´mu sveˇtu. Meˇnı´ se nabı´dka programovacı´ch jazyku˚ i metody vy´uky, zacˇı´na´ se kla´st du˚raz i na ru˚zne´ metodiky vy´voje software, nejen na pouhou znalost syntaxe a se´mantiky konkre´tnı´ho jazyka, neˇktere´jazyky se opousˇtı´(jazyk symbolicky´ch adres – neprˇesneˇnazy´vany´assembler), jine´se dosta´vajı´do poprˇedı´za´jmu a dalsˇı´se teprve prosazujı´(naprˇ. Ruby). Podobneˇdocha´zı´k diskusı´m a postupne´mu vy´voji i ve vy´uce informatiky na strˇednı´ch sˇkola´ch, v soucˇasne´dobeˇprˇedevsˇı´m dı´ky sta´tnı´maturiteˇ. Prˇesto na mnohy´ch strˇednı´ch sˇkola´ch v Cˇeske´republice se programova´nı´sta´le ucˇı´ stary´mi metodami a v „osveˇdcˇeny´ch“ jazycı´ch jako je Pascal nebo VisualBasic. Zmeˇna veˇtsˇinou za´visı´na samotny´ch vyucˇujı´cı´ch informatiky,protozˇe zavedenı´m RVP 1 dosˇlo k prˇevedenı´zodpoveˇdnosti za volbu na´plneˇvy´uky na sˇkoly. Nemalou roli ve volbeˇprogramovacı´ho jazyka pro vy´uku hraje jisteˇi setrvacˇnost vyucˇujı´cı´ch a prˇedevsˇı´m absence mozˇnosti efektivnı´cestou se novy´jazyk naucˇit. Pro mnohe´je ota´zkou „Ktery´je ten spra´vny´?“, protozˇe neexistuje v cˇesˇtineˇdostupne´shrnutı´dnes pouzˇı´vany´ch jazyku˚a jejich vhodnosti. Ve zmeˇti knih ru˚zny´ch u´rovnı´na´rocˇnosti, kvality a cı´love´skupiny cˇtena´rˇu˚se lze teˇzˇko orientovat. Acˇkoliv Ra´mcovy´vzdeˇla´vacı´program pro gymna´zia [2, str. 63] deklaruje vy´chovu zˇa´ku˚k algoritmicke´mu mysˇlenı´, vyucˇujı´cı´postra´dajı´ucˇebnice a metodiku, ktera´by takovou abstraktnı´proklamaci aplikovala do prakticke´vy´uky. Lepsˇı´situace nenı´ ani prˇi vy´beˇru ucˇebnic. Nabı´dka je sice sˇiroka´, ale pomeˇrneˇma´lo knih je vhodny´ch jako ucˇebnice pro strˇednı´sˇkoly – veˇtsˇinu z nich lze doporucˇit spı´sˇe jako doplneˇk vy´uky pro samostudium. Pedagogicka´opora ve formeˇsbı´rek prˇı´kladu˚k procvicˇenı´ opeˇt neexistuje, stare´sbı´rky veˇtsˇinou nelze pouzˇı´t, protozˇe obsahujı´prˇeva´zˇneˇu´lohy matematicke´, ktere´ dnesˇnı´ zˇa´ky nemotivujı´ a svy´m zameˇrˇenı´m na strukturovane´ paradigma se nehodı´prˇi vy´uce objektove´ho programova´nı´. V te´to diplomove´pra´ci si kladu za cı´l jednak analyzovat nabı´dku programovacı´ch a skriptovacı´ch jazyku˚z hlediska jejich vhodnosti pro vy´uku programova´nı´, ale take´ prˇehledneˇprˇine´st na´vrhy k alternativnı´m forma´m vy´uky programova´nı´a algoritmi- zace prˇedevsˇı´m v prostrˇedı´strˇednı´ch sˇkol, respektive na vysˇsˇı´m stupni za´kladnı´ch sˇkol. V pra´ci se pokusı´m zohlednit te´meˇrˇtrˇı´letou praxi ve vy´uce strukturovane´ho

1. RVP – Ra´mcovy´vzdeˇla´vacı´program, popisuje pouze obecna´te´mata a vı´ceme´neˇabstraktnı´cı´love´ dovednosti (tzv. klı´cˇove´kompetence) na rozdı´l od drˇı´ve pouzˇı´vany´ch pomeˇrneˇkonkre´tnı´ch osnov. To umozˇnˇuje sˇkola´m prˇizpu˚sobit svu˚j SˇVP – sˇkolnı´vzdeˇla´vacı´program – a odlisˇit se od jiny´ch sˇkol.

1 0. U´ VOD programova´nı´v jazyce C na gymna´ziu a ra´d bych touto pracı´prˇispeˇl k sˇirsˇı´diskusi a zmeˇneˇ, jaka´probeˇhla naprˇ. v Neˇmecku [6]. Pocˇı´tacˇova´gramotnost ve smyslu schopnosti ovla´dat pocˇı´tacˇv beˇzˇny´ch zˇivotnı´ch situacı´ch informacˇnı´spolecˇnosti jako je komunikace prˇes internet, vyhleda´va´nı´infor- macı´nebo jejich zpracova´nı´v ru˚zny´ch programech, je pro dnesˇnı´mla´dezˇnaprostou nezbytnostı´a jako takovou ji lze srovna´vat s prima´rnı´gramotnostı´. Je pravdeˇpo- dobneˇ jen ota´zkou cˇasu, kdy vy´uka vyhleda´va´nı´ na internetu nebo typografie a psanı´v textovy´ch procesorech prˇejde ze strˇedosˇkolsky´ch vzdeˇla´vacı´ch programu˚ do vy´uky na za´kladnı´sˇkole a strˇedosˇkolska´informatika se obsahem vı´ce prˇiblı´zˇı´ odborny´m znalostem jako je tomu v jiny´ch prˇedmeˇtech. Programova´nı´je jisteˇjednou z oneˇch odborny´ch znalostı´, ktere´na´lezˇejı´informa- tice, a ktere´by prˇedevsˇı´m gymnaziste´– jakozˇto potencia´lnı´studenti vysoke´sˇkoly – meˇli alesponˇv za´kladu ovla´dat. Obzvla´sˇteˇprˇı´rodoveˇdneˇzameˇrˇenı´studenti obcˇas potrˇebujı´automatizovaneˇzpracovat neˇjaka´data a tedy vytvorˇit alesponˇjednoduche´ makro v kancela´rˇske´m balı´ku nebo kra´tky´skript v aplikacı´ch typu CAS.2 Jisteˇkazˇdy´ informatik – natozˇstudent strˇednı´sˇkoly – nemusı´by´t programa´tor, ale je trˇeba ne- zapomı´nat na vy´uku algoritmicke´ho mysˇlenı´, ktere´je nezbytne´nejen pro schopnost dobrˇe programovat. Vy´uka programova´nı´by v prve´rˇadeˇmeˇla ve´st k vy´uce algorit- micke´ho mysˇlenı´. Bohuzˇel na mnohy´ch cˇesky´ch strˇednı´ch sˇkola´ch je programova´nı´ sta´le vnı´ma´no pouze jako vy´uka konkre´tnı´ho jazyka a analy´za zadane´ho proble´mu a na´vrh postupu rˇesˇenı´s diskusı´by´va´zanedba´va´n. Kromeˇsamotny´ch programovacı´ch jazyku˚budou v te´to pra´ci zmı´neˇny i neˇktere´ metodiky a kladen du˚raz na modelova´nı´proble´mu a jeho zpracova´nı´. K tomu snad poslouzˇı´i shrnutı´neˇktery´ch graficky´ch metod, vy´vojovy´ch prostrˇedı´a aplikacı´pro podporu vy´uky programova´nı´. V pouzˇite´literaturˇe se vyskytujı´studie z vysokosˇkolske´ho prostrˇedı´. Domnı´va´m se, zˇe neˇktere´jejich za´veˇry lze aplikovat i na strˇednı´sˇkoly, prˇedevsˇı´m s ohledem na fakt, zˇe popisujı´vy´uku programova´nı´od naprosty´ch za´kladu˚v prvnı´ch rocˇnı´cı´ch. Tato situace v zahranicˇı´ odpovı´da´ i situaci v cˇeske´m sˇkolstvı´, protozˇe neexistuje spolecˇna´koncepce vy´uky programova´nı´na strˇednı´ch sˇkola´ch a vysoke´sˇkoly jsou nuceny prˇedpokla´dat minima´lnı´(ne-li zˇa´dne´) znalosti svy´ch uchazecˇu˚o studium.

2. CAS – Computer algebra system, syste´my symbolicky´ch matematicky´ch vy´pocˇtu˚

2 Kapitola 1 Teoreticky´za´klad

Prˇed samotny´mi u´vahami o jednotlivy´ch jazycı´ch cˇi vy´vojovy´ch prostrˇedı´ch bude vhodne´odpoveˇdeˇt si na ota´zky „Koho budu ucˇit?“, „Co a procˇbudu ucˇit?“ – jaky´ch cı´lu˚chci dosa´hnout a „Jak to budu ucˇit?“ – tedy jaky´mi prostrˇedky. Z odpoveˇdı´na tyto ota´zky vyplyne i pozdeˇjsˇı´metodika hodnocenı´jazyku˚.

1.1 Koho budu ucˇit

Prˇi volbeˇvy´ukovy´ch metod, prostrˇedı´i jazyka sehraje velkou roli prˇedevsˇı´m veˇk zˇa´ku˚. Na za´kladnı´sˇkole a nizˇsˇı´m gymna´ziu bude nutne´zvolit prostrˇedı´, ktere´bude snazsˇı´na pochopenı´a prˇedevsˇı´m co nejdrˇı´ve prˇinese neˇjake´„hmatatelne´“ vy´sledky. Silny´m motivacˇnı´m prvkem je prˇedevsˇı´m pro chlapce snaha ovla´dnout stroj a naucˇit se s nı´m manipulovat, prˇinutit ho vykona´vat neˇjakou cˇinnost. Za´rovenˇje ale nutne´ mı´t na pameˇti, zˇe cˇı´m jsou zˇa´ci mladsˇı´, tı´m drˇı´ve se musı´ dopracovat neˇjake´ho zrˇetelne´ho pokroku, aby tato motivace neupadla. Vy´sledek jejich pra´ce nesmı´by´t prˇı´lisˇvzda´leny´a proto je vhodne´u´lohy pokud mozˇno rozdeˇlit na dı´lcˇı´proble´my se zrˇetelny´m dı´lcˇı´m vy´sledkem. Tento postup bude mı´t dobre´motivacˇnı´vy´sledky i u starsˇı´ch zˇa´ku˚, acˇkoliv uzˇnenı´nezbytneˇnutny´. Mnohe´dı´vky majı´v cˇeske´spolecˇnosti sta´le pocit, zˇe technika nenı´a snad ani nema´by´t jejich dome´nou, ale opeˇt u mladsˇı´ch zˇacˇek je uzˇzrˇetelny´u´stup od tohoto prˇedsudku a jejich motivacı´by´va´naopak zvı´davost a snaha proniknout do nezna´- me´ho prostrˇedı´. Velkou prˇednostı´pak by´va´jejich pı´le, dı´ky ktere´nenı´potrˇeba tak rychly´ch vy´sledku˚jako u chlapcu˚. Prˇesto jsou pro neˇbrzke´vy´sledky samostatne´ pra´ce take´znacˇneˇmotivujı´cı´, protozˇe zı´skajı´pocit, zˇe je v jejich sila´ch programova´nı´ porozumeˇt. Jednoducha´a prˇehledna´prostrˇedı´s efektnı´mi vy´sledky nabı´zı´nejen pro mladsˇı´ zˇa´ky ru˚zne´ graficke´jazyky. Zna´my´m a v CˇR i ve sveˇteˇrozsˇı´rˇeny´m prostrˇedı´m je naprˇı´- klad Robolab firmy Lego, ktery´je soucˇa´stı´roboticke´stavebnice Lego Mindstorms. V soucˇasne´dobeˇse na strˇednı´ch i vysˇsˇı´ch sˇkola´ch v zahranicˇı´prosazuje prostrˇedı´ Alice (viz kapitola 4.6), ktere´kombinuje graficky´za´pis s psany´m formou prˇı´kazu˚a dalsˇı´ch prvku˚jazyka v graficky´ch blocı´ch, ktere´do sebe zapadajı´pouze prˇi syntak- ticky spra´vny´ch konstrukcı´ch. S graficky´m za´pisem se mohou setkat i zˇa´ci cˇesky´ch sˇkol, ktere´ucˇı´za´klady programova´nı´v jazyce a prostrˇedı´Baltı´k od firmy SGP Sys- tems. Je samozrˇejmeˇdiskutabilnı´nakolik lze jesˇteˇoznacˇit za´pis programu pomocı´

3 1. TEORETICKY´ ZA´ KLAD obra´zkovy´ch bloku˚za ko´d v programovacı´m jazyce. Na tomto mı´steˇje ale nutne´si uveˇdomit, zˇe u mladsˇı´ch zˇa´ku˚je vhodne´kla´st veˇtsˇı´du˚raz na pochopenı´a nacvicˇenı´ urcˇity´ch principu˚(cykly, podmı´nky) ve zjednodusˇene´podobeˇ, bez za´teˇzˇe kompli- kovane´syntaxe. Graficky´m za´pisem je na´zorneˇomezeno skla´da´nı´komponent tak, aby vy´sledny´za´pis neobsahoval syntakticke´chyby a student se mohl zameˇrˇit vy´- hradneˇna se´mantiku ko´du, ktera´je v ra´mci paradigmatu vı´ce me´neˇuniverza´lneˇ pouzˇitelna´. Tı´mto prˇı´stupem se podporuje algoritmicke´mysˇlenı´a prˇedstavivost a dosahuje pomeˇrneˇrychly´ch vy´sledku˚. U´ lohy by meˇly by´t pomeˇrneˇ jednoduche´, prˇı´mocˇare´ a neprˇı´lisˇ abstraktnı´, ob- zvla´sˇteˇpro deˇti na za´kladnı´sˇkole nebo v nizˇsˇı´ch rocˇnı´cı´ch osmilete´ho gymna´zia. Z me´vlastnı´zkusˇenosti vsˇak vyply´va´, zˇe uzˇprˇiblizˇneˇtrˇina´ctiletı´studenti v tercii osmilete´ho gymna´zia jsou schopni sami si na internetu najı´t, upravit a prˇedevsˇı´m pochopit skript v jazyce VBS,1 ktery´v nekonecˇne´m cyklu spousˇtı´Pozna´mkovy´blok v MS Windows, prˇebı´ra´ focus2 a vepisuje kra´tky´text, cozˇprakticky vede k zablo- kova´nı´pocˇı´tacˇe, protozˇe se rychle plnı´pameˇt’ a prˇi neusta´le´m prˇebı´ra´nı´focusu je prakticky nemozˇne´stihnout i za pouzˇitı´kla´vesovy´ch zkratek odhla´sit uzˇivatele nebo ukoncˇit proces. U tohoto prˇı´kladu je vsˇak nutne´zmı´nit, zˇe se jednalo jednak o po- meˇrneˇtechnicky i celkoveˇintelektua´lneˇvyspeˇle´chlapce (ne vsˇechny ve skupineˇ), da´le mezi studenty osmilete´ho studia a cˇtyrˇlete´ho studia je znatelny´intelektua´lnı´ rozdı´l v neprospeˇch studentu˚, kterˇı´de´le setrva´vajı´na za´kladnı´sˇkole (cozˇale mu˚zˇe by´t cˇa´stecˇneˇda´no i tı´m, zˇe v prˇijı´macı´m rˇı´zenı´do osmilete´ho studia je na zmı´neˇne´ sˇkole vy´razneˇ vysˇsˇı´ prˇebytek zˇadatelu˚ oproti prˇijaty´m a tedy vysˇsˇı´ konkurence). A prˇedevsˇı´m studenti upravili uzˇexistujı´cı´ko´d jazyka, ktery´ma´pomeˇrneˇjednodu- cha´syntakticka´pravidla. U starsˇı´ch zˇa´ku˚(druhy´stupenˇgymna´zia) je uzˇzcela jisteˇvhodne´pouzˇı´vat pro- gramovacı´jazyk zapisovany´v textove´podobeˇ. To s sebou prˇina´sˇı´pomeˇrneˇna´rocˇny´ proble´m formulova´nı´mysˇlenek v textove´podobeˇa transkripce algoritmu do kon- kre´tnı´ho jazyka vcˇetneˇdodrzˇenı´syntakticke´spra´vnosti. Je proto zˇa´doucı´nevyne- cha´vat fa´zi zakreslenı´alesponˇdı´lcˇı´ch cˇa´stı´algoritmu v neˇjake´graficke´podobeˇ(naprˇ. vy´vojovy´m diagramem, neˇktery´m UML3 diagramem apod.), cozˇvede ke snazsˇı´mu prˇepisu do programovacı´ho jazyka – zˇa´k se mu˚zˇe soustrˇedit na samotny´za´pis (syn- taxi, ktera´naprˇ. v jazyce C deˇla´cˇaste´proble´my) a nemusı´v hlaveˇneusta´le udrzˇovat prˇedstavu o proble´mu (se´mantiku ko´du), kterou ma´zakreslenou diagramem. Tex- tovy´za´pis prˇedstavuje nejveˇtsˇı´proble´m v nelinea´rnı´ch krocı´ch, jako je trˇeba za´pis cyklu˚nebo podmı´nek. Kombinace vı´ce podmı´nek nebo cyklu˚s sebou nese za´sadnı´ proble´m s orientacı´v textove´podobeˇko´du. Zˇ a´ku˚m pomu˚zˇe krokova´nı´ko´du po jed- notlivy´ch prˇı´kazech a soubeˇzˇna´kontrola algoritmu v diagramu. Starsˇı´zˇa´ci jizˇtolik

1. VBS – Visual Basic Script, skriptovacı´jazyk spolecˇnosti Microsoft uzˇı´vany´prˇedevsˇı´m k programo- va´nı´maker v kancela´rˇske´m balı´ku MS Office, ale take´k programova´nı´viru˚pro MS Windows 2. zameˇrˇenı´prvku graficke´ho rozhranı´, ktery´je pak tzv. aktivnı´, naprˇ. je mozˇne´do neˇj vepisovat z kla´vesnice apod. 3. UML – Unified Modeling Language, skupina graficky´ch modelovacı´ch jazyku˚pro grafickou re- prezentaci ru˚zny´ch procesu˚

4 1. TEORETICKY´ ZA´ KLAD nevyzˇadujı´rychle´vy´sledky sve´ho snazˇenı´, prˇesto tyto vedou k lepsˇı´mu soustrˇedeˇnı´ a prˇedevsˇı´m porozumeˇnı´probı´rane´konstrukci. U´ koly kombinujı´cı´v jedne´fa´zi vı´ce te´mat (naprˇ. cyklus s podmı´neˇny´m vy´razem v teˇle cyklu) doporucˇuji ze zkusˇenosti rozdeˇlit na postupneˇrˇesˇene´fa´ze (nejprve vytvorˇit cyklus s vy´razem bez podmı´nky a teprve po oveˇrˇenı´jeho spra´vnosti do neˇj doplnit podmı´nku).

1.2 Forma vy´uky

Podobneˇjako veˇk bude nutne´bra´t v u´vahu i formu vy´uky ve smyslu zarˇazenı´ vy´uky do beˇzˇny´ch hodin, volitelne´ho krouzˇku nebo specializovane´ho semina´rˇe pro vysˇsˇı´rocˇnı´ky. Vzhledem k pocˇtu hodin informatiky a mnozˇstvı´te´mat v Ra´mcovy´ch vzdeˇla´vacı´ch programech nelze prˇedpokla´dat, zˇe by strˇednı´sˇkoly, ktere´nejsou na informatiku zameˇrˇene´, mohly veˇnovat cˇas programova´nı´v rˇa´dne´vy´uce. Pokud ano, bylo by urcˇiteˇvhodne´zameˇrˇit se prˇedevsˇı´m na samotnou algoritmizaci a na´stroje a jazyky, ktere´uprˇednostnˇujı´snadny´popis algoritmu prˇed bohatsˇı´mi ale slozˇiteˇjsˇı´mi vyjadrˇovacı´mi schopnostmi jazyka. Bude vhodne´prova´deˇt analy´zu proble´mu, volit zajı´mave´u´lohy a prˇı´klady komplikovane´spı´sˇe na na´vrh nezˇsamotny´za´pis. Alternativnı´mozˇnostı´je volitelny´krouzˇek v pru˚beˇhu studia. Touto formou se jizˇ na neˇktery´ch sˇkola´ch vyucˇuje naprˇ. programova´nı´zmı´neˇny´ch roboticky´ch stavebnic Lego Mindstorms. Takove´krouzˇky si veˇtsˇinou zapisujı´zˇa´ci majı´cı´o programova´nı´ za´jem. O to vı´ce je potrˇeba je zaujmout a v prvnı´fa´zi vy´uky je neodradit prˇehna- ny´m du˚razem na teorii a forma´lnı´za´pis. Ovsˇem ani zde nesmı´chybeˇt pochopenı´ probı´rane´la´tky. Programova´nı´metodou pokus-omyl vede k neznalosti hranic svy´ch mozˇnostı´, jak zminˇuje [11, str. 2]. Tyto hodiny nabı´zejı´pomeˇrneˇsˇiroky´prostor, ktery´ je ale za´visly´na hodinove´dotaci krouzˇku. Obvykle´dvouhodinove´semina´rˇe jsou prˇi individua´lnı´m prˇı´stupu ke studentu˚m nepostacˇujı´cı´. Asi nejrozsˇı´rˇeneˇjsˇı´formou jsou semina´rˇe pro vysˇsˇı´rocˇnı´ky, prˇedevsˇı´m studenty majı´cı´za´jem o maturitu z informatiky. V takovy´ch semina´rˇı´ch je naopak vhodne´ zabı´hat i do forma´lnı´ch detailu˚a teorie, nenecha´vat uzˇprˇı´lisˇprostoru pro intuitivnı´ rˇesˇenı´proble´mu˚, ktere´by vedlo k nedisciplinovane´mu rˇesˇenı´u´kolu˚a naucˇenı´zlo- zvyku˚. Kreativitu studentu˚je opeˇt nutne´smeˇrˇovat spı´sˇe do fa´ze analy´zy a na´vrhu rˇesˇenı´, nezˇdo fa´ze samotne´ho za´pisu ko´du, na kterou se kladl du˚raz ve starsˇı´ch ucˇebnicı´ch. Je velmi vhodne´pecˇliveˇdba´t na forma´lnı´u´pravu ko´du a neakceptovat neesteticky zapsany´a nedostatecˇneˇkomentovany´ko´d, protozˇe to u slozˇiteˇjsˇı´ch kon- strukcı´cˇasto znemozˇnˇuje jejich pochopenı´a student, ktery´ko´d necˇlenı´, nezarovna´va´ nebo nekomentuje zcela automaticky se drˇı´ve nebo pozdeˇji zacˇne v ko´du ztra´cet. Obvykle se to projevı´uzˇprˇi za´pisu vnorˇeny´ch cyklu˚. Pro vsˇechny formy vy´uky i veˇkove´skupiny lze rˇı´ci, zˇe programa´torske´u´koly v jazyce Pascal, BASIC nebo C beˇzˇne´v 90. letech 20. stoletı´, ktere´u na´s vycha´zely v ru˚zny´ch ucˇebnicı´ch a jejichzˇu´kolem byl vy´stup v termina´lu od pouhe´ho vypsa´nı´

5 1. TEORETICKY´ ZA´ KLAD

„Ahoj sveˇte“ po vy´pocˇet faktoria´lu nebo obsahu obde´lnı´ku, jsou jen ma´lo vhodne´.4 Deˇti se s termina´lem beˇzˇneˇnesetka´vajı´, majı´vu˚cˇi jeho pouzˇı´va´nı´obcˇas negativnı´ prˇedsudky a povazˇujı´ho za nemodernı´. V kombinaci s abstraktnı´m matematicky´m prˇı´kladem jde o ma´lo motivujı´cı´azˇspı´sˇe demotivujı´cı´u´kol. Matematicke´proble´my je le´pe zarˇazovat v kontextu prakticke´ho prˇı´kladu, aby studenti zı´skali prˇedstavu, zˇe abstraktnı´matematicky´za´pis jim ve skutecˇnosti umozˇnı´rˇesˇenı´prakticke´ho pro- ble´mu (naprˇ. model pohybu mı´cˇku prˇi na´razu do prˇeka´zˇky). Vsˇechny trˇi zmı´neˇne´formy pravdeˇpodobneˇpovedou k pomeˇrneˇmale´mu pocˇtu studentu˚ve skupineˇ. To je velka´vy´hoda, protozˇe kvalitnı´vy´uka programova´nı´vyzˇa- duje individua´lnı´prˇı´stup. Prˇestozˇe lze zave´st ru˚zne´podpu˚rne´na´stroje cˇi metodiky (ktere´budou popsa´ny v dalsˇı´m textu), nic nenahradı´pecˇlive´procˇtenı´odevzdane´ho ko´du prˇı´mo ucˇitelem. Lze tak odhalit naprˇı´klad nedodrzˇova´nı´konvencı´(pojmeno- va´va´nı´promeˇnny´ch, zarovna´nı´ko´du, komenta´rˇe) nebo realizaci proble´mu neefek- tivnı´m nebo naopak origina´lnı´m zpu˚sobem. Tuto zpeˇtnou vazbu neposkytne zˇa´dne´ automatizovane´testova´nı´. Autorˇi [17] se navı´c odvola´vajı´na dveˇstudie (mneˇbo- huzˇel nedostupne´), ktere´zminˇujı´neˇkolikana´sobneˇlepsˇı´studijnı´vy´sledky studentu˚ s osobnı´m prˇı´stupem nezˇv beˇzˇny´ch hromadny´ch lekcı´ch. Z me´vlastnı´zkusˇenosti vyply´va´, zˇe neˇkterˇı´studenti majı´proble´m pochopit u´sek ko´du napsany´vyucˇujı´cı´m na tabuli, zatı´mco pokud jim tenty´zˇko´d diktuji se stejny´m komenta´rˇem a oni jej sami pı´sˇı´na sve´m monitoru, pomeˇrneˇrychle se v neˇm zorientujı´.

1.3 Co a procˇbudu ucˇit

Specifikovat co prˇesneˇspada´do oblasti vy´uky programova´nı´je teˇzˇke´. Autorˇi [19, str. 148] identifikujı´5 dome´n, ktere´jsou vy´ukou programova´nı´ovlivneˇny: obecna´ orientace (co jsou to programy a k cˇemu se dajı´vyuzˇı´vat), implementacˇnı´stroj (po- cˇı´tacˇjako prostrˇedı´ve ktere´m se programy vykona´vajı´), notace (syntax a se´mantika konkre´tnı´ho programovacı´ho jazyka – za´klad soucˇasne´vy´uky), struktury (sche´mata a pla´ny, modelova´nı´proble´mu) a pragmatika (schopnost pla´novat, vyvı´jet, testovat, opravovat chyby). Tyto dome´ny by meˇly by´t alesponˇcˇa´stecˇneˇvy´ukou pokryty. Prˇedneˇje nutne´(v souladu s RVP) ucˇit analyticke´mu mysˇlenı´a systematicke´mu (defenzivnı´mu) rˇesˇenı´proble´mu˚. . . K tomu je jako prostrˇedek nutne´ucˇit i syntaxi a se´mantiku neˇktere´ho jazyka, cozˇby vsˇak nemeˇlo by´t povazˇova´no za cı´l. Cı´lem by take´nemeˇlo by´t ovla´da´nı´konkre´tnı´ho vy´vojove´ho prostrˇedı´. Zvoleny´programovacı´jazyk by meˇl umozˇnˇovat (prˇehledny´) za´pis obvykly´ch konstrukcı´. Na u´rovni strˇednı´sˇkoly se obvykle prˇedpokla´da´pochopenı´na´sledujı´cı´ch konstrukcı´:

4. V Cˇla´nku Using BlueJ to Introduce Programming v [4, str. 107] autor zminˇuje, zˇe oblı´beny´u´vodnı´ prˇı´klad „Hello world“ v objektove´m paradigmatu nenaucˇı´ studenty vu˚bec nic. Domnı´va´m se, zˇe nenaucˇı´nic ani prˇi vy´uce v jiny´ch paradigmatech uzˇproto, zˇe se jedna´o pouhe´vola´nı´jedne´funkce, ktere´mu˚zˇeme teˇzˇko oznacˇit za rˇesˇenı´neˇjake´ho proble´mu – implementovany´algoritmus. I studenti jej vnı´majı´jako „program, ktery´nic nedeˇla´“ a proto ani nemotivuje.

6 1. TEORETICKY´ ZA´ KLAD

• promeˇnne´a datove´typy

• pole a vı´cerozmeˇrna´pole

• dynamicka´alokace pameˇti (ukazatele)

• datove´struktury fronta a za´sobnı´k

• podmı´nky

• vnorˇenı´podmı´nek a prˇepis do jedne´slozˇene´podmı´nky

• za´kladnı´druhy cyklu˚

• vnorˇene´cykly

• funkce – pouzˇitı´knihovnı´ch funkcı´, deklarace vlastnı´ch funkcı´

• rekurze

Je zrˇejme´, zˇe tyto pojmy uzˇvynucujı´pouzˇitı´urcˇite´ho jazyka, protozˇe bude prakticky nemozˇne´vysveˇtlit studentu˚m problematiku datovy´ch typu˚na prˇı´kladu jazyka, ktery´ je slabeˇ5 a dynamicky6 typovany´. Naopak jazyk typovany´silneˇ7 (takovy´neumozˇ- nˇuje prova´deˇt libovolne´operace nad ru˚zny´mi datovy´mi typy, naprˇı´klad scˇı´tat cˇı´slo s rˇeteˇzcem) a staticky8 (kontroluje pouzˇite´datove´typy jizˇprˇi kompilaci a ne azˇza beˇhu) s pokud mozˇno explicitnı´mi deklaracemi (vynucuje na programa´torovi, aby prˇed pouzˇitı´m promeˇnne´deklaroval jejı´datovy´typ) bude pro vysveˇtlenı´a pochopenı´ datovy´ch typu˚idea´lnı´. Podobneˇte´ma dynamicke´alokace pameˇti lze vysveˇtlovat bud’pomocı´ukazatelu˚ (pointer) nebo referencı´na objekt. Je nutne´zva´zˇit, zda je nezbytne´ucˇit studenty pracovat s pameˇtı´prˇı´mo pomocı´ukazatelu˚, cozˇje jednak teˇzˇke´na pochopenı´(jak potvrzuje i [16]) a take´zdrojem cˇasty´ch chyb prˇi pocˇı´ta´nı´s ukazateli, sˇpatne´alo- kaci nebo opomenute´dealokaci prostoru. Prˇesto to umozˇnˇuje pomeˇrneˇdetailneˇa nı´zkou´rovnˇoveˇproniknout do problematiky ukla´da´nı´dat na pocˇı´tacˇi. Pra´ce s uka- zateli vsˇak prakticky vynucuje vy´uku jazyka C. Naproti tomu dynamicka´alokace v jazycı´ch s referencemi na objekty je pomeˇrneˇprˇı´mocˇarˇe vysveˇtlitelna´a snadno po- chopitelna´. Je nutne´prˇedem zva´zˇit, zda problematiku ukazatelu˚neprˇenechat radeˇji vysoky´m sˇkola´m. Avinash Kak hned v u´vodu [12] zminˇuje, zˇe se domnı´va´, zˇe insti- tuce vyucˇujı´cı´v jazycı´ch jako Java, ktere´neobsahujı´na´rocˇne´prvky jako jsou pra´veˇ ukazatele, jsou zodpoveˇdne´za velke´mnozˇstvı´programa´toru˚, kterˇı´jsou vydeˇsˇenı´

5. slabeˇtypovany´jazyk prova´dı´implicitnı´prˇetypova´nı´(naprˇ. v prˇı´padeˇprˇirˇazenı´konstanty), nedo- ka´zˇe tedy detekovat chybneˇpouzˇity´datovy´typ 6. dynamicky typovany´jazyk va´zˇe datovy´typ na pra´veˇprˇirˇazenou hodnotu – datovy´typ lze proto urcˇit azˇpo prˇirˇazenı´za beˇhu programu 7. silneˇtypovany´jazyk prova´dı´kontrolu datovy´ch typu˚a nedovolı´implicitnı´prˇetypova´nı´, mı´sto toho detekuje chybu 8. staticky typovany´jazyk vyzˇaduje uvedenı´datove´ho typu jizˇprˇi deklaraci promeˇnne´

7 1. TEORETICKY´ ZA´ KLAD z rea´lny´ch programa´torsky´ch u´kolu˚, ktere´pak cˇasto obsahujı´chyby v pra´ci s pameˇtı´, prˇetecˇenı´za´sobnı´ku, proble´my s cˇasovou souslednostı´apod. Jako rˇesˇenı´tohoto pro- ble´mu bych videˇl odsunutı´vy´uky ukazatelu˚a spra´vy pameˇti bud’do vysokosˇkolske´ la´tky nebo le´pe jako rozsˇirˇujı´cı´la´tku ke konci strˇedosˇkolske´ho studia. Vy´sˇe zmı´neˇny´seznam obsahuje jen te´mata, ktera´se dnes beˇzˇneˇucˇı´a vycha´zı´ze starsˇı´literatury. Jsou nicme´neˇnatolik obecna´, zˇe azˇna vy´jimku funkcı´, je netrˇeba va´- zat na strukturovane´paradigma, ktere´na neˇktery´ch sˇkola´ch sta´le prˇetrva´va´. Pokud chceme zava´deˇt objektovy´prˇı´stup, je nutne´doplnit jesˇteˇnova´te´mata: • pojmy OOP (objekt, trˇı´da, abstraktnı´trˇı´da, instance, rozhranı´)

• deˇdicˇnost

• polymorfismus

• prˇeteˇzˇova´nı´a prˇedefinova´nı´metod

• vy´jimky Aby byly dodrzˇeny proklamace RVP a prˇedevsˇı´m, aby byla vy´uka programo- va´nı´opravdu smysluplna´, meˇlo by by´t soucˇa´stı´probı´rane´la´tky i modelova´nı´(nejen v na´vaznosti na objektovy´prˇı´stup, ale celkova´schopnost dekompozice proble´mu) a algoritmizace s graficky´m zna´zorneˇnı´m algoritmu˚. Modelova´nı´s objektovy´m prˇı´- stupem bylo do vy´uky informatiky zavedeno v Neˇmecku (viz [6]), cozˇjsem meˇl mozˇnost videˇt prˇi na´slechu v hodineˇinformatiky v poslednı´m rocˇnı´ku gymna´zia v Mu¨nsteru. Studenti dostali zadany´proble´m, ktery´nejprve analyzovali spolecˇneˇ v lavicı´ch, pak po skupinka´ch vytvorˇili strucˇneˇmodel a teprve pote´se prˇesunuli k pocˇı´tacˇi, aby u´kol naprogramovali. Toto rˇesˇenı´se mi zda´by´t idea´lnı´.

1.4 Paradigmata

Prvnı´ hrube´ rozdeˇlenı´ jazyku˚, ktere´ bychom prˇi volbeˇ vhodne´ho jazyka meˇli respektovat, je deˇlenı´ podle paradigmatu jazyka. Paradigma je souhrn za´kladnı´ch postupu˚jak formulovat a rˇesˇit proble´m a urcˇuje tedy zpu˚sob nebo strukturu, jakou programa´tor tvorˇı´ko´d. Volba paradigmatu ma´za´sadnı´vliv na zpu˚sob nahlı´zˇenı´na rˇesˇenı´proble´mu a je tedy u´zce spjata uzˇse samotny´m na´vrhem algoritmu a modelem aplikace.

1.4.1 Funkciona´lnı´ Funkciona´lnı´ paradigma zapisuje program jako jednu funkci, ktera´ mu˚zˇe by´t rozlozˇitelna´na podfunkce (program je pak slozˇenou funkcı´). Vykona´va´nı´programu spocˇı´va´v dosazenı´vstupnı´ch parametru˚a postupne´m zjednodusˇova´nı´funkcı´azˇ do tvaru nezjednodusˇitelne´ho vy´roku, ktery´je vy´sledkem programu. Programa´tor za´pisem programu deklaruje, co je potrˇeba spocˇı´tat. Nepı´sˇe ale explicitnı´postup jak k vy´sledku dojı´t.

8 1. TEORETICKY´ ZA´ KLAD

Vy´uka ve funkciona´lnı´m paradigmatu je beˇzˇnou soucˇa´stı´povinne´vy´uky na vy- soky´ch sˇkola´ch informaticke´ho zameˇrˇenı´. Pro pochopenı´tohoto paradigmatu je ne- zbytna´du˚kladna´znalost funkcı´z matematiky. To tvorˇı´velkou prˇeka´zˇku pro vy´uku tohoto paradigmatu na strˇednı´ch sˇkola´ch, vzhledem k zarˇazenı´ te´to la´tky azˇ do vysˇsˇı´ch rocˇnı´ku˚a jejı´cˇasto nedostatecˇne´zazˇitı´studenty. Dalsˇı´prˇeka´zˇkou mu˚zˇe by´t male´rozsˇı´rˇenı´v praxi, ktere´zpu˚sobuje nizˇsˇı´atraktivitu pro studenty a prˇedevsˇı´m velmi chudou nabı´dku studijnı´ch materia´lu˚a programo- vacı´ch nebo vy´ukovy´ch prostrˇedı´. Jazyky toho paradigmatu by´vajı´cˇasto poneˇkud hanliveˇoznacˇova´ny za „akademickou za´lezˇitost“, s cˇı´mzˇnelze souhlasit, protozˇe pro rˇesˇenı´neˇktery´ch typu˚u´loh je funkciona´lnı´prˇı´stup vhodneˇjsˇı´, at’uzˇjsou to aplikace skupiny CAS9 nebo trˇeba sazba not pomocı´programu Lilypond.10

1.4.2 Logicke´ Podobneˇjako funkciona´lnı´paradigma, ani logicke´paradigma nelze doporucˇit pro vy´uku na strˇednı´sˇkole a to ze stejny´ch du˚vodu˚. Program je tentokra´t logicky´m vy´rokem, ktery´se vyhodnocuje, resp. dokazuje. I tato kapitola strˇedosˇkolske´ma- tematiky je zarˇazena ve vzdeˇla´vacı´ch pla´nech veˇtsˇinou v takovou dobu a v takove´ mı´rˇe, zˇe nepostacˇuje ani jako nezbytny´za´klad, aby bylo mozˇno v tomto paradig- matu programovat. Nejzna´meˇjsˇı´m jazykem tohoto paradigmatu je Prolog, ktery´se pouzˇı´va´prˇedevsˇı´m pro u´lohy pocˇı´tacˇove´lingvistiky a umeˇle´inteligence, cozˇje pro potrˇeby strˇedosˇkolske´vy´uky prˇı´lisˇspecializovana´oblast.

1.4.3 Imperativnı´strukturovane´ Imperativnı´paradigma je principia´lneˇshodne´s cˇinnostı´pocˇı´tacˇe nebo prˇesneˇji rˇecˇeno procesoru, pocha´zı´ proto z obdobı´ prvnı´ho vy´razne´ho rozvoje pocˇı´tacˇu˚ – 60. let 20. stoletı´. Imperativneˇnapsany´program je posloupnostı´prˇı´kazu˚, cozˇodpo- vı´da´posloupnosti instrukcı´prova´deˇny´ch procesorem. Imperativnı´za´pis (na rozdı´l od funkciona´lnı´ho a logicke´ho) prˇı´mo popisuje algoritmus neboli postup rˇesˇenı´pro- ble´mu. To je z didakticke´ho hlediska idea´lnı´, protozˇe mezi algoritmem a za´pisem ko´du v imperativnı´m jazyce existuje prˇı´ma´ souvislost a studenti si tuto paralelu snadno uveˇdomı´, byt’ i tak jim mu˚zˇe prˇepis algoritmu z jeho mysˇlene´podoby do psane´(formou konkre´tnı´ho jazyka) nebo graficke´(formou ru˚zny´ch typu˚diagramu˚) deˇlat v prvnı´fa´zi vy´uky potı´zˇe. Imperativnı´prˇı´stup je prˇi vy´uce v cˇesky´ch sˇkola´ch beˇzˇny´. Plynule navazuje na vysveˇtlenı´pojmu algoritmus, prˇi ktere´m se s oblibou pouzˇı´va´analogie s kucharˇ- sky´m receptem nebo jiny´m na´vodem. Tyto prˇı´klady mohou by´t pro neˇktere´studenty matoucı´a to prˇedevsˇı´m tehdy, pokud se vynecha´vysveˇtlenı´ota´zky „Co je vlastneˇ

9. CAS – Computer algebra system, tj. syste´my pocˇı´tacˇove´algebry pouzˇı´vane´k algebraicky´m vy´po- cˇtu˚m na pocˇı´tacˇi (naprˇ. program Maxima je napsa´n ve funkciona´lnı´m jazyce Lisp) 10. Program Lilypond je urcˇen pro sazbu i rozsa´hly´ch notovy´ch partitur a jako jazyk pro rozsˇı´rˇenı´a popis a u´pravu dokumentu pouzˇı´va´funkciona´lnı´jazyk Scheme.

9 1. TEORETICKY´ ZA´ KLAD prˇı´kaz?“ a studenti nevı´, s jakou mı´rou abstrakce mohou pracovat. Algoritmus pro uvarˇenı´ka´vy mu˚zˇe by´t volneˇzapsa´n od jednoduche´podoby imperativnı´m pseudoja- zykem s jednı´m prˇı´kazem Uvarˇ Ka´vu;, prˇes vı´ce komplikovanou podobu slozˇenou z prˇı´kazu˚ Nachystej Hrnı´cˇek; Uvarˇ Vodu; Nasypej Ka´vu;Nalij Vodu; naprˇı´klad uzˇi s podmı´nkami prˇi nedostatku ka´vy nebo prˇedem nachystany´m hrnı´cˇ- kem, azˇpo zcela komplikovanou podobu uvazˇujı´cı´rozepsa´nı´jednotlivy´ch pohybu˚ prˇi zveda´nı´hrnı´cˇku. Proto je vhodne´uzˇv te´to fa´zi vy´uky vyuzˇı´vat neˇjaky´konkre´tnı´ jednoduchy´imperativnı´jazyk (trˇeba jazyk Karel) nebo alesponˇspecifikovat prˇesneˇ mı´ru abstrakce se kterou pracujeme. Samotne´imperativnı´paradigma mu˚zˇe zpu˚sobovat v rozsa´hlejsˇı´m ko´du snı´zˇenı´ prˇehlednosti a proble´my se spra´vnostı´beˇhu programu. Zpu˚sobuje to jednak de´lka ko´du a take´ pouzˇı´va´nı´ prˇı´kazu skoku goto (viz kapitola „Co vadı´ na skocı´ch“ v [7]). Proto vznikla varianta imperativnı´ho prˇı´stupu oznacˇovana´jako strukturovane´ programova´nı´. To prˇikazuje cˇlenit ko´d do bloku˚– funkcı´nebo procedur a zakazuje vyuzˇitı´prˇı´kazu skoku. Mı´sto neˇj se pouzˇı´va´pouze selekce (podmı´nky) nebo cykly. Mezi jazyky strukturovane´ho paradigmatu se rˇadı´i drˇı´ve velmi oblı´beny´a hojneˇ vyucˇovany´Pascal nebo jazyk C, ktery´postupneˇvytlacˇuje cˇisteˇimperativnı´jazyk symbolicky´ch adres (po prˇekladacˇi chybneˇnazy´vany´Assembler) z jeho dome´ny – programova´nı´mikrocˇipu˚. Pro shrnutı´lze dodat, zˇe strukturovane´paradigma je pro vy´uku velmi vhodna´ volba a v minulosti bylo pro vy´uku na u´rovni strˇednı´ch sˇkol vyuzˇı´va´no a zˇe by´va´ neˇkdy zameˇnˇova´no s procedura´lnı´m paradigmatem, ktere´je mezistupneˇm mezi im- perativnı´m a strukturovany´m. Obsahuje pojmenovane´bloky ko´du (procedury), ale jesˇteˇnevynucuje pouzˇı´va´nı´podmı´nek a cyklu˚mı´sto prˇı´kazu skoku.

1.4.4 Objektoveˇorientovane´ Ne o moc noveˇjsˇı´m prˇı´stupem oproti strukturovane´mu je objektove´paradigma. Zacˇa´tky OOP (Object oriented programming) spadajı´do pocˇa´tku 60. let 20. stoletı´. Prvnı´m objektovy´m jazykem byla Simula urcˇena´pro simulace a vy´voj zacˇal na MIT na stroji PDP-1. Pojem OOP byl poprve´pouzˇit firmou Xerox v jejich jazyce Smalltalk.11 Je ota´zkou, procˇbyl v minulosti objektovy´prˇı´stup na strˇednı´ch sˇkola´ch vytlacˇen pra´veˇstrukturovany´m programova´nı´, ale lze spekulovat, zˇe to zpu˚sobily osmibitove´pocˇı´tacˇe (na ktery´ch vy´uka ve svy´ch pocˇa´tcı´ch zacˇı´nala) s vestaveˇny´m interpretrem (imperativnı´ho) ja- zyka BASIC. Prˇi pozdeˇjsˇı´m prˇechodu na stroje, ktere´by zvla´daly trˇeba i zmı´neˇny´ Smalltalk pak zvı´teˇzil opeˇt imperativnı´Pascal nejspı´sˇdı´ky sve´mu deklarovane´mu zameˇrˇenı´na vy´uku a blı´zkosti k jazyku BASIC. OOP se dostalo do oblasti za´jmu vyucˇujı´cı´ch informatiky s rozsˇı´rˇenı´m OS Win- dows. Na neˇktery´ch sˇkola´ch se zacˇalo vyucˇovat v jazyce Delphi nebo Visual Basic (zde je opeˇt videˇt vazba na prˇedchozı´vy´voj, jelikozˇDelphi je na´stupce Pascalu, z je- hozˇvarianty od firmy Borland vycha´zı´; podobneˇVisual Basic je na´stupcem jazyka

11. citace http://www.exforsys.com/tutorials/oops/the-history-of-object- oriented-programming.

10 1. TEORETICKY´ ZA´ KLAD

BASIC). Bohuzˇel vy´uka veˇtsˇinou smeˇrˇovala vı´ce k pra´ci s GUI12 a pojem objektu˚byl neˇkdy zuzˇova´n na prvky formula´rˇe (okna aplikace). Nynı´zazˇı´va´OOP novou e´ru za´jmu prˇedevsˇı´m dı´ky jazyku Java a pozvolna i dı´ky zavedenı´objektu˚do jazyka PHP od verze 5. Objektovy´prˇı´stup popisuje program jako souhrn objektu˚(samostatny´ch entit), ktere´spolu komunikujı´skrze sve´metody (ty jsou paralelou funkcı´a procedur ve strukturovane´m prˇı´stupu) a mohou meˇnit i vlastnosti objektu˚, tzv. atributy. Tako- vy´to prˇı´stup ma´oproti strukturovane´mu za´sadnı´vy´hodu prˇedevsˇı´m v prˇehlednosti ko´du. Nevy´hodou je, zˇe programa´tor musı´ dodrzˇovat urcˇita´ pravidla a zna´t po- meˇrneˇrozsa´hlou teorii ohledneˇkonstrukce a chova´nı´objektu˚. Prˇesto je OOP dnes v praxi zcela prˇevla´dajı´cı´prˇı´stup, protozˇe (acˇkoliv existujı´proble´my, k jejichzˇrˇesˇenı´ lze OOP vyuzˇı´t jen s obtı´zˇemi a kontraproduktivneˇ) veˇtsˇina programu˚napsany´ch v tomto paradigmatu se sna´z navrhuje, udrzˇuje i upravuje. Objektove´ paradigma lze take´ zarˇadit mezi variantu imperativnı´ho prˇı´stupu, jelikozˇsamotne´metody objektu˚jsou uzˇprogramova´ny imperativneˇ. OOP je proto svy´m zpu˚sobem rozsˇı´rˇenı´m strukturovane´ho paradigmatu.

1.4.5 Uda´lostmi rˇı´zene´

Uda´lostmi rˇı´zene´ programova´nı´ se vyuzˇı´va´ prˇedevsˇı´m u graficky´ch aplikacı´ u ktery´ch docha´zı´ ke vzniku uda´lostı´ – naprˇ. stisknutı´ kla´vesy, kliknutı´ mysˇı´ na neˇjaky´prvek okna, pohyb kurzoru. Programa´tor vytvorˇı´(imperativnı´) ko´d, ktery´se vyvola´azˇprˇi vzniku prˇı´slusˇne´uda´losti. Tento ko´d se oznacˇuje jako obsluha uda´- losti neboli handler. Samotny´program by bylo mozˇne´popsat jako nekonecˇny´cyklus, ve ktere´m docha´zı´k detekci uda´lostı´a jejich na´sledne´obsluze, kterou prova´dı´prˇı´- slusˇny´handler. Jedna z obsluh uda´lostı´mu˚zˇe zpu˚sobit i ukoncˇenı´cyklu, cˇı´mzˇukoncˇı´ program. Tento prˇı´stup je veˇtsˇinou kombinova´n s objektovy´m programova´nı´m. Prˇesto jej lze implementovat i u trivia´lnı´ch u´loh jako trˇeba programova´nı´mikroprocesoru ve (strukturovane´m) jazyce C, za u´cˇelem ovla´da´nı´LED neˇkolika tlacˇı´tky.

1.4.6 Multiparadigmaticke´jazyky

Spousta jazyku˚v sobeˇkombinuje vı´ce ru˚zny´ch paradigmat. Cˇasto to by´va´ob- jektove´s uda´lostmi rˇı´zeny´m (Java, Visual Basic), jazyk C++ kvu˚li kompatibiliteˇs C kombinuje strukturovane´s objektovy´m a prˇi pouzˇitı´neˇktery´ch knihoven pro GUI i uda´lostmi rˇı´zene´. Jazyk Python je zajı´mavy´tı´m, zˇe kombinuje strukturovane´, funk- ciona´lnı´i objektove´paradigma. Podobneˇdrˇı´ve zmı´neˇny´jazyk Scheme nenı´cˇisteˇ funkciona´lnı´, ale obsahuje i imperativnı´prvky.

12. GUI – (graficke´uzˇivatelske´rozhranı´)

11 1. TEORETICKY´ ZA´ KLAD

1.5 Zarˇazenı´paradigmat do vy´uky

Samotna´ volba paradigmatu nebo spı´sˇe paradigmat s sebou prˇina´sˇı´ proble´m, jak se zvoleny´m prˇı´stupem metodicky nalozˇit. Tento proble´m vyvsta´va´prˇedevsˇı´m v kontextu diskuse mezi strukturovany´m (imperativnı´m) a objektovy´m prˇı´stupem. At’ uzˇ se rozhodneme ucˇit strukturovane´ i objektove´ paradigma, nebo jen OOP (ktere´v sobeˇskry´va´prvky strukturovane´ho prˇı´stupu: podmı´nky a cykly), je nutne´ se rozhodnout, cˇı´m zacˇı´t a jak vy´uku usporˇa´dat. V soucˇasne´dobeˇjsou diskutovane´ 3 prˇı´stupy: Objects-first, Objects-later a Model-first. Objects-first klade du˚raz na teorii OOP a znamena´, zˇe prvnı´ s cˇı´m student- zacˇa´tecˇnı´k prˇijde do kontaktu je vysveˇtlenı´principu˚OOP jako jsou pojmy trˇı´da, objekt, instance, atributy, metody. Teprve pozdeˇji se vysveˇtlujı´datove´ typy s na´vaznostı´na atributy, cykly a podmı´nky prˇicha´zı´na rˇadu azˇpo vy- sveˇtlenı´principu metod a prˇeda´va´nı´zpra´v. Objects-later je protipo´lem k objects-first. Neˇkdy se oznacˇuje i jako procedural-first a znamena´, zˇe se postupuje opacˇneˇ: nejprve se vysveˇtlujı´pojmy a techniky zna´me´ze strukturovane´ho paradigmatu (datove´typy, podmı´nky, . . . ) a te- prve dodatecˇneˇse k tomu prˇida´va´znalost OOP. Nenı´prˇitom nutne´zacˇı´nat programovat prˇı´mo ve strukturovane´m jazyce a pozdeˇji prˇecha´zet na objek- tovy´, stacˇı´datove´typy vysveˇtlovat na loka´lnı´ch promeˇnny´ch jednoduche´ho ko´du v jedne´metodeˇprˇedem prˇipravene´kostry programu. Model-first je prˇı´stup, ktery´rozsˇirˇuje model objects-first a na samotny´zacˇa´tek klade modelova´nı´proble´mu. Student je nejprve sezna´men s modelova´nı´m u´kolu (naprˇ. pomocı´UML13), na´sledneˇprobı´ha´vy´uka teorie OOP, rˇı´dı´cı´struktury prˇicha´zı´na rˇadu azˇpo objektech. Tento prˇı´stup je vhodny´dı´ky du˚razu na fa´zi na´vrhu, takzˇe studenti mohou prˇi samotne´m programova´nı´ vycha´zet z prˇipravene´ho modelu. To podporuje systematicke´rˇesˇenı´u´kolu a analyticke´ mysˇlenı´. Vynikajı´cı´ srovna´nı´ prvnı´ch dvou prˇı´stupu˚ prˇina´sˇı´ [8]. V te´to studii jsou oba prˇı´stupy srovna´va´ny pecˇlivy´m zpu˚sobem a propracovanou metodikou, autorˇi vzali do u´vahy i pocˇa´tecˇnı´a koncove´hodnocenı´v matematice, ktere´se jevı´jako silneˇ korelujı´cı´ s formou uvazˇova´nı´ potrˇebnou prˇi studiu programova´nı´. Obeˇ skupiny probı´rali stejny´ rozsah la´tky, pouze v jine´m porˇadı´ a proto i s jinou na´vaznostı´; zapojenı´vyucˇujı´cı´pravidelneˇkonzultovali pouzˇite´metody, rozsah la´tky i zada´nı´ u´kolu˚. Studie probı´hala v Neˇmecku u skupiny 17lety´ch studentu˚, cozˇ odpovı´da´ prˇiblizˇneˇ 3. rocˇnı´ku cˇtyrˇlete´ho nebo septimeˇ sedmilete´ho strˇedosˇkolske´ho studia v CˇR. Vy´sledkem srovna´nı´je tvrzenı´, zˇe neza´lezˇı´na zvolene´m postupu. Oba vykazujı´ srovnatelne´vy´sledky, pouze v rocˇnı´ku, ktery´prˇedcha´zel samotne´hlavnı´studii a

13. UML – Unified modeling language

12 1. TEORETICKY´ ZA´ KLAD slouzˇil k doladeˇnı´jejı´ch parametru˚, meˇl objects-later mı´rneˇlepsˇı´vy´sledky a to hlavneˇ ve znalosti UML. Na´sledujı´cı´tabulka prˇina´sˇı´prˇehled te´mat a jejich porˇadı´prˇi vy´uce v ra´mci studie. porˇadı´ objects-first 1. u´vod do OOP v prostrˇedı´BlueJ (koncepty, pouzˇitı´objektu˚) 2. u´vod do IDE, promeˇnne´, konstanty, datove´typy v kontextu atributu˚ 3. trˇı´da a objekt (implementace trˇı´d, instancializace objektu˚) 4. selekce (podmı´nky) vcˇetneˇNassi-Shneidermann diagramu˚ 5. metody v kontextu trˇı´d 6. cykly vcˇetneˇNassi-Shneidermann diagramu˚ 7. pole a rˇeteˇzce 8. deˇdicˇnost, abstraktnı´metody 9. asociativita, staticke´metody/atributy/, . . .

porˇadı´ objects-later 1. u´vod do IDE, promeˇnne´, konstanty, datove´typy bez kontextu atributu˚ 2. selekce (podmı´nky) vcˇetneˇNassi-Shneidermann diagramu˚ 3. cykly vcˇetneˇNassi-Shneidermann diagramu˚ 4. pole a rˇeteˇzce (rˇeteˇzce jako datovy´typ, ne trˇı´da) 5. u´vod do OOP v prostrˇedı´BlueJ 6. trˇı´dy a objekty 7. metody 8. deˇdicˇnost, abstraktnı´metody 9. asociativita, staticke´metody/atributy/, . . .

Znatelny´rozdı´l mezi obeˇma prˇı´stupy je jen v porˇadı´obtı´zˇny´ch a jednoduchy´ch te´mat. V ra´mci studie hodnotili studenti na´rocˇnost probı´rany´ch te´mat a meˇrˇena byla i podle jejich vy´sledku˚. Kromeˇtoho, zˇe mı´sty tvrzenı´studentu˚neodpovı´da´prˇesneˇ dosazˇene´mu hodnocenı´, prˇı´stup objects-first plynule postupuje od nejjednodusˇsˇı´ch te´mat k nejteˇzˇsˇı´m, zatı´mco prˇı´stup objects-later postupuje ve dvou vlna´ch od nejjed- nodusˇsˇı´ho k teˇzˇke´mu, v pu˚li zpeˇt k jednoduche´mu a koncˇı´opeˇt na´rocˇny´m. Autorˇi studie zminˇujı´, zˇe v ra´mci vy´uky se studenti sezna´mili i se za´klady objek- tove´ho modelova´nı´, v rozsahu potrˇebne´m k pochopenı´a pouzˇı´va´nı´ucˇiva a to i prˇi varianteˇobjects-later. Objektove´modelova´nı´shleda´vajı´prˇirozenou soucˇa´stı´vy´uky OOP. Autor [1] se zasta´va´prˇı´stupu objects-later, prˇedevsˇı´m proto, zˇe je v zacˇa´tcı´ch jednodusˇsˇı´– student se prˇed prvnı´m rˇa´dkem funkcˇnı´ho ko´du musı´naucˇit jen ma´lo teorie. U´ vod do objektu˚ale navrhuje ucˇit brzy, samotne´programova´nı´trˇı´d azˇpo probra´nı´procedur, prˇeda´va´nı´parametru˚, globa´lnı´ch a loka´lnı´ch deklaracı´ch a teorii o prˇı´stupu k metoda´m a atributu˚m. S tı´m se nemohu ztotozˇnit, jelikozˇprobı´ra´nı´ procedur je prˇi vy´uce OOP kontraproduktivnı´(procedury v OOP neexistujı´, zana´sˇı´ studentu˚m zmatek do prˇedstavy o strukturˇe ko´du mı´cha´nı´m dvou paradigmat), podobneˇgloba´lnı´a loka´lnı´deklarace lze strucˇneˇpopsat pomocı´atributu˚trˇı´d a lo-

13 1. TEORETICKY´ ZA´ KLAD ka´lnı´ch promeˇnny´ch v metoda´ch. Modelova´nı´se opeˇt doporucˇuje ucˇit v pru˚beˇhu a to od samotne´ho pocˇa´tku. Cˇla´nek Teaching Modeling with Objects First [6] je zameˇrˇeny´ pro zmeˇnu na objects-first prˇı´stup. Zdu˚raznˇuje, zˇe uzˇprofesor Niklaus Wirth zmı´nil, zˇe studentu˚v menta´lnı´model je utva´rˇen prvnı´m jazykem, ktery´se ucˇil. Nejsem si jisty´, jak moc je toto tvrzenı´za´vazˇne´, nebot’rozdı´l mezi imperativnı´m a objektovy´m prˇı´stup nenı´ z hlediska obecny´ch prˇedstav azˇtak dramaticky´. Nemluveˇo soucˇasne´nutnosti, aby byl programa´tor schopen plynule prˇecha´zet mezi ru˚zny´mi jazyky podle aktua´lnı´ch potrˇeb. V cˇla´nku je opeˇt zmı´neˇno, zˇe je nutne´naucˇit se nejprve velke´mnozˇstvı´teorie, nezˇlze napsat funkcˇnı´ko´d. Jako rˇesˇenı´se nabı´zı´prˇı´stup design-first. Autorˇi stu- denty nejprve na prˇı´kladu zna´me´deskove´hry (rea´lne´u´lohy) sezna´mı´s objektovy´m modelem v UML. Na´sledneˇ z modelu objektu˚ odvodı´ diagram trˇı´d. Doporucˇujı´ take´pouzˇı´va´nı´pomocny´ch na´stroju˚, ktere´studentu˚m z diagramu vygenerujı´de- klarace trˇı´d, atributu˚a metod. Navrhujı´Rhapsody (http://www.ilogix.com/ rhapsody/rhapsody.cfm), Rational (http://www-306.ibm.com/software/ rational/) a Fujaba (http://www.fujaba.de), z nichzˇbohuzˇel pouze Fujaba je volneˇsˇirˇitelna´.

1.6 Jak budu ucˇit – obecna´metodika

V prˇedchozı´podkapitole jsme rozebrali metodicke´mozˇnosti zarˇazenı´jednotli- vy´ch paradigmat do vy´uky. Nynı´je vhodna´chvı´le probrat obecne´formy vy´uky bez ohledu na zvolene´paradigma. Dlouhodobeˇodzkousˇene´a beˇzˇne´formy vy´uky programova´nı´jsou vy´klad ucˇi- tele, ktery´m je zprostrˇedkovana´nova´teorie, veˇtsˇinou vcˇetneˇdemonstrace kra´tky´ch u´seku˚ko´du, ktere´ukazujı´vzorove´aplikace prˇı´padneˇsyntaxi. Da´le samostatna´pra´ce studentu˚na zada´nı´bud’prˇı´mo v hodineˇnebo formou doma´cı´ho u´kolu. Obcˇas se za- da´vajı´skupinove´projekty na ktery´ch pracuje vı´ce studentu˚za´rovenˇ, cˇı´mzˇse simuluje ty´mova´pra´ce v programa´torsky´ch firma´ch. V soucˇasne´dobeˇvsˇak firmy vyuzˇı´vajı´celou skupinu ru˚zny´ch metodik, ktere´ze- fektivnˇujı´tvorbu ko´du, majı´mı´t pozitivnı´vliv na vy´kon, soustrˇedeˇnı´, psychickou pohodu a vnı´ma´nı´kolektivu zameˇstnanci i jejich dalsˇı´odborny´rozvoj. To vsˇe umozˇ- nˇuje tvorbu spolehliveˇjsˇı´ho ko´du, jeho revize a snazsˇı´u´pravy i zacˇleneˇnı´novy´ch pracovnı´ku˚. Vyuzˇitı´teˇchto metodik by mohlo by´t prˇı´nosem i prˇi vy´uce a to nejen proto, aby se s nimi potencia´lnı´budoucı´programa´torˇi sezna´mili jesˇteˇprˇed na´stupem do zameˇstna´nı´, ale take´pro zefektivneˇnı´samotne´vy´uky. V na´sledujı´cı´m prˇehledu budou strucˇneˇzmı´neˇny postupy pouzˇı´vane´nebo pou- zˇitelne´prˇi vy´uce s kra´tky´m shrnutı´m jejich vy´hod a nevy´hod a vhodnosti zarˇazenı´.

Programming from scratch je z minulosti nejrozsˇı´rˇeneˇjsˇı´forma zada´va´nı´u´kolu˚stu- dentu˚m. Znamena´tvorbu programu od naproste´ho pocˇa´tku, neboli bez jake´- hokoliv drˇı´ve napsane´ho ko´du. Prˇi vy´uce musı´student zna´t prˇedem vsˇe, co

14 1. TEORETICKY´ ZA´ KLAD

bude program obsahovat, a musı´by´t schopen vsˇechny tyto znalosti propojit do vy´sledne´ho celku. Tato podmı´nka se da´teˇzˇko splnit, ucˇı´me-li se inkremen- ta´lnı´m zpu˚sobem a vynucuje psanı´velmi jednoduchy´ch programu˚. Vy´hodou je, zˇe student vnı´ma´vesˇkere´cˇa´sti ko´du ve vsˇı´jeho komplexnosti. Pokud je ko´d psany´mimo IDE v obycˇejne´m textove´m editoru a rucˇneˇkompilova´n, student zı´ska´prˇesnou prˇedstavu o jednotlivy´ch fa´zı´ch vzniku programu od napsa´nı´ prvnı´ch znaku˚ ve zvolene´m jazyce, azˇ po vznik samotne´ bina´rnı´ podoby programu, cozˇma´nenahraditelny´vy´znam pro porozumeˇnı´cˇinnosti pocˇı´tacˇe. Metoda je nevhodna´pro pocˇa´tecˇnı´fa´zi vy´uky, kdy vy´razneˇzdrzˇuje a znemozˇnˇuje soustrˇedeˇnı´na jeden konkre´tnı´proble´m, protozˇe vynucuje struk- turova´nı´proble´mu.[4, str. 107] Naopak je vhodna´ve fa´zi propojova´nı´dı´lcˇı´ch znalostı´a porozumeˇnı´celku. Rozsˇirˇova´nı´existujı´cı´hoko´du je protipo´lem prˇedchozı´metodiky a zı´skalo si oblibu prˇi vy´uce OOP. V [4, str. 107] je zmı´neˇno, zˇe student nemu˚zˇe pochopit OOP na prˇı´kladu, ktery´neobsahuje veˇtsˇı´mnozˇstvı´trˇı´d. Za´rovenˇje nemozˇne´, aby zacˇa´tecˇnı´k tvorˇil hned celou rozsa´hlou aplikaci. Tuto disproporci je vhodne´ vyrovnat tı´m, zˇe vyucˇujı´cı´nachysta´mnozˇstvı´uka´zkovy´ch programu˚, do kte- ry´ch student doplnˇuje jen cˇa´sti ko´du, ktery´m mu˚zˇe porozumeˇt na za´kladeˇ probrane´la´tky. Umozˇnˇuje to jeden z principu˚OOP: zapouzdrˇenı´. Podobne´ho efektu lze ale dosa´hnout i prˇi strukturovane´m paradigmatu, pokud je ko´d vhodneˇcˇleneˇn a student je sezna´men s funkcemi, ktere´jsou mu dostupne´ bud’ formou prˇipravene´knihovny nebo prˇı´mo v rozpracovane´m ko´du. Vy´- hodou je rychla´a cı´leneˇzameˇrˇena´pra´ce na dane´m proble´mu a prˇedevsˇı´m prˇı´prava studenta na rea´lne´podmı´nky, jelikozˇv prostrˇedı´firmy bude prav- deˇpodobneˇcˇasteˇji pracovat na u´praveˇa doplneˇnı´existujı´cı´ho ko´du, nezˇna tvorbeˇzcela nove´aplikace. Nevy´hodou je nutnost obvykle rozsa´hle´prˇı´pravy prˇedem a zastı´neˇnı´ucelene´prˇedstavy o chova´nı´a vzniku aplikace. Vyuzˇitı´je prˇedevsˇı´m v prvnı´fa´zi vy´uky a beˇhem kolektivnı´ch projektu˚. Pouzˇı´va´nı´snippetu˚ neboli kra´tky´ch u´seku˚ko´du (s charakteristickou, cˇasto pouzˇı´- vanou strukturou) jsou idea´lnı´alternativou k prˇedchozı´m dveˇma postupu˚m. Vyuzˇı´vajı´se jednak k demonstraci syntaxe urcˇity´ch struktur a k prˇedvedenı´ obvykly´ch postupu˚rˇesˇenı´(na´vrhovy´ch vzoru˚) nebo jako rychly´zpu˚sob oveˇ- rˇenı´konkre´tnı´znalosti prˇi zkousˇenı´. Vy´hoda konkre´tnı´ho zameˇrˇenı´a prˇe- hlednosti je zrˇejma´, ovsˇem du˚lezˇite´je nezapomı´nat na nevy´hodu, kterou je vytrzˇenı´z kontextu. To deˇla´zacˇa´tecˇnı´ku˚m velke´proble´my: uve´st prˇı´klad po- uzˇitı´ vnorˇene´ho cyklu for bez rˇa´dku˚ na ktery´ch jsou deklarovane´ iteracˇnı´ promeˇnne´zacˇa´tecˇnı´ky mate, podobneˇjim mu˚zˇe deˇlat proble´my ota´zka „Kam vlastneˇko´d do programu vepsat?“ a je proto nezbytne´nepouzˇı´vat snippety v pocˇa´tecˇnı´fa´zi vy´uky. V [11, str. 5] se zminˇuje, zˇe tyto u´seky ko´du by meˇly do- drzˇovat na´sledujı´cı´trˇi vlastnosti: jednoduchost (demonstrace konkre´tnı´veˇci, bez zbytecˇny´ch informacı´navı´c), rea´lnost (prakticke´vyuzˇitı´, zˇa´dne´abstraktnı´ proble´my nebo „prˇı´lisˇchytre´“ rˇesˇenı´, ktere´by ve studentovi evokovalo pocit,

15 1. TEORETICKY´ ZA´ KLAD

zˇe jde o magii), pragmatismus (nabı´dnuty´vzor nema´by´t idealizovany´, ale ma´ prˇedve´st prakticke´rˇesˇenı´, jake´by vytvorˇil profesiona´l). Model vodopa´d je jednou z mozˇnostı´zˇivotnı´ho cyklu vy´voje programu˚. Jde o line- a´rnı´pru˚chod jednotlivy´mi fa´zemi od zada´nı´a analy´zy proble´mu prˇes napro- gramova´nı´a testova´nı´aplikace azˇpo ukoncˇenı´podpory.V ru˚zny´ch obmeˇna´ch (naprˇı´klad s mozˇnostı´vra´tit se vzˇdy na prˇedchozı´krok: prˇi programova´nı´po- zmeˇnit na´vrh, prˇi testova´nı´ prˇeprogramovat urcˇity´ u´sek) se jesˇteˇ objevuje, ale v praxi se jizˇpouzˇı´vajı´moderneˇjsˇı´modely. Vodopa´d odpovı´da´beˇzˇne´mu postupu rˇesˇenı´u´loh prˇi vy´uce. To ale odporuje dnes prosazovane´mu pravi- dlu znovupouzˇitelnosti ko´du a znemozˇnˇuje to vysveˇtlit princip refaktoringu14 ko´du. Pro jednoduche´u´koly je prˇı´stup vhodny´, pro projekty je na zva´zˇenı´ pouzˇitı´agilnı´ch modelu˚. Agilnı´programova´nı´ je modernı´a cyklicky´prˇı´stup, na rozdı´l od linea´rnı´ho pojetı´ modelu vodopa´d: jednotlive´fa´ze se mohou a majı´opakovat, zˇa´dna´nenı´ne- meˇnneˇdokoncˇena. Za´kladnı´mysˇlenky jsou shrnuty manifestem,15 ve ktere´m je kladen du˚raz na jednotlivce a interakci, fungujı´cı´software mı´sto vycˇerpa´- vajı´cı´dokumentace, spolupra´ci se za´kaznı´kem a reagova´nı´m na zmeˇny mı´sto dogmaticke´ho dodrzˇova´nı´pu˚vodnı´ho na´vrhu. Tyto hodnoty jsou vhodne´i prˇi modernı´vy´uce. Student je prˇi rˇesˇenı´u´kolu agilnı´metodou v roli programa´tora a s ohledem na agilnı´principy pravidelneˇkonzultuje zada´nı´i sve´rˇesˇenı´s vy- ucˇujı´cı´m. Ten mu˚zˇe zada´nı´v pru˚beˇhu upravovat tak, aby le´pe odpovı´dalo jeho didakticky´m za´meˇru˚m, schopnostem studenta a potrˇeba´m smeˇrova´nı´ jeho dalsˇı´ho rozvoje. Student pravidelneˇodevzda´va´dı´lcˇı´rˇesˇenı´, byt’cˇa´stecˇneˇ hotove´, nikoliv azˇhotove´dı´lo, prˇi odhalenı´nedostatku˚s ko´dem opakovaneˇ pracuje a vylepsˇuje ho, mı´sto pouhe´ho ohodnocenı´sˇpatnou zna´mkou, ktere´ nema´zˇa´dny´didakticky´efekt vyjma demotivace. To studenta motivuje take´ psa´t lepsˇı´ko´d, aby se v neˇm prˇi nucene´refaktorizaci opeˇt vyznal. Tento neu´- plny´vy´cˇet pozitiv znı´te´meˇrˇutopisticky dokonale, proto je fe´ upozornit na velmi intenzivnı´zapojenı´vyucˇujı´cı´ho a na´roky na neˇj kladene´, stejneˇjako na ochotu studenta veˇnovat se programova´nı´intenzivneˇ. Extre´mnı´programova´nı´ je jednou z metodik vzesˇly´ch z agilnı´ho programova´nı´. Za´kladnı´mi principy (kromeˇdalsˇı´ch me´neˇdu˚lezˇity´ch) je rychla´zpeˇtna´vazba, prˇedpoklad jednoduchosti, prˇı´ru˚stkova´zmeˇna, vyuzˇitı´zmeˇny a kvalitnı´pra´ce (ci- tace z [3, str. 39]). Tyto principy je opeˇt vhodne´ zarˇadit do vy´uky, jelikozˇ znesnadnˇujı´studentu˚m pochopenı´la´tky. Take´pravidlo do extre´mu precizneˇ dodrzˇovany´ch osveˇdcˇeny´ch metod, o ktere´m se mluvı´ jizˇ v u´vodu knihy Kenta Becka (viz [3, str. 10]) lze doporucˇit alesponˇu rozsa´hlejsˇı´ch u´kolu˚a

14. refaktoring ko´du: revize jizˇnaprogramovane´ho bloku, jeho prˇeprogramova´nı´jiny´m, obvykle efek- tivneˇjsˇı´m zpu˚sobem 15. Manifest agilnı´ho programova´nı´je dostupny´cˇesky na http://www.agilemanifesto.org/ iso/cs/.

16 1. TEORETICKY´ ZA´ KLAD

ty´movy´ch projektu˚. Pravidelne´pecˇlive´pouzˇı´va´nı´testu˚, revize jizˇnapsane´ho ko´du a jeho detailnı´pochopenı´, zachova´nı´co nejvysˇsˇı´mı´ry jednoduchosti, zameˇrˇenı´na potrˇebne´cˇa´sti a neimplementova´nı´nicˇeho, co nenı´aktua´lneˇpo- trˇebne´. Naproti tomu „odvaze zahodit nefunkcˇnı´cely´den psany´ko´d“ [3, str. 37] by meˇla vzˇdy prˇedcha´zet konzultace s vyucˇujı´cı´m, ktery´vysveˇtlı´(pokusı´ se vysveˇtlit) prˇı´cˇinu nefunkcˇnosti ko´du, aby se student mohl stejne´chyby pro prˇı´sˇteˇvyvarovat. Pa´rove´programova´nı´ je jednou z metod navrhovany´ch metodologiı´ extre´mnı´ho programova´nı´. Strucˇneˇse da´shrnout jako programova´nı´dvou programa´toru˚ u jednoho pocˇı´tacˇe. V neˇktery´ch lidech vyvola´va´ihned prˇedstavu prˇetaho- va´nı´se o kla´vesnici a mysˇnebo neusta´ly´ch ha´dek cˇi hovoru˚mimo te´ma. Ve skutecˇnosti se ukazuje, zˇe azˇna vy´jimky prˇina´sˇı´vy´razne´zvy´sˇenı´efektivity vy´voje prˇedevsˇı´m dı´ky snı´zˇenı´chybovosti a kolektivnı´pra´ci. Kazˇdy´ve dvo- jici pı´sˇe tehdy, kdyzˇma´na´pad na rˇesˇenı´, ten druhy´se snazˇı´pochopit jeho na´pad a usmeˇrnit ho vlastnı´m na´zorem. Je zˇa´doucı´, aby byli v ty´mu srov- natelneˇschopnı´jedinci, ale te´to metody lze vyuzˇı´t i k efektivnı´mu zaucˇenı´ nova´cˇka. Pra´ce ve veˇtsˇı´ch ty´mech prˇina´sˇı´mensˇı´mı´ru zodpoveˇdnosti jednot- livce a mozˇnost jeho u´plne´ho vyloucˇenı´z pra´ce na u´kolu (v prostrˇedı´sˇkoly jsou to studenti, kterˇı´se tzv. „vezou“ na pra´ci ostatnı´ch). Ve studii z MIT16 vsˇak oznacˇujı´ty´my dvou studentu˚za prˇı´lisˇkrˇehke´, v prˇı´padech, kdy studenti ve dvojici nedoka´zali z osobnı´ch nebo jiny´ch du˚vodu˚vza´jemneˇspolupracovat [11, str. 10] a doporucˇujı´ty´my o trˇech lidech. V prˇı´padeˇsamostatny´ch projektu˚ (ktery´ch by ale nemeˇlo by´t prˇı´lisˇmnoho) bude tento prˇı´stup vhodneˇjsˇı´, prˇi nasazenı´v hodina´ch lze vı´ce doporucˇit pa´rove´programova´nı´. TDD – Test driven development neboli vy´voj rˇı´zeny´testy je dalsˇı´extre´mnı´tech- nikou, pro kterou je urcˇujı´cı´testova´nı´. Programa´tor prˇed samotny´m psanı´m ko´du nejprve vytva´rˇı´testy – sadu podmı´nek, jak ma´vypadat vy´stup funkcı´cˇi metod pro urcˇity´vstup. Funkce se povazˇuje za hotovou ve chvı´li, kdy splnˇuje vsˇechny testy. V prostrˇedı´sˇkoly lze tvorbu testu˚nechat na ucˇiteli, student pak implementuje ko´d a oveˇrˇuje si splneˇnı´u´kolu podle u´speˇsˇne´ho splneˇnı´testu˚. Snadne´hodnocenı´splneˇne´ho u´kolu je zde vykoupeno nutnostı´prˇipravit testy a nebezpecˇı´m, zˇe ucˇitel nezkontroluje i forma´lnı´spra´vnost ko´du. Testy mu˚zˇe projı´t i vysoce neefektivnı´rˇesˇenı´, agilnı´a extre´mnı´metodika take´prˇedpo- kla´da´, zˇe lze prˇi testova´nı´zapomenout na neˇktere´singularity, ktere´odhalı´ pra´veˇazˇrevize ko´du a revize samotny´ch testu˚. Prˇesto lze TDD doporucˇit v obou podoba´ch. Testy prˇipravene´ucˇitelem jako pomu˚cku zbavit se zdrzˇenı´, ktere´vznika´vysveˇtlova´nı´m jednoduchy´ch chyb, ktere´mohou odhalit pra´veˇ testy a nepotrˇebujı´delsˇı´komenta´rˇ. Testy prˇipravene´studentem jsou skveˇly´m u´vodem do praxe. Zminˇme jen du˚lezˇite´podmı´nky: testy musı´by´t psa´ny prˇed samotny´m programova´nı´m aplikace, aby je student nepsal na mı´ru sve´mu

16. Massachusetts Institute of Technology

17 1. TEORETICKY´ ZA´ KLAD

rˇesˇenı´, nesmı´v prˇı´padeˇvy´uky by´t jediny´m kriteriem spra´vnosti – prˇı´ma´kon- trola vyucˇujı´cı´m je sta´le nezbytna´pro kontrolu forma´lnı´spra´vnosti, u´pravy a efektivity rˇesˇenı´. Miniprojekty jsou alternativou klasicke´ho hodnocenı´. Autorˇi [4, str. 228, Mini Pro- ject Programming Exams] jej prˇedstavujı´jako nejefektivneˇjsˇı´ze skupiny u´st- nı´ho a pı´semne´ho zkousˇenı´na papı´r i u pocˇı´tacˇe a rozsa´hlejsˇı´ch projektu˚. Prin- cip spocˇı´va´v zada´nı´u´kolu skupineˇ2 azˇ4 studentu˚, kterˇı´vytvorˇı´kompletnı´ program vcˇetneˇdokumentace a na´sledneˇjej demonstrujı´a obhajujı´na u´stnı´ zkousˇce. Zadany´u´kol prˇitom nenı´prˇı´lisˇkomplexnı´, aby jeho rˇesˇenı´netrvalo prˇı´lisˇdlouho, ale na druhou stranu dostatecˇneˇkomplexnı´, aby studenti museli proka´zat odborne´znalosti. Hodnocenı´probı´halo na za´kladeˇna´sledujı´cı´ch kri- te´riı´: realismus (realisticke´pozˇadavky zada´nı´i samotny´proble´m vycha´zejı´cı´ z prakticke´u´lohy), konstruktivita (student proka´zˇe schopnost konstruktivneˇ vyuzˇı´vat mozˇnosti jazyka), prˇı´prava (student ma´prostor se adekva´tneˇprˇipra- vit a zjistit jake´dovednosti budou testova´ny), u´plnost (zada´nı´pokry´va´kom- pletnı´rozsah probı´rane´ho ucˇiva), efektivita (mozˇnost kontrolovat a hodnotit efektivnı´m zpu˚sobem), individualita (proveˇrˇuje se individua´lnı´ schopnost konkre´tnı´ho studenta), odolnost vu˚cˇi podvodu (student nemu˚zˇe dosa´hnout dobre´ho vy´sledku podvodem), zpeˇtna´vazba (student zı´ska´zpeˇtnou vazbu k vy´sledku˚m sve´pra´ce). Nejnizˇsˇı´odolnost vykazuje tento prˇı´stup z hlediska odolnosti vu˚cˇi podvodu, ktere´mu lze prˇedejı´t jen cı´leny´mi ota´zkami prˇi u´stnı´ prezentaci. Acˇkoliv autorˇi zamy´sˇleli tuto metodu pro vyuzˇitı´prˇi za´veˇrecˇne´ zkousˇce na vysoke´sˇkole, lze ji u´speˇsˇneˇuplatnit i u pru˚beˇzˇne´ho zkousˇenı´na strˇedosˇkolske´u´rovni. Ucˇitel vsˇak musı´mı´t v za´sobeˇdostatek te´mat zada´nı´, aby se prˇedesˇlo kopı´rova´nı´rˇesˇenı´z prˇedchozı´ch let. Programova´nı´na papı´ra krokova´nı´ko´du se cˇasto podcenˇuje, prˇestozˇe jde o vyni- kajı´cı´zpu˚sob jak se procvicˇit v porozumeˇnı´ko´du. V soucˇasne´dobeˇrychly´ch pocˇı´tacˇu˚je pomeˇrneˇsnadne´beˇzˇne´u´koly beˇhem pa´r vterˇin cele´zkompilovat a nechat prˇekladacˇzahla´sit, kde je syntakticka´chyba nebo zkusit jak se pro- gram chova´. Programova´nı´metodou pokus–omyl je ve vy´uce ma´lo vhodne´. I kdyzˇma´take´sve´mı´sto, meˇli by studenti zna´t hranice mozˇnostı´a prˇesny´vy´- znam toho, co pı´sˇı´. Je vhodne´aby se naucˇili sami vyhleda´vat v dokumentaci a spra´vneˇji interpretovat. K tomu pomu˚zˇe, pokud alesponˇobcˇas budou nuceni spolehnout se jen na sve´znalosti prˇı´padneˇtisˇteˇnou dokumentaci pouzˇı´va- ny´ch knihoven a funkcı´cˇi objektu˚mı´sto syntakticke´ho analyza´toru prˇekla- dacˇe. Odhalı´to skutecˇnou u´rovenˇfakticky´ch znalostı´, ktere´jsou nezbytne´pro efektivnı´programova´nı´a za´rovenˇprocvicˇuje orientaci v dokumentaci. Pro- ble´mem je na´rocˇnost na kontrolu, ktera´mu˚zˇe by´t snı´zˇena tı´m, zˇe studenti ko´d sice nesmı´kompilovat ale pı´sˇı´do textove´ho editoru v pocˇı´tacˇi. Vyucˇujı´cı´mu˚zˇe take´studentu˚m neurcˇiteˇradit (naprˇ. „Zkontroluj si deklarace promeˇnny´ch.“), cˇı´mzˇsnı´zˇı´stres a zvy´sˇı´efektivnost takove´vy´uky. Studenti majı´cˇasto proble´m pochopit linearitu ko´du a neˇktere´bloky (cˇasto se to deˇje u vnorˇeny´ch cˇa´stı´

18 1. TEORETICKY´ ZA´ KLAD

ko´du, prˇedevsˇı´m vnorˇenı´cyklu˚) vnı´majı´chybneˇjako celek, jehozˇstruktura jim nenı´zrˇejma´. Tento proble´m odboura´, pokud se naucˇı´ko´d sami krokovat, neboli prˇı´kaz po prˇı´kazu interpretovat jako by byli interpretem ko´du. Zacˇa´- tecˇnı´ci mohou na procvicˇenı´dostat uka´zky kra´tky´ch programu˚, ktere´detailneˇ po krocı´ch popı´sˇı´v cˇinnosti. Teprve potom jim bude povoleno je spustit na pocˇı´tacˇi.

Chybny´ko´d by´va´prˇi vy´uce obcˇas povazˇova´n za neˇco nepatrˇicˇne´ho. Pravdou je, zˇe chyby v programech jsou v soucˇasnosti povazˇova´ny za beˇzˇnou soucˇa´st vy´voje (na to take´reagujı´agilnı´metodiky a snizˇovat vy´skyt – nikoliv odstranit – se snazˇı´TDD. I studenti by meˇli by´t prˇi vy´uce konfrontova´ni s chybny´m rˇesˇenı´m (viz [12, str. 4]), at’uzˇvlastnı´m, ostatnı´ch studentu˚nebo „vzoroveˇsˇpatny´m“. Veˇtsˇina chyb se opakuje a neˇkterˇı´jedinci urcˇitou chybu neudeˇlajı´jednou, ale v jine´m kontextu si jı´nevsˇimnou. Je nutne´takovy´chybny´ko´d prˇedve´st, ozna- cˇit za chybny´a da´t prostor studentu˚m, aby sami chybu odhalili nebo alesponˇ je pouze nasmeˇrovat. Jednoduchy´vy´cˇet chyb se mı´jı´u´cˇinkem, je nezbytne´, aby studenti byli do odhalenı´chyby aktivneˇzapojenı´a ko´d pochopili a sami take´opravili. Prˇı´kladem bud’ na´sledujı´cı´uka´zka v jazyce C. i n t i=0; i n t j=0; for (; i<5;i++) { for (; j<10;j++) { printf (” * ”); } printf (”\n” ) ; }

Nejle´pe vlastnı´m krokova´nı´m ko´du napsany´m na tabuli studenti odhalı´, zˇe vynecha´nı´inicializacˇnı´ho kroku ve vnitrˇnı´m cyklu prˇes promeˇnnou j zpu˚so- buje, zˇe mı´sto odhadovane´ho chova´nı´(vypsat hveˇzdicˇky v obde´lnı´ku 5 rˇa´dku˚ a 10 sloupcu˚) bude ko´d ve skutecˇnosti vypisovat jen prvnı´rˇa´dek a pak uzˇjen odrˇa´dkova´nı´.

PBL – Problem based learning?? je ucˇenı´ zalozˇene´ na rˇesˇenı´ rea´lny´ch proble´mu˚. Studenti jsou konfrontova´nı´s proble´mem, ktery´odpovı´da´realiteˇ, cozˇzvysˇuje porozumeˇnı´a motivaci. Cˇla´nek Learning Programming with the PBL Method — Experiences on PBL Cases and Tutoring na strana´ch 47 azˇ67 v [4] popi- suje implementaci tohoto prˇı´stupu ve vysokosˇkolske´m prostrˇedı´jako hlavnı´ vy´ukove´metody. Fa´ze vy´uky jsou rozdeˇleny do trˇı´cˇa´stı´: kra´tke´u´vodnı´se- tka´nı´(sezna´menı´s u´kolem, identifikace klı´cˇovy´ch proble´mu˚, brainstorming vsˇech zu´cˇastneˇny´ch a asociace k proble´mu˚m, na´vrh modelu, ktery´vysveˇtluje a popisuje u´kol, stanovenı´studijnı´ch cı´lu˚), samostatne´studium (kazˇdy´za- pojeny´student se v pru˚beˇhu jednoho ty´dne samostatneˇprˇipravuje na rˇesˇenı´ stanoveny´ch proble´mu˚a splneˇnı´studijnı´ch cı´lu˚), uzavı´rajı´cı´setka´nı´(jedno azˇdvouhodinove´setka´nı´s prezentacı´vy´sledku˚a sezna´menı´s navrzˇeny´mi rˇesˇenı´mi).

19 1. TEORETICKY´ ZA´ KLAD

Acˇkoliv studie poukazuje na u´speˇsˇne´nasazenı´te´to metody v u´vodnı´m kurzu programova´nı´na VSˇ, lze kla´st ota´zku, zda by tento prˇı´stup uspeˇl i na strˇenı´ sˇkole. Autorˇi prˇizna´vajı´, zˇe metoda klade velky´du˚raz na individua´lnı´prˇı´- pravu jednotlivce a jeho osobnı´snahu se sa´m naucˇit. Cˇa´stecˇneˇnebo v plne´ mı´rˇe nahrazuje klasicky´vy´klad samostudiem. Autorˇi experimentovali i s va- riantou vy´uky bez ucˇitele, ktery´by studenty vedl, jelikozˇstanovenı´studijnı´ch cı´lu˚je stejneˇv kompetenci studenta samotne´ho. Metodu lze vı´ce doporucˇit v prostrˇedı´dobrˇe motivovany´ch a samostatny´ch studentu˚s kvalitnı´mi studij- nı´mi materia´ly. Pro beˇzˇnou strˇedosˇkolskou vy´uku bude inspirativnı´pouzˇitı´ rea´lny´ch u´loh jako prostrˇedku lepsˇı´ho pochopenı´zada´nı´a mozˇnost prˇenechat studium faktograficky´ch u´daju˚na samostatnou prˇı´pravu studenta. Probı´ra´nı´ teoreticke´la´tky formou prˇedna´sˇky hodnotı´neˇkterˇı´vyucˇujı´cı´jako neefektivnı´ a nahrazujı´je zcela cvicˇenı´mi s kra´tky´m opakova´nı´m teorie na zacˇa´tku vy´uky (viz naprˇ. [14, str. 3 a 4]) nebo je sice povazˇujı´za (na VSˇ u´rovni) nutnou soucˇa´st, ale prˇipravujı´je vy´razneˇinteraktivnı´formou a prokla´dajı´cˇasty´mi ota´zkami (viz [11]). Jelikozˇsamotny´vy´klad ma´velke´cˇasove´na´roky a nevyuzˇı´va´prˇitom efektivneˇprˇı´lezˇitost interakce studenta a vyucˇujı´cı´ho, mohlo by by´t uzˇitecˇne´ v duchu PBL nahradit vy´klad samostatnou prˇı´pravou s ucˇitelem stanove- ny´mi cı´li a prˇı´padne´nejasnosti vysveˇtlit jen v kra´tke´m opakova´nı´. Konkre´tnı´ probı´rana´la´tka mu˚zˇe by´t podle PBL prˇedstavena azˇjako prostrˇedek rˇesˇenı´ proble´mu v zadane´u´loze [19, str. 149].

Multimedia´lnı´vy´uka mu˚zˇe by´t pra´veˇvhodnou na´hradou klasicke´ho vy´kladu. Jako takovou ji prˇedstavuje [17] – vy´uka pomocı´multimedia´lnı´ch materia´lu˚a e- learningove´ho prostrˇedı´17 zvysˇuje u´rovenˇporozumeˇnı´la´tce vy´razneˇvı´ce nezˇ beˇzˇne´tisˇteˇne´ucˇebnice. Podle studie neza´visı´na tom, v jake´fa´zi jsou studenti multimedia´lnı´mu vy´ukove´mu obsahu vystaveni, zda prˇed, v pru˚beˇhu nebo po prˇecˇtenı´ucˇebnic. Prˇesto pochopitelneˇje doporucˇeno pouzˇı´vat multime´dia jako doplneˇk, nikoliv jediny´prostrˇedek. Jesˇteˇsˇirsˇı´vyuzˇitı´multime´diı´dopo- rucˇuje [14]. Vyucˇujı´cı´prˇipravuje nahra´vky vy´kladu o konkre´tnı´ch te´matech (naprˇ. podmı´nky nebo deˇdicˇnost) v de´lce 5 azˇ15 minut. Kromeˇtoho jsou stu- dentu˚m k dispozici online testy a kvı´zy jako soucˇa´st hodnocenı´i prostor pro samostudium a procvicˇenı´. Proble´m teˇchto materia´lu˚spocˇı´va´ve velke´prac- nosti a cˇasove´na´rocˇnosti na jejich prˇı´pravu, ktera´je mimo rozsah mozˇnostı´ strˇedosˇkolske´ho ucˇitele.

17. Uka´zka (v dobeˇpsanı´textu neprˇı´lisˇfunkcˇnı´) syste´mu CIMEL je na adrese www.cse.lehigh.edu/ ci- mel/.

20 Kapitola 2 Graficky´popis algoritmu˚

Soucˇa´stı´rˇesˇenı´zadane´ho u´kolu je rozbor a na´vrh postupu rˇesˇenı´. Tyto fa´ze je vhodne´formulovat nejprve mysˇlenkoveˇa slovneˇv prˇirozene´m jazyce a pak graficky, prˇı´padneˇpomocı´vhodne´metodiky nejprve graficky zaznamenat dostupna´fakta a pak modelovat rˇesˇenı´. Samotny´za´pis v programovacı´m jazyce je velice komplexnı´ u´loha, jak jizˇbylo neˇkolikra´t zmı´neˇno. K usnadneˇnı´ prˇepisu do programovacı´ho jazyka poma´ha´vhodneˇzvolena´graficka´reprezentace proble´mu. Umozˇnˇuje uvolnit pameˇt’a soustrˇedit se na konkre´tnı´cˇa´sti v jejich detailu nebo i komplexnosti cele´ho sche´matu. Podstatne´je, aby graficka´reprezentace opravdu usnadnˇovala orientaci v proble´mu. Nesmı´sama o sobeˇprˇida´vat na slozˇitosti u´vah nebo nava´deˇt k nevhod- ny´m rˇesˇenı´m. Graficka´reprezentace musı´by´t zvolena tak, aby byla kompatibilnı´se zvoleny´mi na´stroji rˇesˇenı´(paradigmatem).

2.1 Vy´vojove´diagramy

Na cˇesky mluvı´cı´m u´zemı´i v cˇesky psane´literaturˇe drˇı´veˇjsˇı´doby je nejrozsˇı´rˇeneˇj- sˇı´m modelem vy´vojovy´diagram. Te´meˇrˇv kazˇde´ucˇebnici strukturovane´ho progra- mova´nı´nebo algoritmizace jsou vysveˇtleny jeho za´kladnı´prvky. Vy´vojove´diagramy jsou od roku 1996 normovane´CˇSN ISO 5807, do te´doby (od roku 1974) byly po- psa´ny normou CˇSN 36 9030. Ve skutecˇnosti nova´cˇeska´norma vycha´zı´z mezina´rodnı´ normy ISO 5807:1985. Diagram se skla´da´z normou definovany´ch geometricky´ch u´tvaru˚, ktere´majı´svu˚j jednoznacˇny´vy´znam, z hlediska struktury ko´du, jako naprˇı´klad blok vstupu dat od uzˇivatele. Konkre´tnı´vy´znam v dane´m mı´steˇovlivnˇuje text vepsany´do znacˇky, kte- ry´m se naprˇı´klad specifikuje jaka´data se od uzˇivatele budou nacˇı´tat, vy´raz, ktery´ ma´by´t vyhodnocen v podmı´nce, nebo promeˇnna´, ktera´bude uzˇivateli vypsa´na. Po- doba teˇchto u´daju˚nenı´normou stanovena, pouze se doporucˇuje pouzˇı´t jednoduchy´ text nebo dalsˇı´mi normami stanoveny´matematicky´za´pis. Rozhodneˇby tyto textove´ popisky nemeˇly by´t psa´ny syntaxı´konkre´tnı´ho jazyka, aby se od programovacı´ho jazyka mohlo abstrahovat a diagram byl srozumitelny´i neprograma´torovi. V normeˇje popsane´veˇtsˇı´mnozˇstvı´symbolu˚a umozˇnˇuje jejich vyuzˇitı´pro cel- kem peˇt ru˚zny´ch oblastı´: diagramy toku dat, diagramy programu˚, diagramy sys- te´mu, sı´t’ove´diagramy programu a diagramy zdroju˚syste´mu. Pro potrˇeby vy´uky programova´nı´se obvykle omezujeme jen na na´sledujı´cı´ch neˇkolik znacˇek:

21 2. GRAFICKY´ POPIS ALGORITMU˚

symbol popis Meznı´symbol Oznacˇuje pocˇa´tek a konec algoritmu nebo neˇjake´cˇa´sti ko´du (procedury). Kazˇdy´algoritmus smı´mı´t jen jeden pocˇa´tek a jeden konec. Pro zacˇa´tek funkce se pouzˇije mı´sto slova „START“ jejı´na´zev. Spojnice Spojuje ostatnı´symboly a tı´m urcˇuje smeˇr vykona´va´nı´ programu. Standardneˇnemusı´by´t oznacˇena sˇipkou a smı´by´t jen svisla´nebo vodorovna´. Smeˇr vykona´- va´nı´je vzˇdy shora dolu˚a zleva doprava. Docha´zı´-li ke spojenı´dvou spojnic, jedna z nich je k druhe´na- mı´rˇena kolmo a veˇtsˇinou pro prˇehlednost oznacˇena sˇipkou. V praxi se sˇipkou oznacˇujı´spojnice pro na´- zornost vzˇdy. Platı´za´kaz rozdeˇlenı´spojnice do vı´ce smeˇru˚. Zpracova´nı´ Pouzˇı´va´se k vola´nı´prˇı´kazu cˇi prˇirˇazenı´, obecneˇk pro- vedenı´neˇjake´operace definovane´textovy´m popisem. Do symbolu mu˚zˇe mı´rˇit vı´ce vstupu˚, vzˇdy je ale jen jeden vy´stup. Nejen pro zacˇa´tecˇnı´ky je ale dobre´do- drzˇovat pouzˇitı´jednoho vstupu a pokud je potrˇeba mı´t vstupu˚vı´ce, spojit je do jednoho prˇedem prˇı´mo na spojnici. Vstup a vy´stup dat Nacˇtenı´dat (od uzˇivatele) nebo jejich vypsa´nı´. Zda se jedna´o vstup nebo vy´stup se obvykle zapisuje slovy cˇti nebo zapisˇ prˇed na´zvem promeˇnne´ke ktere´se ope- race vztahuje. Vstupy a vy´stupy jsou jako u zpracova´nı´. Podmı´nka (rozhodova´nı´) Symbol veˇtvenı´ko´du na za´kladeˇvyhodnocenı´pod- mı´nky. S ohledem na veˇtsˇinu imperativnı´ch jazyku˚ mı´va´obvykle dva vy´stupy podle bina´rnı´ho charak- teru rozhodovacı´ho vy´razu. Prˇesto podle normy lze veˇtvit i na 3 nebo vı´ce vy´stupnı´ch veˇtvı´. Aby nedocha´- zelo ke komplikacı´m prˇi prˇepisu do programovacı´ho jazyka, meˇli by studenti obeˇveˇtve vzˇdy pozdeˇji spo- jit do jedne´spojnice. To uzˇale vyzˇaduje prˇemy´sˇlenı´ v kontextu linea´rnı´ho imperativnı´ho za´pisu.

22 2. GRAFICKY´ POPIS ALGORITMU˚

symbol popis Spojka Umozˇnˇuje prˇerusˇit kresbu diagramu v urcˇite´m mı´steˇ a pokracˇovat jinde. Vzˇdy musı´existovat pra´veˇdvojice se stejny´m popiskem, z nichzˇjeden symbol je vy´stup a druhy´vstup. Prˇı´prava Tento symbol by´va´ – a to i v literaturˇe – pouzˇı´va´n jen vy´jimecˇneˇ. Oznacˇuje prˇı´pravu nebo modifikaci neˇjake´ cˇinnosti. Obcˇas se vyuzˇı´va´ pro za´pis cyklu˚ s vyjmenovany´mi hodnotami (jako v uka´zce), cozˇale nenı´vhodne´. Ve veˇtsˇineˇliteratury se pro za´pis cyklu˚ pouzˇı´va´kombinace podmı´nky a zpracova´nı´, cozˇma´i vy´hodu v na´zorne´m vysveˇtlenı´ rozdı´lu mezi cykly s podmı´nkou na zacˇa´tku a na konci a cyklem for (jsou- li v dane´m jazyce prˇı´tomny). Cyklus Dvojice symbolu˚pro zacˇa´tek a konec opakovane´ob- lasti – cyklu. Je sice specifikovana´normou, prakticky se s nı´ale nelze nikde setkat, jelikozˇby´va´nahrazena intuitivneˇjsˇı´m za´pisem pomocı´podmı´nek a vracejı´- cı´ch se spojnic. Prˇesto lze vı´ce nezˇ doporucˇit pou- zˇitı´tohoto symbolu, jelikozˇle´pe odpovı´da´strukturo- vane´mu za´pisu ko´du a napoma´ha´zprˇehledneˇnı´di- agramu. V prvnı´m bloku se nejprve uva´dı´ pojme- nova´nı´ cyklu, pod nı´m podmı´nka beˇhu cyklu, je-li na zacˇa´tku. Je-li podmı´nka na konci cyklu, uvede se v uzavı´racı´m bloku a pod nı´opeˇt pojmenova´nı´cyklu.

Acˇkoliv jsou vy´vojove´diagramy snadno pochopitelny´m a (pro jednoduche´u´lohy) prˇehledny´m zpu˚sobem zakreslenı´algoritmu, obsahujı´jednu zra´dnou vlastnost a tou jsou pra´veˇpodmı´nky a spojova´nı´spojnic. Zacˇa´tecˇnı´ci majı´tendence propojovat ve svy´ch sche´matech ru˚zne´cˇa´sti, ktere´pak nelze strukturovaneˇzapsat tak, jak jsou za- kresleny. Navrzˇene´sche´ma je prˇepsatelne´jen s velky´mi obtı´zˇemi a svojı´strukturou se vy´znamneˇlisˇı´od za´pisu v programovacı´m jazyce. Mozˇnost smeˇrovat a spojo- vat jednotlive´veˇtve podmı´nek libovolneˇtotizˇnevadı´v aplikaci „beˇzˇny´ch zˇivotnı´ch procesu˚“ a nevadı´ani v obycˇejne´m imperativnı´m paradigmatu. Jakmile ovsˇem s na´- stupem strukturovane´ho paradigmatu zaka´zˇeme pouzˇı´va´nı´skoku˚(prˇı´kaz goto), nelze uzˇneˇktera´sche´mata snadno prˇepsat. Prˇı´kladem bud’na´sledujı´cı´uka´zka, ktera´ je po forma´lnı´stra´nce spra´vneˇ, ale bez prˇı´kazu skoku je prˇepis pomeˇrneˇna´rocˇny´ (vzhledem k celkove´trivialiteˇprˇı´kladu) a zdaleka ne prˇı´mocˇary´. Student mu˚zˇe na- by´vat dojmu, zˇe neˇco jine´ho nakreslil a neˇco jine´ho zapsal. Pak je vhodne´nakresleny´ diagram postupneˇupravovat tak, aby zı´skal podobu prˇepsatelnou do strukturova-

23 2. GRAFICKY´ POPIS ALGORITMU˚

Obra´zek 2.1: Prˇı´klad vy´vojove´ho diagramu, ktery´nelze bez u´prav prˇı´mo prˇepsat do strukturovane´ho jazyka. ne´ho jazyka. (Prakticky stacˇı´odstranit krˇı´zˇenı´cyklu˚neboli zacˇı´t pouzˇı´vat symbol pro cykly.) Pro vytva´rˇenı´vy´vojovy´ch diagramu˚lze doporucˇit volneˇsˇirˇitelny´multiplatformnı´ (napsany´v Javeˇ) program yED1 nebo volneˇsˇirˇitelny´program Dia pro GNU/Linux.

2.2 Kopenogram

Me´neˇzna´my´zpu˚sob za´pisu algoritmu˚je tzv. kopenogram, jehozˇna´zev je odvo- zen od jeho (cˇesky´ch) autoru˚, pa´nu˚Kofra´nka, Pecinovske´ho a Nova´ka. Tento typ sche´matu byl navrzˇeny´pro vy´uku s jazykem Karel. Nenı´tolik univerza´lnı´jako vy´-

1. program je dostupny´na http://www.yworks.com/en/products_yed_about.html

24 2. GRAFICKY´ POPIS ALGORITMU˚ vojove´ diagramy, ale uzˇ jeho graficky´ za´pis nava´dı´ studenta k tvorbeˇ algoritmu, ktery´pu˚jde zcela prˇı´mocˇarˇe prˇepsat do strukturovane´ho jazyka. Zatı´mco vy´vojovy´ diagram popisuje de facto tok mysˇlenek, kopenogram lze oznacˇit spı´sˇe za graficky´ strukturovany´jazyk, pra´veˇkvu˚li tomu, zˇe urcˇite´konstrukce, ktere´by prˇi prˇepisu zpu˚sobily proble´m (krˇı´zˇenı´cyklu˚apod.), v neˇm nelze vytvorˇit. To je jeho vy´hoda a za´rovenˇi nevy´hoda. Proble´m s prˇevedenı´m u´kolu do sekvencˇnı´strukturovane´ podoby se totizˇprˇesouva´z fa´ze prˇepisu diagramu do ko´du uzˇdo fa´ze zachycenı´ mysˇlenky grafickou formou. Proto je kopenogram vhodny´spı´sˇjako mezistupenˇmezi vy´vojovy´m diagramem a ko´dem v jazyce nezˇjako na´hrada vy´vojovy´ch diagramu˚.

Ha´da´nı´cˇı´sla

↓ generuj na´hodne´cˇ. A ↓ pisˇ Ha´dej! cˇti X X 6= A ↓ pisˇ Sˇpatneˇ! pisˇ Ha´dat da´l? cˇti Volba

X 6= A a Volba = ’A’

X = A ↓ pisˇ Spra´vneˇ! pisˇ Ha´dane´cˇı´slo bylo A. pisˇ Znovu? cˇti Volba

Volba = ’A’ pisˇ Peˇkny´den

Obra´zek 2.2: Prˇı´klad algoritmu zapsane´ho kopenogramem.

Kopenogram obsahuje velmi jednoduche´prvky. Jednotlive´cˇinnosti jsou zapiso- va´ny vzˇdy postupneˇpod sebe. Program nebo funkce je tvorˇena ra´mecˇkem, ktery´ma´ 2 bunˇky: hornı´obsahuje na´zev ko´du, spodnı´samotny´ko´d. Podmı´nky jsou tvorˇeny ra´mecˇkem o cˇtyrˇech bunˇka´ch: leva´hornı´obsahuje podmı´nku, prava´hornı´sˇipku mı´rˇı´cı´dolu˚, leva´spodnı´ko´d vykona´vany´prˇi splneˇnı´podmı´nky, prava´spodnı´ko´d prˇi nesplneˇnı´podmı´nky. Cyklus se zakresluje ra´mecˇkem o trˇech bunˇka´ch pod sebou. Hornı´nebo spodnı´obsahuje podmı´nku cyklu podle toho, zda jde o cyklus s pod-

25 2. GRAFICKY´ POPIS ALGORITMU˚ mı´nkou na zacˇa´tku cˇi konci, prostrˇednı´bunˇka obsahuje ko´d v teˇle cyklu a zby´vajı´cı´ pak sˇipku mı´rˇı´cı´zpeˇt na ko´d. Jine´prvky jazyka neexistujı´. Pokud bychom chteˇli zakreslit program na ha´da´nı´cˇı´sel pomocı´kopenogramu, vypadal by jako na prˇilozˇene´m obra´zku. Stojı´za zmı´nku, zˇe oproti vy´vojovy´m di- agramu˚m je pro kopenogramy veˇtsˇı´proble´m zı´skat software, ve ktere´m by se daly snadno kreslit (uvedeny´prˇı´klad je tvorˇeny´tabulkami v jazyce LATEX).

2.3 Nassi-Shneidermannu˚v diagram

Dalsˇı´ typ diagramu˚ vytvorˇili a v [18] popsali Isaac Nassi a jeho student Ben Shneidermann. Jejich diagramy jsou podobne´kopenogramu v tom smyslu, zˇe take´ slouzˇı´ke graficke´mu zna´zorneˇnı´strukturovane´ho ko´du (ten v pu˚vodnı´m cˇla´nku autorˇi nazy´vajı´„GOTO-less programming“). Oproti kopenogramu jsou ale poneˇ- kud jednodusˇsˇı´a je dostupny´software pro jejich kresbu. Tyto diagramy se neˇkdy oznacˇujı´take´jako N-S diagramy, NSD nebo strukturogramy a jsou standardizova´ny neˇmeckou normou DIN 66261. Jejich zapojenı´do vy´uky bylo zmı´neˇno i v [8]. Cely´ko´d je opeˇt zapsany´v tabulce. Cˇinnosti jsou opeˇt psane´pod sebe na jednot- live´rˇa´dky. Tentokra´t uzˇale nenı´na´zev programu v za´hlavı´; podmı´nky jsou zna´zor- neˇny tak, zˇe z hornı´ch rohu˚prˇı´slusˇne´ho rˇa´dku vybı´hajı´cˇa´ry do strˇedu spodnı´hrany rˇa´dku. Vznikle´trˇi troju´helnı´ky obsahujı´dveˇmozˇne´hodnoty a podmı´nku. Na´sle- dujı´cı´rˇa´dky jsou pak azˇdo konce bloku vyhrazene´ho podmı´nce rozdeˇlene´na dva sloupce. N-S diagramy umozˇnˇujı´i vı´cestavove´podmı´nky veˇtsˇı´m pocˇtem sloupcu˚ a prˇı´slusˇny´ch hodnot. Cykly se zapisujı´tak, zˇe v prvnı´m nebo poslednı´m rˇa´dku je podmı´nka cyklu (podle toho kdy se kontroluje) a bunˇky ko´du jsou v cele´de´lce teˇla cyklu odsazeny da´le od okraje, ktery´je spojen s bunˇkou podmı´nky. Jine´prvky sche´mata neobsahujı´. Prˇı´kladem bude opeˇt obra´zek s programem na ha´da´nı´cˇı´sel.

2.4 UML2

Unified Modelling Language (UML) je celou rodinou ru˚zny´ch typu˚diagramu˚, resp. jazykem pro popis (cˇi na´vrh) ru˚zny´ch procesu˚prˇi vy´voji programu˚. Za stan- dard zodpovı´da´skupina Object Management Group a tento jazyk je v soucˇasne´dobeˇ (obzvla´sˇteˇprˇi pouzˇı´va´nı´objektove´ho paradigmatu) pravdeˇpodobneˇv praxi nejpo- uzˇı´vaneˇjsˇı´. Zacˇa´tecˇnı´ci obvykle va´hajı´, jestli se jej ucˇit kvu˚li jeho obsa´hlosti, ale pro potrˇeby strˇedosˇkolske´vy´uky si vystacˇı´me pravdeˇpodobneˇjen s jednı´m nebo dveˇma typy. Ve standardu UML 2 jsou tyto typy diagramu˚(netradicˇnı´cˇı´slova´nı´je pouzˇito pro prˇehledneˇjsˇı´odkazova´nı´v pozdeˇjsˇı´m textu a na´zorne´logicke´cˇleneˇnı´typu˚): A. Diagramy struktury (A.1) Diagram objektu˚

2. Vynikajı´cı´strucˇny´prˇehled mozˇnostı´UML je dostupny´na adrese http://www.sparxsystems. com/resources/uml2_tutorial/ ze ktere´jsem take´cˇerpal pro tuto kapitolu.

26 2. GRAFICKY´ POPIS ALGORITMU˚

Obra´zek 2.3: Prˇı´klad algoritmu zapsane´ho Nassi-Shneidermannovy´m diagramem.

(A.2) Diagram trˇı´d (A.3) Diagram komponent (A.4) Diagram balı´cˇku˚ (A.5) Diagram nasazenı´syste´mu (A.6) Diagram kompozitnı´struktury (A.7) Diagram profilu

B. Diagramy chova´nı´

(B.8) Diagram aktivit (B.9) Diagram prˇı´padu˚pouzˇitı´(use-case) (B.10) Diagram stavovy´ch automatu˚ (B.x) Diagramy interakcı´ (B.x.11) Diagram komunikace

27 2. GRAFICKY´ POPIS ALGORITMU˚

(B.x.12) Diagram prˇehledu interakcı´ (B.x.13) Sekvencˇnı´diagram (B.x.14) Diagram cˇasova´nı´

Z teˇchto vsˇech diagramu˚je pro potrˇeby vy´uky OOP vhodne´pouzˇı´vat diagram ob- jektu˚(A.1) a trˇı´d (A.2). Diagramy objektu˚umozˇnˇujı´schematizovat vsˇechny objekty, ktere´v dane´u´loze vystupujı´. V tomto sche´matu se na´sledneˇidentifikujı´jednotlive´ typy objektu˚a jejich vazby, z cˇehozˇvznikne na´vrh jednotlivy´ch trˇı´d a jejich vztahu˚, cozˇzakreslı´me v diagramu trˇı´d. Tento postup je doporucˇeny´neˇmecky´mi kolegy, kterˇı´vy´uku OOP a objektove´ho modelova´nı´s UML zava´deˇli na tamnı´ch strˇednı´ch sˇkola´ch [6, str. 2]. Zacˇı´nat modelem popisujı´cı´m prˇı´mo konkre´tnı´trˇı´dy (diagram trˇı´d) se pro zacˇa´tecˇnı´ky uka´zalo prˇı´lisˇslozˇite´, ale diagram objektu˚odpovı´da´vı´ceme´neˇre- a´lne´sce´neˇa identifikovat v neˇm podobne´typy objektu˚je uzˇjednoduche´. Vy´hodou samotne´ho diagramu trˇı´d je mozˇnost vygenerovat z neˇj ve vhodne´m na´stroji prˇı´mo prˇedprˇipraveny´ko´d – „kostru“ trˇı´d, do ktere´se doplnı´jen funkcionalita jednotlivy´ch metod, protozˇe uzˇsamotny´diagram obsahuje informace o atributech a metoda´ch objektu˚. Je na zva´zˇenı´, zda bude studentu˚m uzˇitecˇne´sezna´mit se i s diagramem prˇı´padu˚ pouzˇitı´(B.9), tedy tzv. use-case diagramem. V tomto diagramu se zna´zornˇujı´jednot- livı´akte´rˇi, kterˇı´syste´m ovla´dajı´, a aktivity, ktere´s nı´m vykona´vajı´. Je to tedy jaky´si prˇehled typicky´ch cˇinnostı´, ktere´ bude muset program by´t schopen poskytnout. Tento diagram mu˚zˇe studentu˚m pomoci identifikovat jake´ objekty prˇi pouzˇı´va´nı´ vystupujı´a jake´metody budou muset nabı´zet. Za´kladnı´prvky diagramu˚(A.1) a (A.2) nynı´vysveˇtlı´me na prˇı´kladu z obra´zku˚ 2.4a 2.5. Diagram objektu˚na obra´zku 2.4 popisuje konkre´tnı´jednu situaci prˇi beˇhu pro- gramu, ktery´m bude v tomto prˇı´padeˇneˇjaka´motoristicka´hra. Pokud bychom praco- vali s diagramy (B.9) (prˇı´klady pouzˇitı´), vyvodili bychom tuto situaci pra´veˇz jednoho konkre´tnı´ho prˇı´padu pouzˇitı´. Diagramy objektu˚jsou specia´lnı´m prˇı´padem diagramu˚ trˇı´d, obvykle se vsˇak postupuje od diagramu objektu˚ke trˇı´da´m, cozˇdodrzˇı´me. Obra´zek 2.4 je slozˇen z ra´mecˇku˚a jejich spojnic. Ra´mecˇky oznacˇujı´konkre´tnı´ instanci objektu urcˇite´trˇı´dy (typu); zde jsou to rˇidicˇi Petr a Pavel, jeden rˇidicˇ, ktery´nenı´nijak pojmenovany´, trˇi auta (Punto, Fabia a Yeti), motorka Yamaha a take´kola kazˇde´ho z vozidel. Ra´mecˇky oznacˇujı´cı´instance kol nesou pouze jme´no, zˇa´dne´dalsˇı´informace nejsou vyznacˇene´. Jme´no je podtrzˇene´, protozˇe se jedna´o in- stanci. Jme´na kol nejsou zvolena zcela vhodneˇ, acˇkoliv je zrˇejme´z pouzˇitı´ru˚zny´ch ra´mecˇku˚pro kola ru˚zny´ch aut, zˇe kazˇde´auto ma´sva´vlastnı´kola. Studenti by meˇli by´t napomenuti, aby kazˇde´kolo pojmenovali jinak a s vysˇsˇı´vypovı´dajı´cı´hodnotou. Naprˇı´klad Prave´prˇednı´kolo 1. auta nebo blı´zˇe syntaxi programovacı´ho ja- zyka PravePredniKoloAuto1. Ra´mecˇky rˇidicˇu˚majı´ve jme´neˇ dvojtecˇku a za nı´ na´zev trˇı´dy. V prvotnı´m na´vrhu se obvykle na´zvy trˇı´d nepı´sˇı´, protozˇe jejich urcˇenı´probı´ha´azˇpote´, co jsou v diagramu identifikovane´vza´jemneˇpodobne´instance. Zde byla trˇı´da rˇidicˇrozpozna´na hned na

28 2. GRAFICKY´ POPIS ALGORITMU˚

Obra´zek 2.4: UML Object Diagram (diagram objektu˚) ukazujı´cı´ konkre´tnı´ situaci (use-case) v programu.

zacˇa´tku na´vrhu, proto take´mu˚zˇe na uka´zku existovat instance rˇidicˇe, ktery´nenı´nijak pojmenovany´(jme´no je vynecha´no, pı´sˇe se jen dvojtecˇka a na´zev trˇı´dy). Dvojtecˇka se v rozporu s typograficky´mi pravidly oddeˇluje mezerou z obou stran. Du˚sledny´ vyucˇujı´cı´by prˇi kontrole jesˇteˇnamı´tl, zˇe bude lepsˇı´pojmenovat instance rˇidicˇu˚jako Rˇidicˇ1 a Rˇidicˇ2 a jejich jme´na ulozˇit v podobeˇatributu (vlastnosti) instance. Rˇ idicˇi majı´popsany´jeden atribut (vlastnost), ktery´m je veˇk. V diagramu objektu˚ jsou zakreslene´instance v konkre´tnı´m okamzˇiku, proto lze napsat konkre´tnı´ hodnotu atributu. Atributy se zapisujı´pod sebou pod cˇa´ru oddeˇlujı´cı´na´zev instance, hodnota je od na´zvu oddeˇlena rovnı´tkem s mezerami. Zby´vajı´instance vozidel, ktere´kromeˇatributu˚obsahujı´i metody (cˇinnosti, ktere´ objekt doka´zˇe vykona´vat; terminologiı´struktura´lnı´ho paradigmatu funkce) zapsane´ pod cˇa´rou oddeˇlujı´cı´atributy. Jejich za´pis se v objektove´m diagramu cˇasto vyne- cha´va´(jak je videˇt u ostatnı´ch instancı´) a bude vysveˇtlen v na´sledujı´cı´ch odstavcı´ch o diagramu trˇı´d. Jizˇnynı´lze identifikovat, zˇe auta oproti motorce majı´o jeden atribut a metodu vı´c, proto bude vhodne´vytvorˇit dveˇru˚zne´trˇı´dy vozidel: auta a motorky. Protozˇe ale majı´urcˇite´spolecˇne´prvky, bude vhodne´vytvorˇit trˇı´du vozidel a trˇı´dy motorek a aut z nı´odvodit, tzv. deˇdit. Instance, ktere´spolu neˇjak souvisejı´, jsou spojene´cˇa´rou u nı´zˇse volitelneˇpı´sˇe podtrzˇeny´popis vztahu (rˇidicˇvlastnı´auto, auto obsahuje kola). Jelikozˇje objektovy´ diagram specia´lnı´ variantou diagramu trˇı´d, lze pouzˇı´t spojnice specifikujı´cı´ kon-

29 2. GRAFICKY´ POPIS ALGORITMU˚ kre´tnı´typ vztahu, jako je trˇeba vztah agregace mezi vozidlem a koly, ktery´se znacˇı´ vyplneˇny´m kosocˇtvercem na straneˇ„vlastnı´ka“ a je videˇt u motorky a jejı´ch kol.

Obra´zek 2.5: UML Class Diagram (diagram trˇı´d) ukazujı´cı´za´kladnı´vlastnosti.

Diagram trˇı´dna obra´zku 2.5 je vyvozen z prˇedchozı´ho diagramu objektu˚. Dveˇ hlavnı´cˇa´sti tvorˇı´ balı´cˇky trˇı´d: osoby a doprava, ktere´se kreslı´ra´mecˇkem se zkra´- ceny´m rˇa´dkem s na´zvem v za´hlavı´. V diagramu objektu˚jsme identifikovali sice jen cˇtyrˇi typy objektu˚, ale jelikozˇjsme se rozhodli pouzˇı´t deˇdicˇnost u vozidel, ma´me celkem peˇt ru˚zny´ch trˇı´d: Rˇidicˇ, Kolo, Vozidlo a zneˇj odvozene´ trˇı´dy Auto a Motorka. Trˇı´dy majı´opeˇt podobu ra´mecˇku, tentokra´t s trˇemi polı´cˇky, acˇkoliv prˇi vynecha´nı´cˇa´sti s atributy nebo metodami lze prˇı´slusˇne´polı´cˇko zcela vynechat (jako je tomu u trˇı´dy Motorka). V prvnı´m polı´cˇku je na´zev trˇı´dy psany´tentokra´t bez podtrzˇenı´(nejedna´se o instanci). Pouze trˇı´da Vozidlo ma´na´zev kurzı´vou, protozˇe se jedna´o abstraktnı´trˇı´du (nelze vytvorˇit prˇı´mo jejı´instanci, lze tvorˇit instance jen neabstraktnı´ch potomku˚). Plus v na´zvu trˇı´dy urcˇuje jejı´ viditelnost. Pro tu se pouzˇı´vajı´ na´sledujı´cı´symboly:

30 2. GRAFICKY´ POPIS ALGORITMU˚

znak oznacˇenı´ vysveˇtlenı´ + public trˇı´da/atribut/metoda viditelna´vsˇem, prˇı´stupna´prˇı´mo ko- mukoliv (vytva´rˇet instance trˇı´dy Rˇidicˇ a volat jejich me- todu getVeˇk() mu˚zˇe ktery´koliv jiny´objekt) # protected trˇı´da/atribut/metoda viditelna´ a prˇı´stupna´ prˇı´mo pouze svy´m metoda´m a potomku˚m te´to trˇı´dy v libovolne´u´rovni deˇdeˇnı´(atribut pocˇetDverˇı´ auta mu˚zˇe by´t cˇten a zapiso- va´n pouze trˇı´dou Auto nebo trˇı´dami, ktere´by od nı´deˇdily) ~ package trˇı´da/atribut/metoda viditelna´a prˇı´stupna´pouze v ra´mci konkre´tnı´ho balı´cˇku (od trˇı´dy Kolo mohou vytva´rˇet in- stance jen trˇı´dy v balı´cˇku doprava) - private trˇı´da/atribut/metoda je prˇı´stupna´ pouze svy´m vlastnı´m metoda´m (barvu vozidla mu˚zˇe cˇı´st a zapisovat jen ko´d v trˇı´deˇ Vozidlo; veˇk rˇidicˇe lze sice zı´skat prˇı´slusˇnou pu- blic metodou, ale atribut samotny´cˇı´st nelze a nelze ho ani zmeˇnit)

V diagramu je dalsˇı´ra´mecˇek, pojmenovany´ Dvoustope´. Prˇi analy´ze objektove´ho diagramu meˇla auta spolecˇny´atribut rozvorKol, ktery´lze ale zobecnit nejen pro auta, ale vsˇechna dvoustopa´vozidla. V rozporu s pravidly extre´mnı´ho programova´nı´ (viz 1.6), podle ktere´ho nema´by´t vytva´rˇen ko´d, ktery´nebude ihned vyuzˇı´va´n (je jen pro potencia´lnı´budoucı´rozvoj), je zakresleno rozhranı´, ktere´deklaruje spolecˇne´ metody vsˇech dvoustopy´ch vozidel. Zˇ e se jedna´o rozhranı´je urcˇeno rˇa´dkem «inter- face», ktery´se v terminologii UML oznacˇuje jako stereotyp. Atributy trˇı´d jsou tentokra´t psane´bez konkre´tnı´ch hodnot, jelikozˇse nejedna´ o instance. Pokud by se neˇjake´hodnoty zapisovaly, byly by to hodnoty inicializacˇnı´. Oproti objektove´mu diagramu se ale u atributu˚vyskytuje zname´nko viditelnosti, ktere´je vy´znamoveˇshodne´s viditelnostı´trˇı´d. Za na´zvem atributu se uva´dı´dvojtecˇka (z obou stran oddeˇlena´mezerou) a datovy´typ atributu. Metody se zapisujı´podobneˇ: nejprve viditelnost, pak na´zev metody s bezpro- strˇedneˇ uvedeny´mi kulaty´mi za´vorkami, v nichzˇ mohou by´t zapsane´ prˇeda´vane´ parametry. Parametry se oddeˇlujı´cˇa´rkou a pı´sˇe se nejprve na´zev a za dvojtecˇkou da- tovy´typ jako u atributu˚. Za za´vorkou jesˇteˇna´sleduje dvojtecˇka obklopena´mezerami a za nı´datovy´typ na´vratove´hodnoty metody. Je-li atribut nebo metoda podtrzˇena´, pak je staticka´ (volneˇ rˇecˇeno nenı´ nutne´ vytva´rˇet instanci, na´lezˇı´prˇı´mo trˇı´deˇ). Prˇı´kladem je pocˇetVozidel, ktery´m se po- cˇı´tajı´ vsˇechny instance vozidel. Je-li atribut nebo metoda psana´ kurzı´vou, pak je abstraktnı´, takzˇe ji musı´neabstraktnı´potomek trˇı´dy implementovat. Prˇı´kladem je getPocˇetKol – tuto metodu musı´implementovat jak Auto, tak Motorka. Ra´mecˇek se skoseny´m rohem a textem, prˇipojeny´ cˇa´rkovanou cˇarou k trˇı´deˇ Motorka, je pozna´mka. V diagramu nema´funkcˇnı´vy´znam. Naopak spojnice jed-

31 2. GRAFICKY´ POPIS ALGORITMU˚ notlivy´ch trˇı´d urcˇujı´jejich vazby a vztahy. Lze rozlisˇovat sˇest typu˚spojnic s ru˚zny´m vy´znamem.

vzhled oznacˇenı´ vysveˇtlenı´ za´vislost objekt, z ktere´ho mı´rˇı´ sˇipka, mu˚zˇe vyuzˇı´- vat ve sve´m ko´du objekt do ktere´ho sˇipka mı´rˇı´naprˇı´klad jako argument neˇjake´metody (naprˇ. objekt kreslı´cı´plochy mu˚zˇe zobrazit objekt s obra´zkem) asociace objekty jsou v uzˇsˇı´vazbeˇ, prˇı´mo v ko´du: je- den obsahuje referenci na druhy´naprˇı´klad jako datovy´typ atributu (naprˇ. objekt Auto obsahuje jako svu˚j atribut barvu zadanou re- ferencı´na objekt Barva agregace objekt na straneˇkosocˇtverce vlastnı´instance objektu˚na druhe´straneˇ, ale mu˚zˇe je sdı´let (naprˇ. objekt Cˇloveˇk udrzˇujı´cı´seznam ob- lı´beny´ch restauracı´: jedna instance objektu Restaurace je drzˇena vı´ce lidmi, kterˇı´do nı´ra´di chodı´) kompozice silneˇjsˇı´ varianta agregace, objekt na straneˇ vyplneˇne´ho kosocˇtverce obsahuje objekt na druhe´straneˇ(naprˇ. objekt Auto obsahuje 4 instance objektu Kolo) deˇdicˇnost objekt na straneˇ sˇipky je obecneˇjsˇı´m prˇı´- (generalizace, padem druhe´ho objektu, neboli objekt bez specializace) sˇipky je specia´lnı´m prˇı´padem objektu s sˇip- kou (naprˇ. objekt Auto je specializacı´, tj. deˇ- dicˇny´m potomkem, objektu Vozidlo implementace specia´lnı´prˇı´pad pouzˇı´vany´pro vztah mezi rozhranı´m a objektem, ktery´ ho imple- mentuje; podobny´ vy´znam jako u deˇdicˇ- nosti (objekt Auto implementuje rozhranı´ Dvouna´pravove´ – u neˇj je sˇipka)

Prˇi pohledu na obra´zek 2.5 si lze vsˇimnout u spojnic take´ cˇı´sel a v prˇı´padeˇspoje vozidel a rˇidicˇu˚i textove´ho popisu.Cˇı´sla na krajı´ch u trˇı´d oznacˇujı´pocˇty, v jaky´ch je vza´jemny´vztah uplatnˇova´n. Mezi rˇidicˇi a vozidly tedy platı´, zˇe kazˇde´vozidlo ma´pra´veˇjednoho rˇidicˇe, zatı´mco rˇidicˇmu˚zˇe mı´t zcela libovolny´pocˇet vozidel (cˇı´sla oddeˇlena´ dveˇma tecˇkami uda´vajı´ rozsah, hveˇzdicˇka je libovolna´ hodnota). Mezi

32 2. GRAFICKY´ POPIS ALGORITMU˚ autem a koly platı´ vztah: „Jedno auto ma´ pra´veˇ 4 kola, ktera´ patrˇı´ jen jednomu autu.“ Popisek u spoje vysveˇtluje vy´znam vazby a sˇipka uda´va´smeˇr kona´nı´(Rˇidicˇ rˇı´dı´ I Auto).

33

Kapitola 3 Jazyky

3.1 Metodika volby jazyka

V te´to kapitole prˇicha´zı´ na rˇadu asi nejcˇasteˇjsˇı´ dilema ucˇitelu˚ programova´nı´: rozhodnutı´, ktery´jazyk zvolit. Kazˇdy´ucˇitel ma´svu˚j oblı´beny´, prˇı´padneˇvolı´podle dostupne´ studijnı´ literatury, vy´vojovy´ch prostrˇedı´ nebo popta´vky na pracovnı´m trhu. Paradoxneˇna volbeˇjazyka tolik neza´lezˇı´. Dobry´programa´tor vı´, zˇe neexistuje univerza´lnı´jazyk a je nutne´volit vzˇdy podle potrˇeb konkre´tnı´ho projektu. Proto i pro studenta bude vy´hodne´sezna´mit se pokud mozˇno s vı´ce jazyky a neva´zat se na jeden jediny´, jelikozˇmu kazˇdy´z nich umozˇnˇuje jiny´u´hel pohledu na mozˇne´rˇesˇenı´ (viz [19, str. 145]). V prostrˇedı´strˇednı´sˇkoly to vsˇak nelze vzˇdy realizovat (klade to velke´na´roky na odborne´dovednosti vyucˇujı´cı´ho a hodinovou dotaci prˇedmeˇtu). V opozici k prˇedchozı´mu odstavci zminˇujı´autorˇi [6] hned v u´vodu na´zor Niklause Wirtha a studii manzˇelu˚Heide a Helmuta Balzertovy´ch, zˇe volba prvnı´ho jazyka je vy´znamna´, jelikozˇsi jeho osvojova´nı´m student utva´rˇı´menta´lnı´model, ktery´dlou- hodobeˇovlivnˇuje cha´pa´nı´i dalsˇı´ch pozdeˇji studovany´ch jazyku˚. Tento na´zor je vsˇak zdu˚raznˇova´n v kontextu volby mezi imperativnı´m, nı´zkou´rovnˇovy´m jazykem a vysˇ- sˇı´m, objektovy´m jazykem, kde du˚sledky volby opravdu kontrastujı´. Bylo by vhodne´vytvorˇit metodiku, ktera´by umozˇnila vy´beˇr jazyka podle objek- tivnı´ch krite´riı´. Tento u´kol se snazˇı´splnit cˇla´nek [13], ktery´prˇina´sˇı´17 hodnotı´cı´ch krite´riı´a aplikuje je na 11 programovacı´ch jazyku˚, prˇicˇemzˇale kriteria nevyhodno- cuje kvalitativneˇ, hodnotı´cı´stavy jsou splneˇno cˇi nesplneˇno. Vy´sledne´bodove´sko´re vznikle´pocˇtem prˇideˇleny´ch „splneˇno“ urcˇuje porˇadı´vhodnosti jazyka. Acˇkoliv jsou kriteria volena s ohledem na na´zory a rˇesˇenı´zna´my´ch autoru˚programovacı´ch ja- zyku˚jako je Niklaus Wirth (autor Pascalu), Guido van Rossum (autor Pythonu), Seymour Papert (LOGO) a Bertrand Meyer (Eiffel), obsahujı´mı´sty spı´sˇe subjektivnı´ pocity teˇchto osob, nezˇobjektivnı´pozˇadavky. Prˇı´kladem necht’je hned prvnı´krite- rium „Jazyk je vhodny´pro vy´uku.“, ktere´pozˇaduje, aby jazyk vznikal s ohledem na vzdeˇla´va´nı´(v pu˚vodnı´m zneˇnı´ . . . the language should have been designed with teaching in mind.), meˇl jednoduchou syntaxi a prˇirozenou se´mantiku, prˇedcha´zel nesrozu- mitelny´m konstrukcı´m. To se vsˇak zda´by´t protikladem k sˇiroky´m vyjadrˇovacı´m schopnostem jazyka, ktere´umozˇnˇujı´demonstrovat vı´ce konceptu˚rˇesˇenı´a neskry´vat prˇed studentem konstrukce, ktere´bude muset v praxi vytva´rˇet. Domnı´va´m se, zˇe je nutne´zva´zˇit mı´ru jednoduchosti syntaxe a vyjadrˇovacı´ch schopnostı´jazyka. Idea´lem bude prˇehledny´za´pis, ktery´lze rozsˇirˇovat postupny´m

35 3. JAZYKY doplnˇova´nı´m a vysveˇtlova´nı´m „zatajeny´ch skutecˇnostı´“ a radeˇji postupneˇnacha´zet syste´m ve z pocˇa´tku chaoticke´m rea´lne´m sveˇteˇ, nezˇinkrementa´lneˇtvorˇit sice cˇisty´, ale teoreticky´model. Jisteˇtento mu˚j subjektivnı´na´zor vycha´zı´z dlouholete´praxe s jazykem C a odporem k jazyku Pascal. Nicme´neˇi v beˇzˇne´m zˇivoteˇjsou skutecˇ- nosti, ktere´dı´teˇprˇijı´ma´bez vysveˇtlenı´jako fakt, dokud nedozraje do veˇku, kdy bude schopno tuto skutecˇnost pochopit. Podobneˇse lze prˇi vysveˇtlova´nı´funkce scanf() v jazyce C omezit na konstatova´nı´, zˇe prˇed na´zvem promeˇnne´budeme psa´t amper- sand, anizˇbychom veˇdeˇli procˇ, nezˇprˇijdou na rˇadu ukazatele a vysveˇtlenı´rozdı´lu mezi prˇeda´nı´m parametru˚hodnotou a odkazem. To vy´uce nesˇkodı´, je-li promysˇlena´ osnova prˇedmeˇtu a mı´ra nevysveˇtleny´ch konstrukcı´neroste, ale klesa´. Nastavit zcela objektivnı´stupnici hodnotı´cı´mı´ru splneˇnı´takove´hoto kriteria nelze, proto v dalsˇı´m textu nebudu zatajovat, zˇe hodnocenı´je subjektivnı´. Podobneˇby bylo vhodne´prˇirˇadit kazˇde´mu krite´riu koeficient urcˇujı´cı´vy´znam vu˚cˇi ostatnı´m kriteriı´m. Jen teˇzˇko lze uznat, zˇe by krite´ria „Jazyk nabı´zı´vhodne´IDE.“ a „Jazyk je open source, kazˇdy´se mu˚zˇe podı´let na jeho rozvoji.“ meˇla pro vy´uku stejnou va´hu. I nynı´odmı´ta´m mozˇnost vytvorˇit objektivnı´srovna´nı´a mı´sto vlastnı´ subjektivnı´volby koeficientu˚budu slovneˇkomentovat v krite´riı´ch zmı´neˇne´pozˇa- davky na za´kladeˇvlastnı´zkusˇenosti a informacı´z literatury. Necht’tyto argumenty pomohou k vlastnı´mu hodnocenı´jednotlivy´ch jazyku˚cˇtena´rˇem. Alternativnı´metodu srovna´nı´jazyku˚nabı´zı´studie [15]. Mı´sto srovna´nı´dı´lcˇı´ch vlastnostı´jazyku˚volı´srovna´nı´vy´sledku˚programa´toru˚. Pro kazˇdy´jazyk je zvolena skupina studentu˚, tyto skupiny jsou voleny pecˇliveˇtak, aby byly vza´jemneˇrovno- cenne´(studenti s rovnocennou znalostı´teorie, drˇı´veˇjsˇı´mi zkusˇenostmi apod.). Vsˇem skupina´m je zada´na stejna´obecna´u´loha (autorˇi zminˇujı´na´rocˇnost vy´beˇru u´lohy, ktera´by nesva´deˇla k pouzˇitı´konkre´tnı´ho jazyka nebo neˇktery´jazyk svou formulacı´ neuprˇednostnˇovala). Za´znam tvorby programu je vyhodnocova´n a zapocˇı´ta´vajı´se chyby, ktere´studenti udeˇlali jak v se´manticke´tak syntakticke´rovineˇ. Jako nejvhod- neˇjsˇı´je urcˇen jazyk, s jehozˇpouzˇitı´m prˇi rˇesˇenı´u´loh studenti nejme´neˇchybovali. Studie bohuzˇel nezminˇuje zˇa´dne´konkre´tnı´vy´sledky.

3.1.1 Kriteria hodnocenı´jazyku˚ V na´sledujı´cı´m prˇebı´ra´m neˇktera´krite´ria z [13]. U nich uva´dı´m i anglicke´zneˇnı´ a doplnˇuji svu˚j komenta´rˇ. Ta, se ktery´mi nesouhlası´m nebo je povazˇuji za nepod- statna´ 1 vynecha´va´m, jelikozˇjejich kritiku nepovazˇuji pro tento text za smeˇrodatnou. Sva´pu˚vodnı´krite´ria nebo kriteria vy´znamny´m zpu˚sobem prˇeformulovana´uva´dı´m pouze v cˇesˇtineˇ. The language offers a general framework. (Jazyk nabı´zı´ beˇzˇny´ pracovnı´ ra´mec.) Zvoleny´ jazyk by meˇl umozˇnˇovat vysveˇtlit a pouzˇı´vat beˇzˇne´ programove´

1. Krite´rium 2.2.2 [13, str. 34] „Jazyk podporuje psanı´korektnı´ch programu˚.“ s vysveˇtlenı´m, zˇe stu- dentovi ma´jazyk poskytovat cesty, jak zajistit, zˇe pı´sˇe korektnı´ko´d bez chyb, pu˚sobı´jako akademicky´ humor. Povazˇuji to za sˇpatnou interpretaci zdroju˚. Jazyk by jisteˇmeˇl umozˇnˇovat efektivnı´zacha´zenı´ s chybami, jako jsou trˇeba vy´jimky. Nicme´neˇz principu nelze zamezit vzniku se´manticky´ch chyb.

36 3. JAZYKY

konstrukce, ktere´jsou v ucˇebnı´m pla´nu. Tato podmı´nka je za´visla´na zvole- ne´m paradigmatu a ucˇebnı´m pla´nu.

The language has a supportive user community. (Jazyk ma´uzˇivatelskou komunitu nabı´zejı´cı´podporu.) Je k dispozici prˇı´stupna´internetova´komunita ochotna´ poradit prˇi studiu. Student tak nenı´odka´za´n pouze na pomoc ucˇitele nebo spoluzˇa´ku˚, ale mu˚zˇe polozˇit dotaz nebo spolupracovat se sˇirsˇı´skupinou lidı´.

The language is consistently supported accros environments. (Jazyk je konzistent- neˇpodporova´n naprˇı´cˇprostrˇedı´mi.) Je zˇa´doucı´, aby bylo mozˇne´zvoleny´jazyk vyuzˇı´vat neza´visle na operacˇnı´m syste´mu nebo platformeˇ. Prˇiby´va´studentu˚, kterˇı´nemajı´doma operacˇnı´syste´m od firmy Microsoft, pouzˇı´vajı´GNU/Li- nux nebo si koupili notebook od firmy Apple. To by nemeˇlo by´t prˇi vy´uce omezujı´cı´. Naopak je vhodne´zdu˚raznˇovat prˇenositelnost aplikacı´. Za´rovenˇ by podpora ru˚zny´ch syste´mu˚meˇla mı´t konzistentnı´podobu: kompila´tor by se meˇl na vsˇech syste´mech chovat jednotneˇ, tenty´zˇ(platformneˇneza´visly´) ko´d by meˇl mı´t stejny´vy´stup na vsˇech platforma´ch.

The language is freely and easily available. (Jazyk je volneˇa snadno dostupny´.) Ja- zyky omezene´patenty nebo platbou za pouzˇı´va´nı´jsou pro vy´uku nevyhovu- jı´cı´.

The language is supported with good teaching material. (Jsou k dispozici dobre´ vy´ukove´ materia´ly.) Nejedna´ se o materia´ly vytvorˇene´ ucˇitelem, ale volneˇ dostupnou elektronickou nebo tisˇteˇnou podporu vy´uky. Mnozˇstvı´knih i e- learningovy´ch materia´lu˚, ktere´jsou snadno dostupne´a za pokud mozˇno nı´zke´ na´klady.

The language is not only used in education. (Jazyk se nepouzˇı´va´jen k vy´uce.) Pro veˇtsˇinu studentu˚je du˚lezˇite´videˇt praktickou aplikaci nabyty´ch znalostı´. Acˇ- koliv nesouhlası´m s utvrzova´nı´m studentu˚strˇednı´ch sˇkol v na´zoru, zˇe kazˇde´ probı´rane´te´ma musı´mı´t konkre´tnı´prakticke´uplatneˇnı´v zˇivoteˇ, je vhodne´ uprˇednostnit jazyk, ktery´umozˇnı´pracovat na rea´lny´ch nebo alesponˇrealis- ticky vypadajı´cı´ch projektech.

The language is extensible. (Jazyk je rozsˇirˇitelny´.) Jazyk by meˇl nabı´zet sˇiroky´vy´- beˇr knihoven pro dalsˇı´(naprˇ. multimedia´lnı´) funkce a za´rovenˇumozˇnit stu- dentu˚m takove´knihovny vytva´rˇet – obzvla´sˇteˇprˇi OOP to poma´ha´vysveˇtlit znovupouzˇitelnost ko´du a naucˇit studenty najı´t vhodnou knihovnu a nastu- dovat si jejı´rozhranı´.

The language is reliable and efficient. (Jazyk je spolehlivy´ a efektivnı´.) Pozˇadav- kem je jednak rychlost beˇhu vy´sledne´aplikace, ale take´efektivnı´beˇh kompi- la´toru a debuggeru. Prˇeklad nebo interpretace ko´du cˇi vytvorˇenı´projektu by nemeˇlo zbytecˇneˇzdrzˇovat od soustrˇedeˇnı´se na rˇesˇenı´proble´mu.

37 3. JAZYKY

Volneˇdostupny´rea´lny´ko´d k uka´zce. Spı´sˇe z hlediska motivace je vy´hodne´, pokud je ve zvolene´m jazyce naprogramovana´v praxi pouzˇı´vana´aplikace s volneˇ dostupny´m zdrojovy´m ko´dem. Pokrocˇilejsˇı´student si mu˚zˇe zkusit prove´st v ko´du drobne´zmeˇny a celou aplikaci prˇekompilovat. Podobnost syntaxe s jiny´mi jazyky. Velke´mnozˇstvı´jazyku˚ma´dnes tzv. C-like syn- taxi, neboli syntaxi odvozenou od jazyka C. Tato forma jake´si standardizace je vy´hodna´pro fixaci syntakticky´ch pravidel, aby prˇi prˇechodu na jiny´jazyk nebyl student prˇı´lisˇzdrzˇova´n opravova´nı´m syntakticky´ch chyb nebo chyb vznikly´ch jiny´mi syntakticky´mi na´vyky. Prˇı´kladem mu˚zˇe by´t zameˇneˇnı´jed- noho a dvou rovnı´tek (prˇirˇazenı´a porovna´nı´) v podmı´nka´ch C-like jazyku˚, ktere´se nejcˇasteˇji objevuje u programa´toru˚zvykly´ch na Pascal. Zacha´zenı´s chybami. U objektovy´ch jazyku˚je nezbytnostı´kvalitnı´podpora vy´ji- mek a prˇi chybeˇmozˇnost vypsat call stack2. Kvalita a integrace dokumentace ko´du. Toto kriterium v sobeˇzahrnuje jednak do- stupnost a kvalitu dokumentace samotne´ho jazyka a jeho knihoven, ale i integraci dokumentace prˇı´mo v ko´du. Podpora graficky´ch a multimedia´lnı´chknihoven/funkcı´. Jazyk by meˇl podporo- vat pokud mozˇno co nejjednodusˇsˇı´tvorbu graficky´ch aplikacı´a prˇı´padneˇi dalsˇı´ch multime´diı´pro lepsˇı´motivaci studentu˚. Nabı´dkaa u´rovenˇIDE. Pro vy´uku je potrˇeba hledat jazyk, pro ktery´existujı´volneˇ sˇirˇitelna´IDE od jednoduchy´ch (nejle´pe prˇı´mo vy´ukovy´ch), ve ktery´ch se bude student soustrˇedit na ko´d a ne na prˇı´lisˇkomplikovane´menu prostrˇedı´, azˇpo komplikovaneˇjsˇı´, ktera´vı´ce odpovı´dajı´rea´lny´m podmı´nka´m vy´voje software. Stav vy´voje. Je vhodne´hledat jazyk, ktery´nenı´zcela zakonzervovany´a prˇizpu˚so- buje se aktua´lnı´m potrˇeba´m. Zacha´zenı´s datovy´mi typy. Jak bylo zmı´neˇno v teoreticke´cˇa´sti na str.7, dynamicky typovane´jazyky mohou zteˇzˇovat prvotnı´sezna´menı´s datovy´mi typy. Po- dobneˇslabe´typova´nı´ztı´zˇı´zacˇa´tecˇnı´kovi hleda´nı´prˇı´padny´ch chyb. Zpu˚sob prˇekladu a spusˇteˇnı´ko´du. Zdrojovy´ko´d mu˚zˇe by´t prˇekla´da´n nebo pouze interpretova´n, prˇı´padneˇ neˇktere´ jazyky mohou kombinovat oba prˇı´stupy. Obecneˇjazyky kompilovane´mı´vajı´rychlejsˇı´beˇh, ale zpomalujı´vy´voj nutnostı´ kompilace a proto je take´programova´nı´me´neˇinteraktivnı´. Dı´ky tomu lze ale eliminovat programova´nı´metodou „pokus – omyl“. Na interpretovany´ch ja- zycı´ch take´nelze demonstrovat vznik spustitelne´ho ko´d a fa´ze prˇekladu. Pouzˇite´paradigma. Vy´znamny´m kriteriem je paradigma nebo mnozˇina paradig- mat, ktera´jazyk nabı´zı´a tı´m mozˇnost demonstrovat s nı´m jednotlive´prˇı´stupy. 2. Call stack: volneˇprˇelozˇeno za´sobnı´k volany´ch funkcı´, vy´pisem lze zı´skat prˇehled o mı´steˇ, kde byla chyba detekovana´, od vola´nı´z hlavnı´funkce programu azˇna u´rovenˇchyby v konkre´tnı´funkci.

38 3. JAZYKY

3.2 Prˇehled vybrany´ch jazyku˚

3.2.1 Pascal

Autor, rok vzniku: Niclaus Wirth, 1971 Paradigma: imperativnı´ (obsahuje goto), strukturovane´ (ob- jektove´prˇina´sˇı´azˇObject Pascal nebo Delphi) Prˇekla´dany´/interpretovany´: prˇekla´dany´ Syntakticka´rodina: vlastnı´specificka´syntaxe Platforma: DOS (Windows); projekt Free Pascal Compiler (http://www.freepascal.org) je funkcˇnı´ na prakticky vsˇech myslitelny´ch platforma´ch (vcˇetneˇ naprˇ. ARM procesoru˚) a syste´mech (vcˇetneˇGNU- /Linuxu a MacOS). Je deklarovana´ kompatibi- lita s Turbo Pascal 7.0 a cˇa´stecˇneˇ s Delphi; pro- jekt GNU Pascal Compiler (http://www.gnu- pascal.de) je take´multiplatformnı´a implemen- tuje mj. standard Turbo Pascal 7.0 Licence: komercˇnı´verze (Borland) Turbo Pascal; Free Pas- cal Compiler a GNU Pascal Compiler jsou open- source (GNU/GPL), knihovny FPC jsou GNU/L- GPL Efektivita: zameˇrˇeny´na mensˇı´(strukturovane´) vy´ukove´pro- jekty, nevhodny´pro rozsa´hlejsˇı´projekty nebo pro- totypova´nı´, zdrzˇujı´cı´syntakticke´konstrukce (uvo- zova´nı´bloku˚klı´cˇovy´mi slovy begin a end, hla- vicˇka programu apod.) Datove´typy: cela´ cˇı´sla – Integer, „rea´lna´“ cˇı´sla – Real, lo- gicke´ hodnoty – Boolean, rˇeteˇzce – String (nenı´ pu˚vodnı´, pouze neˇktere´kompila´tory, Turbo Pas- cal 7.0), ru˚zne´ dodatkove´ typy s jiny´mi rozsahy odvozene´ od prˇedchozı´ch (v ru˚zny´ch prˇeklada- cˇı´ch: Byte, Shortint, Smallint, Word, Cardinal, Sin- gle, Double apod.), vy´cˇet (enumerace), rozsahy (subrange), pole (i vı´cerozmeˇrna´), za´znam (record, heterogennı´strukturovany´typ), ukazatele Programove´konstrukce: podmı´nky (if, if-else, case), cykly (for-do, while-do, repeat-until, for-in), procedury a funkce (odlisˇene´, parametry mohou prˇeda´vat hodnotou i odkazem) Vy´ukove´materia´ly: velmi velke´ mnozˇstvı´ dnes vsˇak zastarale´ lite- ratury, mnoho knih o jiny´ch jazycı´ch na Pascal vsˇak cˇasto odkazuje, neprˇı´lisˇ mnoho elektronic- ky´ch zdroju˚

39 3. JAZYKY

IDE: Nejzna´meˇjsˇı´je zastarale´a komercˇnı´IDE pro DOS: Borland Turbo Pascal; dnes je dostupne´i multiplat- formnı´ IDE (http://www.lazarus. freepascal.org) pod GNU/LGPL, prˇı´padneˇ kompatibilnı´IDE pro Delphi. Rozsˇirˇitelnost: Pouzˇitı´ knihoven (unit) prˇipojovany´ch klı´cˇovy´m slovem use (opeˇt jen Turbo Pascal 7.0 a vysˇsˇı´kom- pila´tory). GUI: knihovna pro pouzˇitı´ grafiky v konzoli, noveˇjsˇı´ kompila´tory (FPC) i knihovny pro GUI Pouzˇitı´v praxi: nepouzˇitelny´(urcˇen k vy´uce); v praxi se obcˇas po- uzˇı´va´odvozeny´jazyk Delphi Open-source projekty: na internetu dostupne´vyrˇesˇene´u´lohy vy´ukove´ho charakteru, ale ne rea´lne´projekty Zpracova´nı´chyb: zˇa´dne´(rucˇnı´zpracova´nı´na´vratovy´mi hodnotami funkcı´, cozˇnarusˇuje logicky´koncept procedur – majı´-li take´vracet chybove´hodnoty) Dokumentace: pouze formou nepovinny´ch komenta´rˇu˚ Stav vy´voje: prakticky ukoncˇeny´, projekt Free Pascal Compiler funguje a prˇida´va´podporu rozsˇı´rˇenı´z jazyka Del- phi Komunita: prakticky jen kolem projektu Free Pascal Compiler

Jazyk Pascal je v dnesˇnı´dobeˇzcela neperspektivnı´a povazˇovany´za prˇezˇitek. V neˇ- ktery´ch sˇkola´ch se sta´le ucˇı´pravdeˇpodobneˇpouze ze setrvacˇnosti a nedostatku vy- ucˇujı´cı´ch, kterˇı´by ovla´dali jiny´jazyk. Pro studenty je neatraktivnı´prˇedevsˇı´m svou nevyuzˇitelnostı´v praxi (pokud nediskutujeme jeho rozsˇı´rˇenı´: Delphi) a nedostatkem aktua´lnı´studijnı´literatury a vy´vojovy´ch prostrˇedı´. Pouzˇitı´IDE Lazarus a kompila´- toru Free Pascal Compiler je mozˇne´, ale klade na ucˇitele velke´na´roky stran prˇı´pravy vy´ukovy´ch materia´lu˚s minima´lnı´mi vy´sledky pro budoucı´praxi studentu˚. Jazyk take´obsahuje neˇktere´jizˇv jeho pocˇa´tcı´ch kritizovane´prvky (viz naprˇ. [9] a jine´). Pu˚vodnı´za´meˇr neobsahovat teˇzˇko pochopitelne´konstrukce kazı´implemen- tace ukazatelu˚, ani Turbo Pascal neumı´dynamicka´pole (prˇina´sˇı´je azˇDelphi nebo modernı´kompila´tory jako FPC obsahujı´cı´prvky syntaxe jazyka Delphi), kritizovana´ byla i „nekoncepcˇnı´“ implementace cˇı´selne´ho rozsahu (subrange). Z didakticke´ho hlediska lze jisteˇkritizovat i chova´nı´cyklu˚(while-do pokracˇuje prˇi splneˇnı´pod- mı´nky, zatı´mco repeat-until prˇi nesplneˇnı´, cozˇje matoucı´) nebo rozlisˇova´nı´procedur a funkcı´, ktere´je pouze umeˇlou (a dnesˇnı´mi jazyky nepouzˇı´vanou) konstrukcı´.

40 3. JAZYKY

3.2.2 C

Autor, rok vzniku: Ken Thompson a Dennis Ritchie, 70. le´ta 20. stoletı´ Paradigma: imperativnı´(obsahuje goto), strukturovane´ Prˇekla´dany´/interpretovany´: prˇekla´dany´; existuje i interpret modifikovane´ho jazyka Ch (http://www.softintegration. com/) Syntakticka´rodina: C-like Platforma: nı´zkou´rovnˇovy´multiplatformnı´(kompila´tory pro ru˚zne´platformy), ale ko´d nenı´obecneˇvzˇdy prˇe- nositelny´ Licence: komercˇnı´ i open-source implementace (GNU/- GPL) Efektivita: pro rozsa´hlejsˇı´ uzˇivatelske´ aplikace nı´zka´ (da´no paradigmatem), pro mensˇı´a nı´zkou´rovnˇove´pro- jekty velmi vhodny´; mozˇnost optimalizace prˇi kompilaci, rychly´beˇh bina´rek Datove´typy: celocˇı´selne´(int – long a unsigned varianty), „re- a´lne´“ (float, double – unsigned varianty), char (i unsigned), pole, struktury (struct – heterogennı´ slozˇeny´typ), ukazatele; chybı´datovy´typ pro lo- gicke´hodnoty (boolean) a textove´rˇeteˇzce (realizujı´ se polem znaku˚ukoncˇeny´m znakem s ascii hod- notou 0) Programove´konstrukce: podmı´nky (if, if-else, switch, terna´rnı´ opera´tor podmı´nky ?:), cykly (for, while, do-while), funkce (parametry mohou prˇeda´vat hodnotou i odkazem) Vy´ukove´materia´ly: sta´le i aktua´lnı´literatura, nova´literatura pro C na mikroprocesorech, spousta materia´lu˚na internetu (seria´ly i v cˇesˇtineˇ) IDE: oblı´bene´ (ale jizˇ nevyvı´jene´) Dev-C++ (licence GNU/GPL), freeware Microsoft Visual Studio Ex- press, editory s ru˚znou mı´rou integrace (PSPad, Vim, Emacs) Rozsˇirˇitelnost: velke´mnozˇstvı´knihoven (i syste´movy´ch) na vsˇech platforma´ch, vkla´da´nı´direktivou include GUI: Ru˚zne´ platformneˇ za´visle´ i neza´visle´ knihovny, naprˇ. wxWidgets (multiplatformnı´, zastrˇesˇuje jed- notny´m rozhranı´m Win API, GTK a ), Allegro (urcˇena prˇedevsˇı´m pro hry), curses (pokrocˇilejsˇı´ pra´ce s termina´lem) a spousta dalsˇı´ch.

41 3. JAZYKY

Pouzˇitı´v praxi: Jeden z v praxi nejpouzˇı´vaneˇjsˇı´ch jazyku˚, dnes prˇedevsˇı´m pro nı´zkou´rovnˇove´programova´nı´(mi- kroprocesory, operacˇnı´syste´my a jejich ovladacˇe apod.). Open-source projekty: Neprˇeberne´mnozˇstvı´volneˇsˇı´rˇeny´ch na internetu. Zpracova´nı´chyb: zˇa´dne´(rucˇnı´zpracova´nı´na´vratovy´mi hodnotami funkcı´) Dokumentace: pouze formou nepovinny´ch komenta´rˇu˚ Stav vy´voje: jazyk je standardizovany´ (ANSI/ISO C, C99); ru˚zne´prˇekladacˇe pro ru˚zne´platformy (s mozˇnostı´ kompilovat na jine´nezˇcı´love´platformeˇ), rozvı´jı´se formou novy´ch knihoven Komunita: rˇada diskusnı´ch fo´r, dı´ky velke´mu rozsˇı´rˇenı´jazyka je velke´ mnozˇstvı´ lidı´ s ru˚znou u´rovnı´ znalostı´ vcˇetneˇmozˇnosti kontaktovat prˇı´mo vy´voja´rˇe ru˚z- ny´ch open-source projektu˚

Jazyk C je jednı´m ze sta´le oblı´beny´ch jazyku˚k vy´uce programova´nı´. Jeho prˇednostı´ je sˇiroke´vyuzˇitı´v praxi, rozsa´hla´podpora a poveˇdomı´, vy´beˇr vy´vojovy´ch prostrˇedı´i knihoven, syntaxe, na ktere´stavı´mnohe´jine´pouzˇı´vane´jazyky. Lze vsˇak konstatovat, zˇe pro zacˇa´tecˇnı´ky prˇı´lisˇvhodny´nenı´. Jedna´se o jazyk nı´zkou´rovnˇovy´a naprˇı´klad pra´ce s rˇeteˇzci je v neˇm krajneˇnepohodlna´. Obsahuje slozˇite´koncepty, ktere´odva´deˇjı´ pozornost studenta od algoritmu k proble´mu˚m se syntaxı´. Naprˇ. pra´ce s ukazateli, dynamicka´alokace pameˇti, sestavenı´programu z vı´ce bloku˚(fa´ze prˇekladu) je vhod- neˇjsˇı´azˇpro pokrocˇile´studenty. Jazyk C je proto mnohem vı´ce vhodne´zarˇadit a prˇi urcˇite´vysˇsˇı´mı´rˇe programa´torske´zkusˇenosti a prˇedevsˇı´m pro za´jemce o nı´zkou´rov- nˇove´programova´nı´(naprˇı´klad mikrocˇipy).

3.2.3 C++

Autor, rok vzniku: Bjarne Stroustrup, 1983 (prˇejmenova´nı´m C with Classes) Paradigma: multiparadigmaticky´: imperativnı´, strukturovane´ (jako podmnozˇinu obsahuje jazyk C), objektove´ Prˇekla´dany´/interpretovany´: prˇekla´dany´ Syntakticka´rodina: C-like s objektovy´m rozsˇı´rˇenı´m Platforma: multiplatformnı´ ve smyslu dostupny´ch prˇekla- dacˇu˚pro ru˚zne´platformy Licence: komercˇnı´(MS Visual C++ Compiler, Borland C++) i open source implementace (soucˇa´st GCC)

42 3. JAZYKY

Efektivita: vhodny´i na rozsa´hle´projekty; rychly´beˇh bina´rek; nizˇsˇı´ efektivita ucˇenı´ dana´ slozˇity´mi koncepty a velky´m mnozˇstvı´m syntakticky´ch pravidel Datove´typy: beˇzˇne´ z C, navı´c boolean, textove´ rˇeteˇzce (string), datove´proudy, slozˇite´typy standardnı´ knihovny (naprˇ. za´sobnı´k, fronta, vektor, mnozˇina, mapa, . . . ) Programove´konstrukce: beˇzˇne´jako v C, navı´c objekty, vı´cena´sobna´deˇdicˇ- nost, konstruktory i destruktory, virtua´lnı´metody, inline funkce, prˇeteˇzˇova´nı´funkcı´i opera´toru˚, vy´- jimky, sˇablony Vy´ukove´materia´ly: velke´mnozˇstvı´ucˇebnic a cˇla´nku˚na internetu IDE: MS VisualStudio, Dev-C++, Code::Blocks, Netbe- ans a dalsˇı´ Rozsˇirˇitelnost: rˇada knihoven a frameworku˚ (ovsˇem cˇasto take´ proprieta´rnı´nebo sˇpatneˇdokumentovane´) GUI: pomocı´ externı´ch knihoven (WinAPI, GTK, Qt, wxWidgets a dalsˇı´) Pouzˇitı´v praxi: velmi oblı´beny´pro aplikacˇnı´software, hry Open-source projekty: rˇada i velky´ch open source projektu˚ Zpracova´nı´chyb: podporuje vy´jimky Dokumentace: pouze externeˇnaprˇı´klad programem Stav vy´voje: novy´ ISO standard ISO/IEC 14882:2011 vydany´ v roce 2011 Komunita: rˇada aktivnı´ch profesiona´lnı´ch i amate´rsky´ch pro- grama´toru˚a diskusnı´ch fo´r

Jazyk C++ je spolu s Javou pravdeˇpodobneˇv praxi nejcˇasteˇji zˇa´dany´m jazykem. Oproti C ma´vy´hodu v objektove´m paradigmatu, ktere´je pro rozsa´hlejsˇı´projekty vhodneˇjsˇı´. Nicme´neˇjde o jazyk pomeˇrneˇna´rocˇny´s rˇadou na´rocˇny´ch konceptu˚(naprˇ. sˇablony). Stejneˇjako C vyzˇaduje rucˇnı´spra´vu pameˇti, proto take´na rozdı´l od Javy zna´pojem destruktoru. Je sˇkoda, zˇe pro jazyk C++ neexistujı´projekty podobny´ch didakticky orientovany´ch IDE jako pro Javu, proto je C++ vhodneˇjsˇı´spı´sˇe pro starsˇı´ a motivovane´studenty. Pro ty mu˚zˇe by´t naopak atraktivnı´mozˇnost ucˇit se na veˇtsˇı´ch open source projektech, prˇı´padneˇsi zkusit doplnit vlastnı´funkcionalitu do takove´ aplikace. Motivacˇnı´je i beˇzˇna´vy´sˇe platu programa´tora v C++.

43 3. JAZYKY

3.2.4 C# (.NET)

Autor, rok vzniku: Microsoft, 2000 Paradigma: objektovy´ Prˇekla´dany´/interpretovany´: JIT3 kompilovany´ Syntakticka´rodina: odvozena´z C++ a Javy Platforma: syste´my firmy Microsoft s podporou .NET; sys- te´my s podporou projektu (Linux, MacOS, BSD, Solaris, . . . ) Licence: MS .NET je proprieta´rnı´, projekt Mono open source implementace Efektivita: vhodny´pro webove´projekty, aplikacˇnı´software v MS Windows, JIT kompilace mu˚zˇe negativneˇ ovlivnit vy´kon aplikacı´ Datove´typy: beˇzˇne´datove´typy odvozene´z .NET, vcˇetneˇboo- lean, typ char jsou Unicode znaky, String, da- tove´proudy Programove´konstrukce: beˇzˇne´cykly a podmı´nky, objekty, jednoducha´deˇ- dicˇnost, rozhranı´, konstruktory, garbage collector, virtua´lnı´metody, prˇeteˇzˇova´nı´funkcı´a neˇktery´ch opera´toru˚, vy´jimky, generika (obdoba C++ sˇablon) Vy´ukove´materia´ly: mnozˇstvı´ucˇebnic a cˇla´nku˚na internetu, materia´ly prˇı´mo na stra´nka´ch Microsoftu (MSDN) IDE: MS VisualStudio, SharpDevelop Rozsˇirˇitelnost: knihovny .NET GUI: Pouzˇitı´v praxi: velmi rozsˇı´rˇeny´ jazyk pro webove´ aplikace, prˇı´- padneˇ okennı´ aplikace v MS Windows a sluzˇby v MS Windows Open-source projekty: dostupne´, ale v neprˇı´lisˇvelke´m rozsahu Zpracova´nı´chyb: vy´jimky Dokumentace: XML znacˇky uvnitrˇkomenta´rˇu˚uvozeny´ch trˇemi lomı´tky Stav vy´voje: pomeˇrneˇnovy´, vyvı´jejı´cı´se jazyk Komunita: komunita existuje i cˇesky mluvı´cı´, ale (ve srovna´nı´ s C++ nebo Javou) nenı´prˇı´lisˇpocˇetna´

3. JIT – Just-in-time kompilace znamena´, zˇe ko´d je prˇedkompilovany´ne prˇı´mo do strojove´ho ko´du, ale do strojove´ho ko´du ho prˇekla´da´beˇhove´prostrˇedı´azˇprˇed spusˇteˇnı´m na konkre´tnı´platformeˇa jen jeho potrˇebne´cˇa´sti.

44 3. JAZYKY

Jazyk C# je modernı´programovacı´jazyk, ktery´vycha´zı´z C++ a Javy a snazˇı´se v kombinaci se zavedenı´m prostrˇedı´.NET zjednodusˇit a zefektivnit programova´nı´. Jeho nedostatkem je pomeˇrneˇu´zke´va´za´nı´se na firmu Microsoft a jejı´produkty, nicme´neˇdı´ky vzniku open source projektu Mono jizˇnenı´omezen pouze na plat- formu Windows. Podobneˇ jako Java sve´ ko´dy prˇedkompilova´va´ do mezistupneˇ, ktery´teprve vykona´beˇhove´prostrˇedı´na konkre´tnı´m syste´mu. To ma´zvy´sˇit prˇeno- sitelnost, ale vede to take´k rezˇii, ktera´snizˇuje vy´znam tohoto jazyka pro vy´pocˇetneˇ na´rocˇne´aplikace (naprˇ. hry). Jeho nejveˇtsˇı´vyuzˇitı´je proto pro jednoduche´okennı´ aplikace ve Windows a prˇedevsˇı´m webove´aplikace. K prvneˇjmenovane´mu u´cˇelu se jizˇna rˇadeˇsˇkol ucˇı´. Ve srovna´nı´s Javou je vsˇak jeho prˇenositelnost vy´razneˇnizˇsˇı´ a nedisponuje ani takovy´m mnozˇstvı´m studijnı´ch materia´lu˚a vy´vojovy´ch prostrˇedı´. Nicme´neˇpro zacˇa´tecˇnı´ky mu˚zˇe by´t i z hlediska na´rocˇnosti rozumneˇjsˇı´volbou nezˇ C++.

3.2.5 Visual Basic

Autor, rok vzniku: Microsoft, Visual Basic (VB) 1991, Visual Basic for Applications (VBA) 1993, Visual Basic .NET (VB .NET) 2000 Paradigma: multiparadigmaticky´: strukturovany´i objektovy´ Prˇekla´dany´/interpretovany´: VB prˇekla´dany´, VBA interpretovany´ (vestaveˇny´ skriptovacı´jazyk kanc. balı´ku˚), VB .NET JIT kom- pilovany´ Syntakticka´rodina: BASIC Platforma: syste´my firmy Microsoft, VB .NET i na platformeˇ Mono, skripty VBA lze konvertovat do StarBasicu v LibreOffice Licence: proprieta´rnı´ Efektivita: VBA jako interpretovany´jazyk ma´nizˇsˇı´efektivitu, ale je velmi vhodny´pro makra kancela´rˇsky´ch ba- lı´ku˚, VB .NET ma´omezenou efektivitu JIT prˇekla- dem Datove´typy: beˇzˇne´datove´typy vcˇetneˇboolean, rˇeteˇzce Programove´konstrukce: beˇzˇne´cykly a podmı´nky, rozlisˇuje funkce a pro- cedury, objekty, verze VB .NET: jednoducha´ deˇ- dicˇnost, rozhranı´, konstruktory, garbage collector, prˇeteˇzˇova´nı´funkcı´i opera´toru˚, vy´jimky, prˇepiso- va´nı´(overriding) – ekvivalent virtua´lnı´ch metod, generika (obdoba c++ sˇablon) Vy´ukove´materia´ly: Pomeˇrneˇvelke´mnozˇstvı´k drˇı´ve oblı´bene´mu VB, me´neˇpro VBA a VB .NET IDE: MS Visual Studio, pro VBA take´MS Office Rozsˇirˇitelnost: knihovny

45 3. JAZYKY

GUI: WinAPI, pro VB .NET Windows Forms Pouzˇitı´v praxi: snı´zˇena´, VBA je vhodne´prˇi pokrocˇile´pra´ci s MS Office Open-source projekty: prakticky nelze najı´t Zpracova´nı´chyb: starsˇı´ „on error goto“ nebo noveˇjsˇı´ verze vy´jim- kami Dokumentace: formou komenta´rˇu˚, VB .NET formou XML komen- ta´rˇu˚ Stav vy´voje: VB ukoncˇen a nepodporova´n, VBA a VB .NET se rozvı´jı´ Komunita: mala´

Jazyk Visual Basic je na´slednı´kem BASICu zna´me´ho z kdysi oblı´beny´ch osmibito- vy´ch pocˇı´tacˇu˚a prˇı´my´m na´slednı´kem QBasicu, ktery´jizˇv poslednı´verzi meˇl dokonce svu˚j vlastnı´kompila´tor a nebyl tudı´zˇjen interpretovany´m jazykem. Ke konci deva- desa´ty´ch let byl Visual Basic oblı´benou volbou vy´uky objektove´ho programova´nı´na sˇkola´ch, ktere´vsˇak bylo cˇasto zameˇnˇova´no za uda´lostmi rˇı´zene´a neˇkdy byl pojem objekt chybneˇinterpretujı´, jako prvek graficke´ho rozhranı´, jelikozˇjeho podpora OOP byla slaba´. Tento jazyk vsˇak jizˇnenı´ani vyvı´jen ani podporova´n a byl nahrazen no- vou verzı´Visual Basic .NET pro platformu .NET. Veˇtsˇina vlastnostı´jazyku˚rodiny .NET je odvozena´z te´to platformy a proto se lisˇı´v za´sadeˇpouze syntaxı´. Jelikozˇ jazyk BASIC byl poneˇkud stranou ostatnı´ch programovacı´ch jazyku˚, je jeho syntaxe velmi netradicˇnı´a nelze najı´t paralely v jiny´ch jazycı´ch. To je pro studenty prˇi snaze rychle si osvojit univerza´lnı´znalosti velmi nevy´hodne´. Take´prakticke´vyuzˇitı´tohoto jazyka je mensˇı´. Doporucˇit lze jeho variantu Visual Basic for Applications, cozˇje skriptovacı´jazyk pro kancela´rˇsky´balı´k MS Office. Pro studenty oboru˚, ktere´vyuzˇijı´ tvorbu maker je tento jazyk vhodny´.

3.2.6 Java

Autor, rok vzniku: James Gosling (Sun Microsystems), 1995 Paradigma: objektove´ Prˇekla´dany´/interpretovany´: prˇekla´dany´do byteko´du4 Syntakticka´rodina: syntaxe vycha´zı´z C++, ale je zjednodusˇena´ Platforma: multiplatformnı´, ko´d je navı´c platformneˇneza´visly´ Licence: GNU GPL Efektivita: nizˇsˇı´ efektivita zpu˚sobena´ mezivrstvou virtua´l- nı´ho stroje (je vsˇak sta´le zdrojem diskusı´a srov- na´nı´)

4. Byteko´d – obdoba strojove´ho ko´du, ktery´je pomocı´Java Virtual Machine interpretova´n.

46 3. JAZYKY

Datove´typy: za´kladnı´datove´typy (cˇı´selne´, znakove´a bool) jsou primitivnı´i jako objekty, String, pokrocˇile´slozˇene´ typy (kolekce: vektor, mapa, mnozˇina, . . . ) Programove´konstrukce: beˇzˇne´cykly a podmı´nky, objekty, jednoducha´deˇ- dicˇnost, rozhranı´, konstruktory, garbage collector, prˇeteˇzˇova´nı´funkcı´(ne vsˇak opera´toru˚), vy´jimky, generika (obdoba c++ sˇablon) Vy´ukove´materia´ly: velke´mnozˇstvı´knih, ucˇebnic, prˇı´kladu˚, webu˚; spe- cia´lnı´vy´ukova´IDE IDE: Netbeans, Eclipse, IntelliJ IDEA, JBuilder X, JDe- veloper, BlueJ, Greenfoot, a dalsˇı´ Rozsˇirˇitelnost: velke´ mnozˇstvı´ knihoven v prˇehledne´ strukturˇe balı´cˇku˚, mozˇnost integrace s knihovnami v C++ GUI: , AWT, SWT, GWT Pouzˇitı´v praxi: velmi sˇiroka´, spolu s C++ a C# patrˇı´mezi nejoblı´- beneˇjsˇı´na soucˇasne´m pracovnı´m trhu; Java umozˇ- nˇuje nasazenı´ v mobilnı´ch aplikacı´ch, webovy´ch aplikacı´ch, jako applety v prohlı´zˇecˇi i jako samo- statne´ desktopove´ aplikace cˇi ru˚zne´ kombinace (spusˇteˇnı´aplikace prˇı´mo z webove´stra´nky) Open-source projekty: velke´mnozˇstvı´prˇedevsˇı´m desktopovy´ch aplikacı´ i rozsa´hly´ch projektu˚ Zpracova´nı´chyb: vy´jimky, testova´nı´pomocı´unit testu˚ Dokumentace: JavaDoc (specificky´za´pis komenta´rˇu˚) – prˇı´ma´sou- cˇa´st jazyka, dı´ky cˇemuzˇjsou veˇtsˇinou i vy´borneˇ dokumentovane´knihovny Stav vy´voje: sta´le ve vy´voji Komunita: rozsa´hla´komunita, dı´ky specializovany´m vy´uko- vy´m IDE (Greenfoot) i pomeˇrneˇvelka´komunita ucˇitelu˚a zˇa´ku˚cˇi samouku˚

Oblı´benost Javy ve vy´uce sta´le roste. Je k tomu spousta du˚vodu˚, prˇedevsˇı´m dı´ky jejı´ snadneˇjsˇı´syntaxi pro zacˇa´tecˇnı´ky (oproti C/C++ apod.), velmi dobre´dokumentaci a kvalitnı´m i vy´ukovy´m IDE. Jejı´prakticke´vyuzˇitı´je velke´a umozˇnˇuje tvorˇit sˇirokou sˇka´lu aplikacı´od jednoduchy´ch appletu˚nebo mobilnı´ch her azˇpo velke´webove´ porta´ly nebo desktopove´aplikace. Prˇes vesˇkere´jejı´skveˇle´vlastnosti, ktere´ji snadno cˇinı´jasnou volbou pro ucˇitele, je trˇeba si uveˇdomit i jejı´nedostatky. Prˇedevsˇı´m to je cˇasto komplikovanost za´pisu urcˇity´ch na prvnı´pohled jednoduchy´ch veˇcı´dana´pomeˇrneˇstriktnı´m objektovy´m prˇı´stupem. Tyto komplikace prˇina´sˇı´veˇtsˇinou zapouzdrˇenı´a prˇı´kladem mu˚zˇe by´t trˇeba za´pis a cˇtenı´ze souboru, pro ktere´je ve veˇtsˇineˇprˇı´padu˚nutne´pracovat s mi- nima´lneˇ dveˇma objekty, ktere´ soubor zprˇı´stupnı´. Jde sice o objektoveˇ korektnı´ a prakticky´prˇı´stup, ale pro zacˇa´tecˇnı´ka mu˚zˇe by´t prˇı´lisˇkomplikovany´. Velka´komu-

47 3. JAZYKY nita a mnozˇstvı´dostupny´ch i maly´ch projektu˚jako vy´sledku˚vy´uky programova´nı´ v Javeˇmohou by´t zdrojem sˇpatny´ch na´vyku˚. Cˇtenı´a u´prava cizı´ho ko´du byla vzˇdy povazˇovana´za skveˇly´zpu˚sob, jak se naucˇit programovat prˇı´mo od neˇkoho schopneˇj- sˇı´ho.5 Na internetu je dnes ale obzvla´sˇteˇv Javeˇpomeˇrneˇvelke´mnozˇstvı´nekvalitnı´ho ko´du. Take´prˇı´tomnost neˇktery´ch datovy´ch typu˚v podobeˇprimitiv (int) i objektu˚ (Integer) mu˚zˇe prˇina´sˇet proble´my v pochopenı´.

3.2.7 PHP

Autor, rok vzniku: Rasmus Lerdorf, 1995 Paradigma: imperativnı´, strukturovane´, od verze 3 objektove´ (postupneˇvylepsˇovane´a ve verzi 5 zcela zmeˇneˇne´) Prˇekla´dany´/interpretovany´: interpretovany´bud’ webserverem nebo i interpre- tem na prˇı´kazove´rˇa´dce Syntakticka´rodina: C-like, ale rozsˇı´rˇena´ o rˇadu novy´ch prvku˚ (take´ znacˇneˇ„volna´pravidla“ za´pisu ko´du) Platforma: multiplatformnı´ Licence: PHP licence – open source Efektivita: nı´zka´efektivita vykona´va´nı´ko´du, vysoka´efekti- vita zapisova´nı´ko´du – je vhodny´pro RAD6 Datove´typy: pouzˇı´va´dynamicke´a slabe´typova´nı´, proto nema´ smysl datove´ typy diskutovat, vyjma zmı´nky o existenci polı´(z principu dynamicky´ch a vzhle- dem k typova´nı´ obecneˇ nehomogennı´ch), ktera´ mohou jako index prˇijı´mat i text a proto fungovat jako hash tabulky, da´le podpora boolean hodnot a tzv. null-hodnoty (neprˇirˇazena´hodnota) Programove´konstrukce: beˇzˇne´podmı´nky (navı´c mozˇnost porovna´vat ope- ra´torem 3 rovnı´tek na odlisˇenı´rovnosti a identity) a cykly, navı´c cyklus foreach (procha´zı´postupneˇ prvky pole), funkce, objekty, jednoducha´ deˇdicˇ- nost, abstraktnı´a staticke´metody/trˇı´dy, konstruk- tory a destruktory, rozhranı´, vy´jimky, dynamicke´ na´zvy promeˇnny´ch (jme´no promeˇnne´urcˇene´jinou promeˇnnou), Vy´ukove´materia´ly: rˇada ucˇebnic a hlavneˇcˇla´nku˚na internetu

5. V knize At Work od Susan Lammers (viz http://programmersatwork. wordpress.com/bill-gates-1986/) potvrzuje Bill Gates, zˇe nejlepsˇı´zpu˚sob, jak se naucˇit progra- movat, je cˇı´st kvalitnı´cizı´zdrojove´ko´dy.On sa´m pry´procˇı´tal vytisˇteˇne´vy´stupy z popelnic pocˇı´tacˇove´ho centra. 6. RAD – Rapid Application Development, rychly´vy´voj aplikacı´

48 3. JAZYKY

IDE: lze pouzˇı´t libovolny´textovy´editor (PSPad, Note- pad++) nebo Netbeans, Eclipse, Zend Studio, ph- pDesigner Rozsˇirˇitelnost: existuje rˇada knihoven a prˇedevsˇı´m frameworku˚ (Zend, Nette, . . . ), mozˇnost integrace s C/C++ GUI: PHP-GTK, wxPHP, z PECL repozita´rˇu˚take´pod- pora Win32 API a Pouzˇitı´v praxi: velmi sˇiroke´, prakticky nejoblı´beneˇjsˇı´ jazyk na male´a strˇedneˇvelke´webove´projekty Open-source projekty: neprˇeberne´mnozˇstvı´zdroju˚a knihoven, bohuzˇel velmi cˇasto naprogramovane´sˇpatny´m stylem Zpracova´nı´chyb: vy´jimky Dokumentace: jen jako komenta´rˇe, prˇı´padneˇprojektem Doxygen Stav vy´voje: neusta´le vyvı´jen Komunita: jedna z nejveˇtsˇı´ch a nejaktivneˇjsˇı´ch internetovy´ch komunit, z velke´cˇa´sti ale amate´rsky´ch programa´- toru˚a samouku˚(neˇktere´rady mohou by´t neu´plne´ nebo sˇpatne´)

PHP je jeden z nejoblı´beneˇjsˇı´ch jazyku˚mezi studenty gymna´ziı´, prˇedevsˇı´m pro svou jednoduchost a velmi sˇirou podporu komunitou, snadne´ a rychle´ vy´sledky, byt’ pouze ve webove´m prohlı´zˇecˇi (jako skriptovacı´jazyk na prˇı´kazove´rˇa´dce se prˇı´lisˇ nepouzˇı´va´). Jeho oblı´benosti jisteˇ prˇispeˇl pra´veˇ rozmach sluzˇby WWW a sˇiroka´ podpora tohoto jazyka na porta´lech nabı´zejı´cı´ch webhosting zdarma. Atraktivnı´ je take´prˇı´lezˇitost pro strˇedosˇkola´ky si programova´nı´m v PHP prˇivydeˇla´vat protozˇe nabı´dka pra´ce v tomto jazyce sta´le setrva´va´ a na rozdı´l od jiny´ch jazyku˚ je zde popta´vka prˇedevsˇı´m po strˇedosˇkolsky vzdeˇlany´ch lidech, prˇı´padneˇstudentech (i strˇednı´ch sˇkol). Jazyk je tercˇem cˇasty´ch negativnı´ch komenta´rˇu˚z rˇad profesiona´lnı´ch programa´- toru˚i ucˇitelu˚a to prˇedevsˇı´m pro svou rozvolneˇnou syntaxi a mnozˇstvı´nekvalitnı´ho ko´du, ktere´lze potka vsˇude mozˇneˇv internetu. Jazyk sa´m o sobeˇvsˇak tak sˇpatny´ nenı´, i kdyzˇpro vy´uku ma´neˇkolik neprakticky´ch vlastnostı´. Kromeˇtoho, zˇe je inter- pretovany´a pouzˇı´vany´prakticky jen pro web, je omezujı´cı´jeho slabe´a dynamicke´ typova´nı´. Tato kombinace prakticky neumozˇnˇuje vysveˇtlit pojem datove´ho typu a typove´kontroly a za´sadnı´m zpu˚sobem znesnadnˇuje hleda´nı´chyb, ktery´ch se za- cˇa´tecˇnı´ci dopousˇteˇjı´. Celkoveˇje velice du˚lezˇite´hlı´dat zacˇa´tecˇnı´ky, aby dodrzˇovali programa´torske´konvence. Jazyky pro rychly´vy´voj aplikacı´jim totizˇda´vajı´pocit prˇı´lisˇne´volnosti. Na druhou stranu to umozˇnı´vı´ce se soustrˇedit na rˇesˇeny´proble´m a drˇı´ve se docˇkat vy´sledku˚.

49 3. JAZYKY

3.2.8 JavaScript (resp. ECMAScript)

Autor, rok vzniku: Brendan Eich, 1995 Paradigma: strukturovane´, cˇa´stecˇneˇ objektove´, uda´lostmi rˇı´- zene´ Prˇekla´dany´/interpretovany´: interpretovany´na straneˇwebove´ho prohlı´zˇecˇe Syntakticka´rodina: C-like Platforma: multiplatformnı´, ale komplikovaneˇ prˇenositelny´ mezi prohlı´zˇecˇi Efektivita: velmi nı´zka´ Datove´typy: pouzˇı´va´dynamicke´a slabe´typova´nı´, nelze tedy mluvit prˇı´mo o datovy´ch typech Programove´konstrukce: beˇzˇne´podmı´nky a cykly, funkce, vcˇetneˇanonym- nı´ch funkcı´, zjednodusˇeny´koncept objektu˚(v za´- sadeˇjde o pole, ktera´mohou jako sve´polozˇky ob- sahovat i funkce), vy´jimky Vy´ukove´materia´ly: ne mnoho knı´zˇek, omezene´mnozˇstvı´elektronicke´ literatury na internetu IDE: libovolny´ textovy´ editor nebo ru˚zne´ specializo- vane´editory Rozsˇirˇitelnost: minima´lnı´: ru˚zne´ JavaScriptove´ frameworky a knihovny GUI: obsahuje funkce pro vola´nı´ dialogovy´ch oken, prˇı´padneˇ GUI tvorˇene´ prvky webove´ stra´nky (knihovny jako ExtJS, Dojo, Scriptaculous) Pouzˇitı´v praxi: zı´ska´va´na oblibeˇpro tvorbu webovy´ch aplikacı´a webove´ho GUI, du˚lezˇite´pouzˇitı´v HTML 5 Open-source projekty: ma´lo Zpracova´nı´chyb: vy´jimky Dokumentace: v komenta´rˇı´ch, nicme´neˇkvu˚li komprimaci skriptu˚ pro prˇenos do prohlı´zˇecˇe se cˇasto odstranˇuje Stav vy´voje: vyvı´jı´se, vy´voj za´visı´i na webovy´ch prohlı´zˇecˇı´ch Komunita: mala´

JavaScript lze oznacˇit za pomeˇrneˇ kontroverznı´ jazyk. Jeho vy´voj je va´zany´ na webove´prohlı´zˇecˇe a jejich implementace, cozˇprˇina´sˇı´znacˇne´proble´my se vza´jem- nou kompatibilitou. Jazyk je take´va´zany´na DOM (Document Object Model) HTML stra´nky. Sta´va´se tak pomeˇrneˇbeˇzˇneˇ, zˇe po odladeˇnı´skriptu ve Firefoxu nastupuje pra´ce na odstraneˇnı´chyby, ktera´zpu˚sobila necˇinnost v Operˇe. Pote´prˇicha´zı´fa´ze programova´nı´workaround rˇesˇenı´pro InternetExplorer, ktere´zpu˚sobı´necˇinnost ve

50 3. JAZYKY

Firefoxu. . . Jazyk je sice standardizovany´v urcˇite´sve´verzi organizacı´ECMA Inter- national, ale implementace jsou ru˚znorode´(obzvla´sˇteˇze strany firmy Microsoft). Cˇaste´je take´sˇpatne´vyuzˇitı´tohoto jazyka vycha´zejı´cı´z nepochopenı´jeho u´cˇelu, naprˇı´klad pro zaheslova´nı´webove´stra´nky, cˇi naopak opomı´jenı´mozˇnosti, zˇe pod- pora JavaScriptu v prohlı´zˇecˇi nefunguje. Podobneˇjako u PHP je slabe´a dynamicke´ typova´nı´nevhodne´pro zacˇa´tecˇnı´ky a JavaScript navı´c umozˇnˇuje funkcı´m tva´rˇit se jako objekty a tudı´zˇdo promeˇnny´ch ukla´dat reference na funkce. Tı´mto zpu˚sobem v podstateˇimplementuje „falesˇne´“ objektove´chova´nı´a zana´sˇı´koncept blı´zky´funk- ciona´lnı´mu programova´nı´. Acˇkoliv jde o jazyk, ktery´dı´ky HTML 5 dozna´jisteˇbrzy jesˇteˇveˇtsˇı´ho rozsˇı´rˇenı´, nelze ho v zˇa´dne´m prˇı´padeˇdoporucˇit pro pouzˇitı´na sˇkola´ch a uzˇvu˚bec ne pro zacˇa´tecˇnı´ky. Jeho chaoticˇnost a nejednotna´ implementace ho pro tento u´cˇel zcela diskvalifikujı´.

3.2.9 Perl

Autor, rok vzniku: Larry Wall, 1987 Paradigma: multiparadigmaticky´: prima´rneˇ strukturovane´, objektove´(skrze packages), funkciona´lnı´(skrze ba- lı´k Language::Functional) Prˇekla´dany´/interpretovany´: interpretovany´, ale existuje i prˇekladacˇ perlcc Syntakticka´rodina: vlastnı´(snaha o jednoduchost a funkcˇnost) Platforma: multiplatformnı´ Licence: GNU GPL Efektivita: nizˇsˇı´efektivita beˇzˇı´cı´ho ko´du (odpovı´da´interpre- tovany´m jazyku˚m), vysoka´efektivita za´pisu ko´du pro urcˇite´typy u´loh (zpracova´nı´textu) Datove´typy: dynamicky a slabeˇtypovany´, nerozlisˇuje cela´a ra- ciona´lnı´ cˇı´sla (ve vy´chozı´m nastavenı´ jsou cˇı´sla vzˇdy raciona´lnı´), v ra´mci slabe´ho typova´nı´volneˇ prˇecha´zı´ mezi rˇeteˇzci a cˇı´sly, tyto typy oznacˇuje jako „skala´r“, da´le rozlisˇuje pole (s indexem) a ha- she (s klı´cˇem) – uchova´vajı´seznamy a lze je efek- tivneˇzpracova´vat funkciona´lnı´m prˇı´stupem (naprˇ. funkce map), odkazy (na skala´ry, pole i funkce)

51 3. JAZYKY

Programove´konstrukce: beˇzˇne´ podmı´nky a cykly, navı´c syntakticky jed- nodusˇsˇı´ for a foreach cyklus nad seznamem a cyklus until, regula´rnı´vy´razy7, funkce (se spe- cificky´m za´pisem parametru˚pomocı´„prototypu“, parametry jsou pak prˇı´tomny v poli @ ), ovladacˇe („alternativa proudu˚ z C++“, slouzˇı´ pro vstup a vy´stup), balı´ky a moduly, objekty, vı´cena´sobna´ deˇdicˇnost, prˇeteˇzˇova´nı´ opera´toru˚ a metod, abs- traktnı´ metody, konstruktory a destruktory, gar- bage collector Vy´ukove´materia´ly: knihy a cˇla´nky na internetu IDE: libovolny´textovy´editor (vim, emacs) Rozsˇirˇitelnost: velke´ mnozˇstvı´ knihoven v archivech CPAN, vlastnı´moduly, integrace s jiny´mi jazyky (C/C++) pomocı´XS nebo SWIG GUI: Tk, GTK2, wxWidgets (knihovna wx) Pouzˇitı´v praxi: velmi sˇiroke´ uplatneˇnı´ ve webovy´ch projektech, zpracova´nı´ textu a v unixovy´ch syste´mech; ko- mercˇneˇjako jeden z jazyku˚prˇi spra´veˇunixovy´ch serveru˚ Open-source projekty: existujı´ Zpracova´nı´chyb: vy´jimky (ovsˇem zpracova´vane´specificky´m zpu˚so- bem) Dokumentace: Plain Old Documentation (POD) jako komenta´rˇe prˇı´mo v ko´du, z nichzˇse pak generuje dokumen- tace. Stav vy´voje: sta´le ve vy´voji Komunita: prˇedevsˇı´m v unixove´m prostrˇedı´, veˇtsˇinou profe- siona´lnı´spra´vci, prˇedevsˇı´m anglicky mluvı´cı´

Jazyk Perl je na jednu stranu velice zajı´mavou uka´zkou jazyka s obrovsky´mi mozˇ- nostmi a volny´m prostorem pro programa´tora, vytvorˇit si vlastnı´styl a rˇesˇit proble´my bez syntakticky´ch omezenı´, na druhou stranu teˇmito vlastnostmi je diskvalifikova´n pro pouzˇitı´ve vy´uce zacˇa´tecˇnı´ku˚. Perl je velmi volnomysˇlenka´rˇsky´ve formeˇza´pisu, jednu veˇc lze rˇesˇit syntakticky diametra´lneˇodlisˇny´mi zpu˚soby, cozˇzacˇa´tecˇnı´ky mate (prˇı´kladem budizˇneˇkolik zpu˚sobu˚za´pisu for-cyklu). Podobneˇstriktneˇdodrzˇene´ slabe´typova´nı´, ktere´umozˇnˇuje na obsah promeˇnne´nahlı´zˇet neˇkolika zpu˚soby (pole

7. Regula´rnı´vy´raz je textovy´rˇeteˇzec, ktery´ma´za u´kol popsat strukturu obvykle veˇtsˇı´ho mnozˇstvı´ rˇeteˇzcu˚. Pouzˇı´vajı´se prˇi slozˇiteˇjsˇı´m vyhleda´va´nı´nebo nahrazova´nı´, kdyzˇje potrˇeba vyhledat urcˇite´ typy textu˚, ktere´je neefektivnı´hledat postupny´m vypisova´nı´m (naprˇ. hleda´m vsˇechna slova zacˇı´najı´cı´ pı´smenem a na´sledovany´m jednou cˇı´slovkou a cˇtyrˇmi nebo peˇti velky´mi pı´smeny).

52 3. JAZYKY zapsane´v kontextu skala´ru je pocˇtem jeho prvku˚, tedy $pole = @pole zpu˚sobı´vy- tvorˇenı´skala´rnı´promeˇnne´pole obsahujı´cı´cˇı´slo, ktere´odpovı´da´pocˇtu prvku˚v poli pole, a mezi teˇmito dveˇma promeˇnny´mi se rozlisˇuje), omezuje srozumitelnost a pro zacˇa´tecˇnı´ka bude prˇı´lisˇchaoticke´. Neme´neˇnesrozumitelne´je i pro cˇloveˇka bez drˇı´veˇjsˇı´praxe sˇiroke´vyuzˇı´va´nı´prˇeteˇzˇova´nı´, ktere´v kombinaci se slaby´m typova´nı´m zpu˚sobuje ru˚zne´ chova´nı´ stejny´ch funkcı´ v ru˚zne´m kontextu. Poslednı´ negativnı´ prˇipomı´nka se ty´ka´prvku˚funkciona´lnı´ho programova´nı´: ty sice vy´razneˇzvysˇujı´ efektivitu za´pisu specificky´ch u´loh, ale v souladu s tvrzenı´mi z prvnı´kapitoly je trˇeba si uveˇdomit, zˇe tyto koncepty jsou velmi na´rocˇne´na pochopenı´. Acˇkoliv je Perl skveˇly´m a uzˇitecˇny´m jazykem, rozhodneˇjej nelze doporucˇit zacˇa´tecˇnı´ku˚m a jako prvnı´jazyk.

3.2.10 Python

Autor, rok vzniku: Guido van Rossum, 1991 Paradigma: multiparadigmaticky´: strukturovany´ i objektovy´ s funkciona´lnı´mi prvky Prˇekla´dany´/interpretovany´: interpretovany´ Syntakticka´rodina: vlastnı´, pouzˇı´va´ zarovna´nı´ mezerami k urcˇenı´ bloku˚ko´du Platforma: multiplatformnı´ Licence: Python Software Foundation Licence, kompati- bilnı´s GNU GPL (open source), bez copyleftu Efektivita: nizˇsˇı´(interpretovany´jazyk) Datove´typy: dynamicke´a silne´typova´nı´, datovy´typ nena´lezˇı´ jme´nu promeˇnne´, ale ulozˇene´ hodnoteˇ; Python zna´cela´cˇı´sla, dlouha´cela´cˇı´sla (omezena´jen veli- kostı´pameˇti), rea´lna´(raciona´lnı´) a komplexnı´cˇı´sla, da´le rˇeteˇzce (pouzˇı´va´Unicode), n-tice (heterogennı´ pole s pevnou de´lkou a obsahem), seznamy (hete- rogennı´ dynamicke´ pole) a slovnı´ky (asociativnı´ pole, hash), boolean (konstanty jsou s velky´mi pı´s- meny True a False) Programove´konstrukce: podmı´nky if-else doplneˇne´ o veˇtev elif (alter- nativnı´ podmı´nka mı´sto podpodmı´nky, varianta switch-case neexistuje), cyklus while a for, ano- nymnı´lambda funkce, datove´proudy,objekty (bez rˇı´zenı´prˇı´stupu, tj. neexistuje private/protected/- public), vı´cena´sobna´ deˇdicˇnost, konstruktor, de- struktor, metody jsou v roli atributu s funkcı´ja- kozˇto prˇirˇazenou hodnotou, vy´jimky Vy´ukove´materia´ly: rˇada ucˇebnic a cˇla´nku˚na internetu (i v cˇesˇtineˇ)

53 3. JAZYKY

IDE: PyDev (Eclipse plugin), Netbeans, Code::Blocks, textove´editory a jine´ Rozsˇirˇitelnost: moduly (import) GUI: PyGTK, PyQt, PySWT, WxPython (wxWidgets), Win32, . . . Pouzˇitı´v praxi: sˇiroce pouzˇı´vany´obzvla´sˇteˇv unixove´m sveˇteˇ, take´ na webove´technologie Open-source projekty: dostupne´ Zpracova´nı´chyb: vy´jimky, DocTest balı´cˇek pro testova´nı´ Dokumentace: pouze komenta´rˇe nebo externı´dokumentacˇnı´pro- jekt Doxygen Stav vy´voje: vyvı´jı´se Komunita: pomeˇrneˇvelka´i cˇesky mluvı´cı´

Jazyk Python je velice zajı´mavou alternativou pro zacˇa´tecˇnı´ky. Cˇasto je doporucˇova´n jako vhodny´jazyk k vy´uce. Obzvla´sˇteˇlze pochva´lit koncept povinne´ho zarovna´va´nı´ ko´du, ktere´urcˇuje bloky ko´du. Zacˇa´tecˇnı´ci se tak naucˇı´vhodneˇupravovat ko´d, cozˇ je vzˇdy velmi obtı´zˇne´. Syntaxe je celkoveˇjednoducha´a snadno naucˇitelna´. Mozˇnosti knihoven (vcˇetneˇoblı´bene´PyGame na tvorbu her) jsou vcelku velke´, bohuzˇel chybı´ jake´koliv vy´ukove´prostrˇedı´, cozˇale u starsˇı´ch studentu˚nenı´vu˚bec na prˇeka´zˇku. Z hlediska objektove´ho na´vrhu lze jen namı´tnout, zˇe absence rˇı´zenı´prˇı´stupu bude studentu˚m zpu˚sobovat proble´my v jiny´ch OOP jazycı´ch. Celkoveˇtvorˇı´Python (spolu s na´sledujı´cı´m Ruby) volbu, ktere´se nabı´zejı´jako dobra´alternativa k „mainstreamu“ a pro jednoduchost sve´ syntaxe je vy´borny´m kandida´tem na jazyk, ktery´ by byl volen jako uka´zka „dalsˇı´ch mozˇnostı´“ ke konci sˇkolnı´ho roku prˇi programova´nı´ naprˇ. v Javeˇ.

3.2.11 Ruby

Autor, rok vzniku: Yukihiro Matsumoto, 1995 Paradigma: striktneˇobjektove´s funkciona´lnı´mi prvky Prˇekla´dany´/interpretovany´: interpretovany´ Syntakticka´rodina: vlastnı´, blı´zka´C Platforma: multiplatformnı´ Licence: dua´lnı´: Ruby a BSD (open source) Efektivita: vykona´va´nı´ko´du nı´zka´(da´no interpretovanostı´), za´pis ko´du velmi efektivnı´

54 3. JAZYKY

Datove´typy: dynamicke´ a silne´ typova´nı´, promeˇnne´ se nede- klarujı´, typ je prˇirˇazen podle prˇirˇazene´ hodnoty, za´kladnı´typy jsou cˇı´sla (cela´mala´: Fixnum a velka´ Bignum, desetinna´: Float), rˇeteˇzce (string) a pole a hash (v obou prˇı´padech jde o typy heterogennı´, tedy prvky pole mohou mı´t ru˚zny´datovy´typ, na rozdı´l od jiny´ch jazyku˚), boolean a null hodnoty jsou emulova´ny pomocı´singleton8 instancı´ true trˇı´dy TrueClass, false trˇı´dy FalseClass a nil – nilClass Programove´konstrukce: podmı´nka if-else obsahuje i veˇtev elsif (alterna- tivnı´ podmı´nka mı´sto podpodmı´nky), specia´lnı´ negativnı´podmı´nka unless (nenı´-li), podmı´nka s vy´cˇty se zapisuje case-when mı´sto v ostatnı´ch jazycı´ch obvykle´ho switch-case, cykly while, until a for, specia´lnı´iteracˇnı´metody .times (pro cˇı´sla) a .each (pro pole a hash) a pro bloky .upto a .downto, bloky, regula´rnı´ vy´razy, ob- jekty, mı´sto konstruktoru metoda initialize, de- struktory neexistujı´(ale lze nastavit „finalizer“ po- mocı´ ObjectSpace.define finalizer, jedno- ducha´deˇdicˇnost a mixin (mozˇnost vlozˇit „modul“ klı´cˇovy´m slovem include do objektu), vy´jimky Vy´ukove´materia´ly: omezene´mnozˇstvı´knı´zˇek a manua´lu˚, veˇtsˇinou an- glicky, specia´lnı´vy´ukova´distribuce KidsRuby, de- klarovana´podpora KidsRuby na noveˇvznikajı´cı´m velmi levne´m embedded pocˇı´tacˇi Raspberry Pi IDE: KidsRuby, Netbeans, RubyMine, Aptana, Redcar, textove´editory Rozsˇirˇitelnost: knihovny (RubyGems), integrace C/C++ ko´du (pomocı´SWIG) GUI: Shoes, FXRuby, qtRuby (Qt), Tk, wxRuby (wxWi- dgets) a dalsˇı´ Pouzˇitı´v praxi: nizˇsˇı´, jazyk se teprve rozsˇirˇuje, oblı´bena´zacˇı´na´by´t jeho varianta pro webove´projekty: Ruby on Rails Open-source projekty: dostupne´, ale ma´lo Zpracova´nı´chyb: vy´jimky Dokumentace: vlastnı´ syste´m RDoc, generujı´cı´ dokumentaci ze specia´lnı´ch komenta´rˇu˚ Stav vy´voje: sta´le ve vy´voji

8. singleton – na´vrhovy´vzor jedina´cˇek, trˇı´da, ktera´ma´priva´tnı´konstruktor a instance se vytva´rˇı´ vola´nı´m specia´lnı´staticke´metody, jenzˇvracı´sta´le stejnou instanci

55 3. JAZYKY

Komunita: pomeˇrneˇmala´, ale rozsˇirˇujı´cı´se, obzvla´sˇteˇu pro- jektu Ruby on Rails

Jazyk Ruby je pro vy´uku zacˇa´tecˇnı´ku˚ velice zajı´mavy´. Ma´ pomeˇrneˇ jednoducha´ syntakticka´pravidla, sˇiroke´mozˇnosti ru˚zny´ch knihoven vcˇetneˇknihoven pro GUI nebo vy´voj jednoduchy´ch her (Gosu, Rubygame a dalsˇı´). Acˇkoliv je interpretovany´ a nelze na neˇm demonstrovat kompilaci, pro u´plne´zacˇa´tecˇnı´ky bude vy´hodou nejen jednoduchost, ale take´cˇistota objektove´ho prˇı´stupu, prˇedevsˇı´m absence primitivnı´ch typu˚, jejichzˇkombinova´nı´s objekty naprˇ. v Javeˇnebo C++ komplikuje vysveˇtlenı´ principu˚prˇirˇazenı´a porovna´va´nı´. Do budoucna je nadeˇje postupneˇdostupneˇjsˇı´ch vy´ukovy´ch zdroju˚a prostrˇedı´, ktera´zatı´m zastupuje jen KidsRuby a to spı´sˇe pro mladsˇı´zˇa´ky. Kazˇdopa´dneˇby Ruby mohlo by´t dobrou volbou jako prvnı´jazyk pro mladsˇı´zˇa´ky.

3.2.12 Karel

Autor, rok vzniku: Richard E. Pattis, 1981 Paradigma: strukturovane´ Prˇekla´dany´/interpretovany´: interpretovany´ Syntakticka´rodina: vlastnı´, trivia´lnı´ Platforma: multiplatformnı´ Licence: v za´vislosti na implementaci, dostupne´ i open source Efektivita: velmi nı´zka´, ale efektivnı´pro oveˇrˇenı´schopnosti algoritmizace Datove´typy: zˇa´dne´ Programove´konstrukce: podmı´nka if-else, cyklus s podmı´nkou nebo prˇe- dem dany´m pocˇtem opakova´nı´, neˇkolik za´klad- nı´ch prˇı´kazu˚a logicky´ch vy´razu˚(podmı´nek) Vy´ukove´materia´ly: ma´lo, ale kromeˇstare´literatury i noveˇjsˇı´, viz [5] IDE: http://karel.oldium.net a rˇada dalsˇı´ch Rozsˇirˇitelnost: zˇa´dna´(pouze tvorbou svy´ch odvozeny´ch prˇı´kazu˚) GUI: hernı´pla´n Pouzˇitı´v praxi: zˇa´dne´ Open-source projekty: zˇa´dne´ Zpracova´nı´chyb: zˇa´dne´(IDE ohla´sı´chybu syntaktickou i beˇhovou) Dokumentace: v neˇktery´ch implementacı´ch lze vlozˇit komenta´rˇ Stav vy´voje: ukoncˇeny´ Komunita: nenı´

Komenta´rˇk jazyku Karel je soucˇa´stı´popisu jeho prostrˇedı´v na´sledujı´cı´kapitole.

56 Kapitola 4 Vy´vojova´a vy´ukova´prostrˇedı´

4.1 Robot Karel

Robot Karel je jazyk, ktery´v 80. letech 20. stoletı´vymyslel Richard Pattis pro po- trˇeby vy´uky programova´nı´na Stanford University. Od te´doby byl implementovany´ do mnoha ru˚zny´ch prostrˇedı´a pro ru˚zne´operacˇnı´syste´my. Tato prostrˇedı´vzˇdy ob- sahujı´cˇtvercovou sı´t’polı´cˇek (acˇkoliv pu˚vodnı´implementace obsahovala vodorovne´ a svisle´cesty a robot prˇecha´zel po krˇizˇovatka´ch), po ktery´ch se pohybuje postavicˇka robota, ktera´ovla´da´pouze neˇkolik za´kladnı´ch prˇı´kazu˚: krok, vlevo-vbok, zvedni a polozˇ(znacˇku na aktua´lnı´polı´cˇko). Veˇtsˇina implementacı´take´podporuje podmı´nky a cykly, test na prˇı´tomnost zdi nebo znacˇky a orientace na sveˇtove´strany. Jako velice sˇikovne´prostrˇedı´se jevı´cˇeska´implementace Ing. Oldrˇicha Jedlicˇky, absolventa Za´padocˇeske´univerzity, Fakulty aplikovany´ch veˇd. Tato implementace je napsana´v JavaScriptu a je volneˇdostupna´na adrese http://karel.oldium.net. Aplikace ma´velice snadne´pouzˇitı´podobneˇjako je snadny´samotny´jazyk Karel. Pro- strˇedı´umozˇnˇuje ucˇit Karla nove´prˇı´kazy, ktere´jsou slozˇene´ze za´kladnı´ch prˇı´kazu˚. Sı´la jazyka je znacˇneˇomezena´absencı´promeˇnny´ch, prˇesto velice dobrˇe slouzˇı´prv- nı´mu sezna´menı´s algoritmizacı´v tomto prˇı´padeˇna trivia´lnı´m imperativnı´m jazyku. V tomto smyslu jde o vyuzˇitı´prˇı´stupu imperative-first, nicme´neˇstudenti tento fakt ani nemusı´vnı´mat, jelikozˇu´lohy rˇesˇitelne´Karlem jsou veˇtsˇinou jednoduche´a kra´tke´. Samotna´dekompozice u´kolu na dı´lcˇı´prˇı´kazy nenı´jazykem nijak vynucena´, acˇkoliv je dobre´ji po studentech pozˇadovat. Funkce samotne´jsou pak s nadhledem vzato de facto metody objektu robota Karla a proto necˇinı´zˇa´dny´proble´m prˇı´mo nava´zat i na paradigma objektove´. Zajı´mave´je sledovat i zˇa´ky, kterˇı´uzˇovla´dajı´neˇktery´z programovacı´ch jazyku˚ (cˇasto naprˇı´klad PHP), jak rˇesˇı´ neˇktere´ u´lohy v tak trivia´lnı´m prostrˇedı´. Prˇı´lisˇna´ jednoduchost jazyka totizˇvynucuje opravdu nı´zkou´rovnˇove´u´vahy a spra´vnou de- kompozici proble´mu. Prostrˇedı´je idea´lnı´na jednoduche´u´lohy z algoritmizace. Zˇ a´ky bavı´a motivuje k pra´ci, protozˇe jejich slovy: „Neˇco tak jednoduche´ho prˇece musı´m zvla´dnout vymyslet.“ Za´rovenˇumozˇnˇuje experimentovat, zkousˇet s okamzˇity´m vy´- sledkem a pochopit pomeˇrneˇsnadno naprˇı´klad vnorˇene´cykly. Velkou vy´hodou prostrˇedı´je jeho funkcˇnost prˇı´mo ve webove´m prohlı´zˇecˇi se zapnuty´m JavaScriptem, mozˇnost ukla´dat a nacˇı´tat u´koly ve formeˇtextove´ho rˇe- teˇzce, ktery´lze snadno poslat e-mailem k opravenı´. Jazyk je interpretovany´a zˇa´ci se v tomto prostrˇedı´poprve´setkajı´s beˇhovy´mi chybami, prˇi ktery´ch jejich rˇesˇenı´bude

57 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´ pro specificke´vstupnı´podmı´nky koncˇit chybou, cozˇje naucˇı´komplexneˇuvazˇovat o mozˇny´ch chybny´ch vstupech. Jelikozˇje toto prostrˇedı´vynikajı´cı´pra´veˇpro vy´uku algoritmizace jednoduchy´ch proble´mu˚, bude pro neˇj v kapitole Prˇı´pravy pro semina´rˇprogramova´nı´ nabı´dnuto neˇ- kolik vzorovy´ch u´loh. Z jazyka Karel vycha´zı´i Karel++, ktery´je jeho objektovou verzı´, inspirovanou Javou. Tato verze ale nenı´prˇı´lisˇrozsˇı´rˇena´, je na´rocˇne´pro ni najı´t kvalitnı´prostrˇedı´a dle me´ho na´zoru neprˇina´sˇı´zˇa´dne´za´sadnı´vy´hody vyjma vazby na objektovou formu za´pisu, cozˇnevyva´zˇı´vy´hody prostrˇedı´vy´sˇe uvedene´ho.

4.2 Lego Mindstorms

Firma Lego nabı´zı´v produktove´rˇadeˇMindstorms roboticke´stavebnice a stej- nojmenne´vy´vojove´prostrˇedı´. Stavebnice (v noveˇjsˇı´NXT verzi) jsou rˇı´zeny mikro- procesory firmy Atmel a je dostupna´kompletnı´technicka´dokumentace. Dı´ky tomu lze do stavebnic nahra´t i alternativnı´firmware. Stavebnice jsou bohuzˇel pomeˇrneˇ drahe´a take´vy´vojove´prostrˇedı´je zpoplatneˇno, nicme´neˇexistujı´alternativnı´IDE, vcˇetneˇneˇktery´ch zdarma dostupny´ch. Tato alternativnı´prostrˇedı´a firmware pak na- bı´zejı´mozˇnost programovat stavebnice v jazycı´ch C/C++, Java, Perl, Python, Ruby a dalsˇı´ch. Samotne´IDE Mindstorms je graficke´a ko´d je v nich skla´da´n z obra´zkovy´ch bloku˚. Za´kladnı´rozhranı´obsahuje kromeˇakcı´(spustit nebo vypnout motor, rozsvı´tit sveˇtlo, prˇehra´t zvuk, . . . ) take´cykly a podmı´nky rˇı´zene´cˇidly (dotykove´, hlasitostnı´, infra, barvocitlive´, ultrazvukove´, . . . ). Nakla´da´nı´ s promeˇnny´mi i samotny´mi podmı´n- kami je ale ve slozˇiteˇjsˇı´ch u´loha´ch poneˇkud neintuitivnı´azˇkrkolomne´, cozˇje da´no konstruova´nı´m parametru˚v dialogove´m okneˇa propojova´nı´m vstupu˚a vy´stupu˚ z jednotlivy´ch bloku˚spojnicemi „konektoru˚“, ktere´jsou standardneˇskryty. Zajı´mavou vlastnostı´ je podpora paralelnı´ho vykona´va´nı´ cˇinnostı´ a prvnı´ se- zna´menı´s blokujı´cı´mi a neblokujı´cı´mi akcemi – naprˇı´klad prˇi spusˇteˇnı´motoru lze nastavit pocˇet ota´cˇek nebo u´hel (pak je cˇinnost blokujı´cı´a vykona´va´nı´ko´du pokra- cˇuje azˇpo dokoncˇenı´) nebo jen vydat povel k zastavenı´cˇi spusˇteˇnı´motoru (pak je neblokujı´cı´a ko´d pokracˇuje ihned). Stavebnice je jizˇna neˇktery´ch sˇkola´ch oblı´bena´prˇedevsˇı´m zˇa´ky nizˇsˇı´ch rocˇnı´ku˚ a existujı´souteˇzˇe porˇa´dane´pro strˇednı´sˇkoly, sady byly veˇtsˇinou nakoupeny dı´ky projektu˚m, ze ktery´ch vzesˇly i vy´ukove´materia´ly. Vy´vojove´prostrˇedı´je pro zˇa´ky nizˇsˇı´ho stupneˇgymna´ziı´na prvnı´sezna´menı´velmi vhodne´, ale neva´hal bych brzy prˇejı´t na alternativnı´firmware a beˇzˇne´programovacı´jazyky. Zde nejspı´sˇC, jelikozˇ jde o uka´zkovou aplikaci mikroprocesorove´techniky a znalost jazyka C lze pozdeˇji uplatnit prˇı´mo prˇi programova´nı´mikroprocesoru˚Atmel nebo Microchip, se ktery´mi se opravdovı´za´jemci o robotiku velmi brzy setkajı´. V prostrˇedı´Mindstorms mohou programovat i naprostı´zacˇa´tecˇnı´ci bez nutnosti prakticky jaky´chkoliv znalostı´.

58 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´

4.3 Arduino

Zajı´mavou alternativu k Robolabu nabı´zı´ platforma Arduino. Je to pomeˇrneˇ mlady´projekt kombinujı´cı´v sobeˇjednoduche´vy´vojove´prostrˇedı´napsane´v Javeˇ, knihovny a kompila´tor jazyka AVR-C/C++ (jazyk C pro mikroprocesory firmy At- mel) a desku plosˇne´ho spoje, jejı´mzˇsrdcem je mikroprocesor AVR Atmega firmy Atmel. Vsˇe je open-source, vcˇetneˇhardware, ktery´je dostupny´i v CˇR za pomeˇrneˇ nı´zkou cenu a existujı´i jeho jesˇteˇlevneˇjsˇı´cˇı´nske´klony. Samotny´programovacı´jazyk je oznacˇova´n jako Wiring (jde o samostatny´projekt http://wiring.org.co) a jsou to ve skutecˇnosti knihovny jazyka AVR-C/C++, ktere´vy´znamny´m zpu˚sobem programova´nı´usnadnˇujı´. Vy´vojove´prostrˇedı´pak vycha´zı´z projektu Processing (jde o samostatny´projekt, ktery´umozˇnˇuje mikroprocesory programovat pro zmeˇnu v ja- zyce Java, cozˇje ale poneˇkud neobvykle´). IDE je velice prˇı´jemne´a jednoduche´na ovla´da´nı´a prˇı´mo jeho soucˇa´stı´je velke´ mnozˇstvı´vzorovy´ch prˇı´kladu˚a mozˇnost ihned ko´d zkompilovat a prˇes USB port nahra´t do prˇipojene´desticˇky. Nevy´hodou je absence debuggeru, cozˇje da´no tech- nicky´m rˇesˇenı´m – desticˇka neumı´vyuzˇı´vat podporu debuggingu na cˇipu a bylo by nutne´koupit drazˇsˇı´programa´tor a pouzˇı´vat vy´vojove´prostrˇedı´AVR Studio od firmy Atmel. To ovsˇem neumı´pracovat s knihovnami jazyku Wiring. Komunita tohoto projektu se pomeˇrneˇrychle rozru˚sta´a Arduino se sta´va´oblı´be- nou hracˇkou od kutilu˚teenagerske´ho veˇku azˇpo studenty umeˇlecky´ch oboru˚, kterˇı´ jej vyuzˇı´vajı´v instalacı´ch umeˇlecky´ch prˇedmeˇtu˚s elektronicky´mi prvky nebo jako rˇı´dı´cı´prvek robotu˚. Dı´ky tomu je na internetu dostupna´rˇada zajı´mavy´ch zapojenı´. Pro pra´ci s Arduinem stacˇı´mı´t za´klady elektroniky z hodin fyziky na strˇednı´sˇkole a velice snadno si zˇa´k naprogramuje blikacˇku, jednoduchy´prˇehra´vacˇzvuku˚, digita´lnı´ teplomeˇr cˇi beˇzˇı´cı´text na displeji. Prostrˇedı´ma´velky´potencia´l pro meziprˇedmeˇtovou vazbu informatiky s fyzikou. To je ale za´rovenˇi nevy´hoda. Sˇkola by musela kromeˇ Arduina porˇı´dit i elektronicke´soucˇa´stky jako LED diody, segmentove´zobrazovacˇe, motorky, senzory teploty apod. Zapojenı´obvodu a prˇı´padne´hleda´nı´hardwarove´ chyby pak mu˚zˇe by´t neu´meˇrneˇdelsˇı´k samotne´mu programova´nı´, proto je projekt vhodny´prˇedevsˇı´m jako atraktivnı´aplikace jazyka C/C++ pro strˇednı´odborne´sˇkoly technicke´ho smeˇru.

4.4 Baltı´k

Baltı´k je vy´ukove´graficke´prostrˇedı´prˇedevsˇı´m pro deˇti, nicme´neˇv pokrocˇilejsˇı´ch mo´dech zasahuje azˇdo veˇkove´u´rovneˇstrˇednı´ch sˇkol. Popisovat zde budu aktua´lnı´ (noveˇjsˇı´) verzi SGP Baltie 4 C#, ktera´umozˇnˇuje kromeˇ„graficke´ho“ programova´nı´ take´za´pis programu v textove´podobeˇjazyka C#. Aplikace ma´4 za´kladnı´mo´dy: 2D, 3D, Konzole a C#. 2D rezˇim zacˇı´na´kreslenı´m sce´ny, ktere´je urcˇene´pro deˇti od 4 let. Dalsˇı´trˇi volby rezˇimu 2D jsou totozˇne´i s rezˇimem 3D a lisˇı´se jen prostorovostı´ hernı´ho pla´nu. V tom smeˇru je v Baltı´kovi znatelna´inspirace robotem Karlem.

59 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´

Sˇestilety´m deˇtem ma´slouzˇit rezˇim interaktivnı´ho ovla´da´nı´Baltı´ka, ktery´umozˇ- nˇuje klika´nı´m na ikony prˇı´kazu˚k pohybu a „cˇarova´nı´“ prova´deˇt jednoduche´u´kony s postavicˇkou kouzelnı´ka. To je samo o sobeˇjisteˇza´bava, ktera´deˇti velmi rychle omrzı´. Proto pro 7lete´deˇti prˇicha´zı´programovacı´rezˇim s graficky´mi prˇı´kazy. Zde se jizˇz prˇı´kazu˚tvorˇı´ metody a vznikajı´programy, zatı´m sta´le s pohybem figurky kouzelnı´ka Baltı´ka (kterou lze i skry´t). Poslednı´volba je urcˇena deˇtem od 12 let a umozˇnˇuje programovat bez prˇı´tomnosti kouzelnı´ka Baltı´ka. Graficke´programova´nı´v programu Baltı´k ma´podle meˇjeden za´sadnı´nedosta- tek a sice ten, zˇe zˇa´dny´m zpu˚sobem nevyuzˇı´va´vy´hod graficke´ho prˇı´stupu, naopak by se dalo rˇı´ci, zˇe graficky´za´pis jen zdrzˇuje a nutı´pamatovat si vy´znam neprˇı´lisˇ intuitivnı´ch ikonek. Vsˇechny graficke´prvky, bez ohledu na to, zda se jedna´o funkce (terminologiı´autoru˚ metody), promeˇnne´, konstanty cˇi programove´konstrukce tvorˇı´ obde´lnı´kovy´obra´zek. Zˇ a´dny´m zpu˚sobem se tedy nebra´nı´syntakticky sˇpatne´kon- strukci a samotny´za´pis je v podstateˇjen nahrazenı´slov obra´zky v jinak textove´ podobeˇko´du. Zajı´mave´ je, zˇe i struktury jako podmı´nka nebo cyklus jsou tvorˇeny ikonou, ktera´ je na´sledova´na ikonami za´vorek. Zˇ a´k tedy nevidı´ na graficke´ reprezentaci ucelenost teˇla cyklu a nevidı´ani veˇtvenı´podmı´nky na dveˇcˇa´sti. Mı´sto toho mu˚zˇe te´meˇrˇlibovolneˇzarovna´vat ikony slozˇeny´ch za´vorek, ktere´majı´stejny´vy´znam jako slozˇene´za´vorky v beˇzˇny´ch jazycı´ch. Tı´m, zˇe je ale nutne´ikony prˇevzı´t z menu a umı´stit mysˇı´, da´pra´ci posbı´rat prˇı´slusˇne´ikony „mezera“ a „odrˇa´dkova´nı´“ a s jejich pomocı´za´pis prˇehledneˇstrukturovat. Je sˇkoda, zˇe ani datove´typy nejsou tvaroveˇodlisˇene´, jak by´va´u graficky´ch jazyku˚ zvykem, aby se znemozˇnilo umist’ovatdatove´typy do kontextu˚, ktere´jim neprˇı´slusˇı´. Baltı´k nijak nebra´nı´vlozˇenı´rˇeteˇzce do rozhodovacı´ho vy´razu podmı´nky. Rezˇim Konzole je urcˇen zˇa´ku˚m od 10 let k programova´nı´beˇzˇny´ch konzolovy´ch aplikacı´– jejich neatraktivnost jsem zmı´nil v teoreticke´cˇa´sti pra´ce. Poslednı´– C# rezˇim – umozˇnı´zˇa´ku˚m (doporucˇeno od 15 let) programovat ve zmı´neˇne´m jazyce prˇı´mo v textove´m rezˇimu. Prostrˇedı´sice disponuje i debuggerem, kompila´torem a doplnˇova´nı´m syntaxe, cozˇlze povazˇovat za za´kladnı´du˚lezˇite´vlastnosti vy´ukove´ho IDE, ale vzhledem k ceneˇlicence tohoto programu je ota´zka, jestli ma´smysl toto pro- strˇedı´kupovat ve sˇkole, ktera´nepouzˇı´va´jeho grafickou cˇa´st, kdyzˇexistujı´alternativy zdarma. Byt’ na u´zemı´ Cˇeske´ republiky i Slovenska probı´hajı´ souteˇzˇe v programova´nı´ v Baltı´kovi, existuje mnozˇstvı´materia´lu˚pro zˇa´ky i ucˇitele a prostrˇedı´obsahuje kom- pila´tor, takzˇe lze tvorˇit spustitelne´(exe) soubory pro MS Windows, domnı´va´m se, zˇe toto prostrˇednı´nenı´u´plneˇnejvhodneˇjsˇı´volbou. Za negativa lze oznacˇit platfor- movou za´vislost na MS Windows a prˇedevsˇı´m pak nekoncepcˇnı´vyuzˇitı´graficke´ho prˇı´stupu k programova´nı´, ktere´by meˇodradilo od pouzˇitı´nejen na strˇednı´sˇkole, ale prˇedevsˇı´m na sˇkola´ch za´kladnı´ch.

60 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´

4.5 Scratch

Vynikajı´cı´alternativou k Baltı´kovi je program Scratch (http://scratch.mit. edu). Jde opeˇt o prostrˇedı´s graficky´m programovacı´m jazykem, ovsˇem tentokra´t hlı´da´syntaxi ko´du pra´veˇpomocı´ru˚zny´ch graficky´ch u´tvaru˚, ktere´do sebe zapadajı´ pouze ve spra´vny´ch kontextech. Zˇ a´k se dı´ky tomu plynule ucˇı´vnı´mat syntaxi, anizˇ by ho to zdrzˇovalo v uvazˇova´nı´nad algoritmem. Uzˇpodle tvaru stavebnı´ch bloku˚ vnı´ma´, ktere´cˇa´sti lze jaky´m zpu˚sobem propojit. Narozdı´l od Baltı´ka jsou prˇı´kazy popsa´ny slovneˇ, ne obra´zky. Aplikace je kom- pletneˇlokalizovana´do cˇesˇtiny. Program urcˇuje cˇinnost objektu˚vlozˇeny´ch opeˇt do „hernı´ho pla´nu“, ko´d lze va´zat jednak na spusˇteˇnı´cele´ho pla´nu, da´le na kliknutı´ na neˇktery´ objekt, stisk neˇktere´ kla´vesy nebo prˇı´chozı´ zpra´vu, cozˇ uzˇ nava´dı´ na uda´lostmi rˇı´zeny´prˇı´stup v objektove´m paradigmatu. Vytvorˇene´sce´na´rˇe sice nelze zkompilovat do spustitelne´podoby, nicme´neˇje lze (kromeˇulozˇenı´ve vlastnı´m forma´tu) odeslat ke zverˇejneˇnı´na stra´nka´ch projektu. Tyto stra´nky slouzˇı´nejen jako prˇehled zajı´mavy´ch na´padu˚, ale take´jako diskusnı´ fo´rum a zdroj materia´lu˚pro zˇa´ky i ucˇitele. Omezujı´cı´je bohuzˇel nedostatek materia´lu˚ v cˇesˇtineˇ. Program je projektem media´lnı´laboratorˇe zna´me´americke´vysoke´sˇkoly MIT. Prˇesto lze v programu Scratch vytvorˇit i zajı´mave´hry, ktere´pobeˇzˇı´v prostrˇedı´ Java na libovolne´m syste´mu rovnou ze stra´nek projektu, zˇa´ci je mohou sdı´let prˇes socia´lnı´sı´teˇ, ihned se komukoliv pochlubit se svou pracı´, a prˇitom je cele´prostrˇedı´ zdarma. Toto prostrˇedı´povazˇuji za velmi vhodne´pro zˇa´ky nizˇsˇı´ho gymna´zia nebo za´kladnı´ch sˇkol.

4.6 Alice 3D

Dalsˇı´ vy´ukove´ prostrˇedı´, ve sta´vajı´cı´ verzi bohuzˇel pouze pro MS Windows, acˇkoliv podle informacı´z diskusnı´ch fo´r se na verzi pro MacOS i Linux pracuje, je z produkce dalsˇı´americke´univerzity: Carnegie Mellon University. Na webovy´ch stra´nka´ch http://alice.org je i seznam sˇkol, ktere´tento program pouzˇı´vajı´a mezi nimi je i Gymna´zium Rumburk a ZSˇ Londy´nska´v Praze. Acˇkoliv program u na´s nenı´zda´se prˇı´lisˇrozsˇı´rˇen, je take´zajı´mavou volbou. Je srovnatelny´ s programem Scratch. Narozdı´l od neˇj je aktua´lnı´ Alice 3 Beta pouze anglicky, sce´na je trojrozmeˇrna´a na ni se vkla´dajı´jednotlive´objekty, jejichzˇ metody lze na´sledneˇ volat. Paleta objektu˚ je pomeˇrneˇ velka´, postavy se generujı´ v jednoduche´m na´vrha´rˇi podle pozˇadavku˚. Kazˇde´mu objektu lze vytva´rˇet nove´ metody i atributy, cely´na´vrh je tedy objektovy´. Prostrˇedı´opeˇt sa´zı´na kombinaci textu ko´du v ru˚zny´ch ra´mecˇcı´ch, ktere´je mozˇne´ umı´stit jen do urcˇity´ch kontextu˚a tı´m zamezit syntakticky´m chyba´m. Pro zajı´mavost zmı´nı´m, zˇe kromeˇcyklu˚a podmı´nek je mozˇne´vytva´rˇet bloky urcˇujı´cı´paralelnı´nebo sekvencˇnı´vykona´va´nı´obsazˇeny´ch prˇı´kazu˚. Projekty lze kromeˇvlastnı´ho forma´tu ukla´dat i jako videa, jelikozˇse programova´- nı´m vlastneˇrˇı´dı´3D animace. Tato videa jsou ulozˇitelna´bud’ ve forma´tu MOD nebo

61 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´ prˇı´mo na Youtube. Za velkou prˇeka´zˇku povazˇuji to, zˇe program je pouze v anglicˇtineˇ. Prˇesto lze doufat, zˇe vy´voj bude i nada´le pokracˇovat a zvolena´metodika mu˚zˇe by´t atraktivnı´a prˇı´nosna´z hlediska pochopenı´objektove´ho prˇı´stupu i pro strˇedosˇkola´ky, nejspı´sˇovsˇem v nizˇsˇı´ch rocˇnı´cı´ch.

4.7 BlueJ

Velmi rozsˇı´rˇene´vy´ukove´prostrˇedı´pro jazyk Java s integrovany´m zjednodusˇe- ny´m UML diagramem trˇı´d se jmenuje BlueJ. Studenti v neˇm majı´okamzˇitou vazbu mezi UML na´vrhem a ko´dem. Bohuzˇel diagram je vy´znamneˇzjednodusˇeny´, naprˇı´- klad kompletneˇchybı´cˇa´sti zobrazujı´cı´atributy a metody. Prostrˇedı´podporuje automaticke´doplnˇova´nı´ko´du, integruje v sobeˇdokumentaci v podobeˇJavaDoc do te´mı´ry, zˇe ji zobrazuje prˇi automaticke´m doplnˇova´nı´ko´du a kazˇdy´soubor zdrojove´ho ko´du umozˇnˇuje zobrazit jak v rezˇimu ko´du, tak v rezˇimu dokumentace. V prostrˇedı´je i integrovana´podpora tzv. unit testu˚, ktere´lze nejen psa´t, ale i nahra´vat podobneˇjako makra. Tato vlastnost je velice uzˇitecˇna´pro test driven development. Vy´hodou je mozˇnost okamzˇiteˇko´d kompilovat, testovat a vytva´rˇet instance trˇı´d, pousˇteˇt jejich metody a kontrolovat na´vratove´ hodnoty. Toto prostrˇedı´ je idea´lnı´ volbou pro zacˇa´tecˇnı´ky v Javeˇ, nejle´pe ale jizˇzˇa´ky vysˇsˇı´ch rocˇnı´ku˚strˇednı´sˇkoly. Pro- strˇedı´je zdarma dostupne´ze stra´nek http://bluej.org, je vyvı´jene´University of Kent a podporovane´firmou Oracle a je multiplatformnı´.

4.8 Greenfoot

Pro mladsˇı´zˇa´ky strˇednı´ch sˇkol nebo lepsˇı´motivaci a snazsˇı´pochopenı´ze strany u´plny´ch zacˇa´tecˇnı´ku˚v jazyce Java je vy´ukove´prostrˇedı´Greenfoot idea´lnı´volbou. Toto prostrˇedı´je podobne´IDE BlueJ, ale navı´c obsahuje hernı´plochu, abstraktnı´trˇı´du World a Actor a neˇktere´dalsˇı´trˇı´dy (Greenfoot, GreenfootImage, GreenfootSound a MouseInfo), ktere´tvorˇı´za´kladnı´hernı´framework. Zˇ a´ci programujı´sve´aplikace v Javeˇtak, zˇe deˇdı´od trˇı´dy World potomka, ktery´ bude reprezentovat jejich podobu hernı´ho pla´nu (rozmeˇr pla´nu, velikost polı´cˇka, obra´zek atd.). Da´le mohou deˇdit po abstraktnı´trˇı´deˇActor, ktera´je prˇedkem objektu˚ umist’ovany´ch do hernı´ho pla´nu. Tyto objekty musı´implementovat abstraktnı´me- todu act(), ktera´se nad kazˇdou instancı´v hernı´m pla´nu vykona´va´v pravidelne´m cyklu. Cely´framework je prˇichysta´n tak, zˇe lze opravdu velmi rychle vytvorˇit pouzˇi- telnou aplikaci s graficky´m rozhranı´m. Dı´ky tomu je vy´uka pro studenty vy´razneˇ atraktivneˇjsˇı´a prˇı´ma´. Jednotlive´koncepty objektove´ho prˇı´stupu lze demonstrovat na prakticke´uka´zce, anizˇby to vyzˇadovalo velke´vstupnı´znalosti, funguje automaticke´ doplnˇova´nı´ko´du i rezˇim dokumentace JavaDoc. Pomocne´trˇı´dy odstinˇujı´neˇktere´

62 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´ slozˇiteˇjsˇı´koncepty (ovla´da´nı´kla´vesnice a mysˇi, obra´zky) pomocı´jednoduchy´ch me- tod. Toto prostrˇedı´ programujı´ autorˇi prostrˇedı´ BlueJ. Je take´ zdarma a multiplat- formnı´, dostupne´ ze stra´nek http://greenfoot.org. Podobneˇ jako Scratch umozˇnˇuje vy´sledny´projekt nahra´t na server. Na stra´nka´ch Greenfootu je (prˇestozˇe jde o pomeˇrneˇnovy´projekt) velke´mnozˇstvı´zpracovany´ch u´loh, z nichzˇneˇktere´ poskytujı´autorˇi vcˇetneˇzdrojove´ho ko´du. Komunita je zde velmi silna´a lze ocˇeka´vat jesˇteˇveˇtsˇı´rozvoj. Pro pocˇa´tecˇnı´vy´uku objektove´ho programova´nı´v Javeˇlze Gre- enfoot jednoznacˇneˇdoporucˇit, bylo by ale vhodne´pozdeˇji prˇejı´t na BlueJ nebo jina´ prostrˇedı´, ktera´nejsou cı´leneˇurcˇena´pro tvorbu jednoduchy´ch her, prˇedevsˇı´m proto, aby zˇa´ci nezı´skali dojem, zˇe beˇzˇne´programy beˇzˇı´cyklicky´m vola´nı´m jedne´metody v trˇı´deˇ.

4.9 Dev-C++

Oblı´bene´vy´vojove´prostrˇedı´pro MS Windows a jazyky C a C++. Jizˇdelsˇı´dobu nenı´vyvı´jeno, prˇesto je sta´le vcelku dobrou volbou. Ma´integrovany´kompila´tor, debugger, automaticke´ doplnˇova´nı´ ko´du. Uzˇitecˇna´ je i mozˇnost stahovat balı´cˇky s knihovnami ze stra´nek http://devpaks.org, takzˇe je instalace novy´ch knihoven (naprˇı´klad pro graficke´projekty nebo multimedia) velice jednoducha´. Prostrˇedı´je k dispozici zdarma, vhodne´prˇedevsˇı´m pro zacˇı´najı´cı´starsˇı´studenty strˇednı´ch sˇkol.

4.10 MS Visual Studio Express

Firma Microsoft nabı´zı´kromeˇkomercˇnı´verze zna´me´ho MS Visual Studia i jeho odlehcˇenou verzi zdarma v sadeˇExpress. Ta obsahuje IDE pro jazyky Visual Basic, C++ a C#. Placene´verze Visual Studia jsou v praxi jednı´m z nejrozsˇı´rˇeneˇjsˇı´ch IDE s velmi sˇirokou sˇka´lou funkcı´, jeho odlehcˇena´verze Express ma´vsˇak mozˇnosti velmi omezene´(komentuji verzi 2010). Omezenı´kompila´toru pouze na 32bitove´aplikace prˇi vy´uce nejspı´sˇnepozna´me, podobneˇodstraneˇnı´funkcı´vzda´lene´ho debuggingu nebo na´vrha´rˇtrˇı´d nebudou prˇı´lisˇchybeˇt. Neprˇı´jemna´je vsˇak podpora doplnˇova´nı´ko´du pouze pro konzolove´aplikace ve Win32 rezˇimu. To znamena´, zˇe v zˇa´dne´m projektu s okny nefunguje doplnˇova´nı´ ko´du, cozˇbude programova´nı´aplikacı´v GUI znacˇneˇzpomalovat. Take´chybı´editor zdroju˚(soubory s koncovkou .rc). Prˇesto naprˇı´klad graficky´na´vrha´rˇGUI je prˇı´tomny´, debugger ma´pro vy´uku postacˇujı´cı´funkce. Starsˇı´m studentu˚m lze toto prostrˇedı´ doporucˇit.

63 4. VY´ VOJOVA´ A VY´ UKOVA´ PROSTRˇ EDI´

4.11 Netbeans

Netbeans je IDE zna´me´prˇedevsˇı´m jako v praxi beˇzˇneˇpouzˇı´vana´volba progra- ma´toru˚v Javeˇ. Pomocı´pluginu˚vsˇak podporuje i C/C++, PHP a dalsˇı´jazyky, pouzˇı´va´ se i pro webove´technologie (JSP stra´nky, Java Struts apod.). Samotne´prostrˇedı´je napsane´v Javeˇ, takzˇe je multiplatformnı´a sˇı´rˇene´je zdarma. Nabı´zı´opravdu komplexnı´funkcionalitu, od beˇzˇny´ch vlastnostı´jako je doplnˇo- va´nı´ko´du nebo debugger, azˇke graficke´mu na´vrhu okennı´ch aplikacı´, spra´veˇverzı´ na vzda´lene´m serveru, podporˇe databa´zı´, profiler, podporu ty´move´pra´ce. Pro zacˇa´tecˇnı´ky je IDE Netbeans prˇı´lisˇ slozˇite´ a cˇasto se ztra´cejı´ v rozsa´hle´m menu. Je vhodne´, aby zacˇali s jednodusˇsˇı´m prostrˇedı´m a k Netbeans se propracovali. Budeme-li ucˇit programova´nı´v Javeˇ, je idea´lnı´zacˇı´t prostrˇedı´m Greenfoot, podle schopnostı´a veˇku zˇa´ku˚prˇejı´t na BlueJ a s pokrocˇily´mi studenty a maturanty prˇejı´t u veˇtsˇı´ch projektu˚na Netbeans.

64 Kapitola 5 Prˇı´pravypro semina´rˇprogramova´nı´

V te´to kapitole uvedene´prˇı´pravy jsou urcˇeny pro vy´uku semina´rˇe z programo- va´nı´na gymna´ziu, ale jisteˇmohou poslouzˇit prˇinejmensˇı´m jako inspirace i pro vy´uku na jiny´ch typech sˇkol. Prˇedpokla´da´m semina´rˇurcˇeny´pro vysˇsˇı´stupenˇgymna´zia, idea´lneˇprˇiblizˇneˇprvnı´nebo druhy´rocˇnı´k cˇtyrˇlete´ho studia. Semina´rˇma´dotaci 2 ho- diny ty´dneˇ, proto budou prˇı´pravy rozdeˇleny do „lekcı´“ v de´lce jeden a pu˚l hodiny. Z osobnı´ zkusˇenosti bych ale doporucˇoval semina´rˇ zarˇazovat po skoncˇenı´ rˇa´dne´ vy´uky, protozˇe prˇi individua´lnı´m prˇı´stupu je zcela beˇzˇne´po skoncˇenı´vy´uky jesˇteˇ konzultovat nedorˇesˇene´proble´my. Prˇi te´to dotaci vycha´zı´podle sta´vajı´cı´legislativy na sˇkolnı´rok maxima´lneˇ40 lekcı´, rea´lneˇlze (vzhledem ke sva´tku˚m, vy´letu˚m, ma- turita´m a podobny´m akcı´m) ocˇeka´vat prˇiblizˇneˇ35 lekcı´. Za´kladnı´la´tka je probra´na beˇhem u´vodnı´ch necely´ch 15 lekcı´, zbyle´lekce jsou urcˇeny pro pra´ci na projektech a procvicˇova´nı´. Teorie by tedy meˇla by´t probra´na prˇed koncem prvnı´ho pololetı´, cozˇ sice omezuje prostor pro procvicˇova´nı´ a klade velke´ na´roky na soustrˇedeˇnı´ studentu˚, v praxi se mi ale takovy´prˇı´stup osveˇdcˇil prˇi vy´uce jazyka C. Studenti v te- oreticky´ch hodina´ch zı´skajı´spı´sˇe obecny´prˇehled a detaily si oveˇrˇı´azˇna projektech, kde le´pe vyniknou prakticke´proble´my, ktere´na sˇkolsky´ch vzorovy´ch prˇı´kladech snadno zaniknou. Za´rovenˇdocha´zı´k neusta´le´mu opakova´nı´v pru˚beˇhu zpracova´nı´ jednotlivy´ch projektu˚, cozˇpodporuje lepsˇı´zapamatova´nı´. La´tka semina´rˇe je rˇazena prˇı´stupem OOM-first, resp. OOP-first, pouze prvnı´dveˇ lekce budou veˇnova´ny algoritmizaci v jazyce Karel (cozˇvede na strukturovane´para- digma), jelikozˇalgoritmizace by meˇla by´t zarˇazena podle ra´mcove´ho vzdeˇla´vacı´ho programu beˇhem rˇa´dne´vy´uky, cozˇse ale v praxi veˇtsˇinou nedeˇje. Znalost vy´vo- jovy´ch diagramu˚nebo diagramu˚Nassi-Shneidermann povazˇuji za nezbytnou pro snadne´a korektnı´uvazˇova´nı´o metoda´ch objektu˚. Bylo by tedy mozˇne´tuto kapitolu zarˇadit azˇprˇed vy´uku metod. Nicme´neˇse domnı´va´m, zˇe jazyk Karel svou triviali- tou prˇi rozsahu dvou lekcı´nijak za´sadneˇneovlivnı´objektove´uvazˇova´nı´studentu˚ smeˇrem ke strukturovane´mu, bude vhodnou u´vodnı´motivacı´a za´rovenˇumozˇnı´ vyucˇujı´cı´mu udeˇlat si velmi rychle prˇiblizˇnou prˇedstavu o studentech z hlediska al- goritmicke´ho a abstraktnı´ho uvazˇova´nı´, systematicˇnosti pra´ce a osobnı´ch ocˇeka´va´nı´ od vy´uky programova´nı´. Vy´vojove´diagramy rˇesˇenı´i ko´d pro nahra´nı´do prostrˇedı´ http://karel.oldium.net je na prˇilozˇene´m CD, stejneˇjako neˇktere´rozpraco- vane´prˇı´klady pro Greenfoot. Semina´rˇje vzhledem k objektove´mu paradigmatu prˇipraven v jazyce Java. Tuto volbu ovlivnila (ze vsˇech hodnoceny´ch parametru˚jazyku˚) prˇedevsˇı´m sˇı´rˇe dostup-

65 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ ny´ch vy´ukovy´ch prostrˇedı´a materia´lu˚, da´le multiplatformnost a kvalita dokumen- tace a knihoven. Lze ovsˇem doporucˇit – v prˇı´padeˇdostatku cˇasu ke konci roku – zarˇazenı´lekcı´v jiny´ch jazycı´ch (naprˇ. Python), ktere´by studentu˚m prˇiblı´zˇily za´- kladnı´rozdı´ly a ve ktery´ch by si vyzkousˇeli u´pravu ko´du v jine´m jazyce, aby nebyli striktneˇ va´za´ni na jeden jazyk, ale byli schopni volit jazyk podle potrˇeby (cozˇ je du˚lezˇita´vlastnost programa´tora). V pru˚beˇhu semina´rˇe jsou voleny ru˚zne´metodiky vy´voje i vy´uky, nejvı´ce se vy- uzˇı´va´problem based learning a agilnı´metodiky. Minima´lneˇv u´vodnı´ch hodina´ch je potrˇeba kla´st velky´du˚raz na u´vodnı´fa´zi analy´zy (kreslenı´diagramu˚apod.), aby si studenti nenavykli pracovat metodou pokus-omyl, ale systematicky prˇemy´sˇlet a prˇedvı´dat chova´nı´pocˇı´tacˇe. Proto je nezbytne´, aby si sesˇit nevedli v elektronicke´, ale v papı´rove´podobeˇ. Vzhledem k rozsahu diplomove´pra´ce nenı´mozˇne´vsˇechny lekce rozebrat zcela do detailu˚, proto jsem zvolil vy´beˇr u´vodnı´ch lekcı´ doplneˇny´ o na´vrhy mozˇny´ch te´mat projektu˚a pozna´mky k jejich rˇesˇenı´. Porˇadı´i na´plnˇlekcı´jsou pouze doporucˇe- nı´m. Prˇedpokla´da´m, zˇe kazˇdy´pedagog uzpu˚sobı´vy´uku potrˇeba´m svy´ch studentu˚a v prˇı´padeˇveˇtsˇı´ch proble´mu˚s porozumeˇnı´m prˇi rychle´m tempu vy´kladu adekva´tneˇ zpomalı´cˇi prˇida´uka´zkove´u´koly. Lekce neobsahujı´zˇa´dne´formy zkousˇenı´znalostı´studentu˚. U volitelny´ch semi- na´rˇu˚uprˇednostnˇuji aktivnı´kontrolu odvedene´pra´ce v hodineˇnebo odevzda´va´nı´ rˇesˇenı´u´kolu˚ze samostatne´i skupinove´pra´ce. Mu˚zˇe by´t zˇa´doucı´na zacˇa´tku kazˇde´ lekce zarˇadit kra´tky´ test fakticky´ch znalostı´ nebo opravenı´ cˇi doplneˇnı´ kra´tke´ho snippetu, cˇı´mzˇse vy´uka prˇı´lisˇnezdrzˇı´a za´rovenˇstudenti i ucˇitel zı´skajı´zpeˇtnou vazbu.

1. lekce – Terminologie a algoritmizace

Te´ma: Za´kladnı´terminologie a u´vod do algoritmizace. Cı´l: Naucˇit studenty nezbytnou terminologii a jejı´aplikaci na jednoduchy´ch algoritmizacˇnı´ch u´loha´ch. Sezna´menı´s vy´- vojovy´mi diagramy a jazykem Karel. Technologie: Interpret jazyka Karel (http://karel.oldium.net/), prˇı´padneˇna´stroj pro kreslenı´diagramu˚. Metodika: individua´lnı´ a kolektivnı´ pra´ce, programova´nı´ na papı´r, programming from scratch Pozna´mky: Tuto lekci je mozˇne´ucˇit za peˇkne´ho pocˇası´venku bez pocˇı´- tacˇe nebo s notebookem.

Po u´vodnı´ch organizacˇnı´ch instrukcı´ch (kla´st du˚raz na za´pisky v papı´rove´formeˇ, nejle´pe cˇtverecˇkovany´forma´t A4) na´sleduje sezna´menı´s terminologiı´. Na strˇedosˇkol- ske´u´rovni jsou vhodneˇjsˇı´pseudo-forma´lnı´definice vedoucı´k lepsˇı´mu porozumeˇnı´,

66 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ ale je nutne´, aby byly korektnı´. Probereme na´sledujı´cı´termı´ny (je mozˇne´, aby si je studenti psali z druhe´strany sesˇitu, jelikozˇbudou prˇiby´vat dalsˇı´):

• programova´nı´– tvorba programu od na´vrhu prˇes testova´nı´azˇpo odstraneˇnı´ chyb a uvolneˇnı´k pouzˇı´va´nı´ (zdu˚raznit vy´znam jednotlivy´ch fa´zı´)

• program – ko´d v pocˇı´tacˇi vykona´vajı´cı´urcˇitou specifickou (programa´torem naprogramovanou) cˇinnost; forma´lneˇji: v programovacı´m jazyce zapsany´(im- plementovany´) algoritmus

• programovacı´jazyk – jazyk (soubor slov s dany´m vy´znamem (se´mantika) a pravidly, jak je zapisovat (syntax)), pomocı´ktere´ho lze prˇesneˇa jednoznacˇneˇ zapsat program

– prˇekla´dany´ jazyk – zapsany´ text je nutne´ prˇelozˇit specia´lnı´m progra- mem – prˇekladacˇem – do tzv. spustitelne´(bina´rnı´) podoby, kterou lze na pocˇı´tacˇi spousˇteˇt – interpretovany´jazyk – zapsany´text (zde skript) se prˇeda´k vykona´nı´ specia´lnı´mu programu – interpretu, ktery´jej postupneˇcˇte a vykona´va´ (bez interpretu nelze skript prova´deˇt, tj. spousˇteˇt)

• algoritmus – prˇesny´postup rˇesˇenı´proble´mu/u´kolu

Termı´ny je vhodne´projı´t opakovaneˇ, jednak kvu˚li pochopenı´a zapamatova´nı´, ale prˇedevsˇı´m proto, aby se uka´zala jejich vza´jemna´souvislost. Na´sleduje teoreticky´ prˇı´klad.

Prˇı´klad1: varˇenı´cˇaje

(forma samostatne´pra´ce a ucˇitelem moderovane´diskuse) Necha´me studenty kratsˇı´dobu (5 minut) vymyslet a zapsat postup neboli al- goritmus varˇenı´cˇaje. Uzˇv pru˚beˇhu pra´ce by bystrˇejsˇı´studenti meˇli upozornit, zˇe nevı´jake´dovednosti (prˇı´kazy) mohou prˇedpokla´dat, zˇe cˇloveˇk umı´. Meˇli bychom naprˇ. specifikovat, zˇe cˇloveˇk jesˇteˇneumı´cˇaj uvarˇit a nelze mu tedy jako „algorit- mus“ prˇedlozˇit jediny´prˇı´kaz Uvarˇcˇaj. Diskutujeme ru˚zne´mozˇne´postupy varˇenı´ vody (ve varne´konvici, na spora´ku, na ohni): studenti si zapı´sˇı´pojem dekompozice1 – rozcˇleneˇnı´u´kolu na mensˇı´, dı´lcˇı´celky, ktere´vyrˇesˇı´me zvla´sˇt’a jsou snazsˇı´na rˇesˇenı´. Navrzˇene´postupy studentu˚zhodnotı´me a na´sledneˇzakreslı´me pomocı´vy´vojove´ho nebo N-S diagramu. Diagram studentu˚m prˇedstavı´me jako grafickou reprezentaci algoritmu, kterou lze na´sledneˇprˇepsat do neˇktere´ho programovacı´ho jazyka. Vsˇechny prvky diagramu

1. v ra´mci vsˇeobecne´ho rozvoje studentu˚a meziprˇedmeˇtovy´ch vazeb mu˚zˇeme zmı´nit latinsky´pu˚vod slova: prˇedpona de- = od; prˇedpona con- = dohromady, s; sloveso pono, ponere, posui, positum = pokla´dat

67 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ zatı´m pouzˇı´va´me intuitivneˇ, ale jejich vy´znam a zpu˚sob zakreslenı´du˚sledneˇkomen- tujeme. Obzvla´sˇt’du˚lezˇite´je na´zorneˇvysveˇtlit (prˇedve´st) jak se algoritmus krok za krokem (sekvencˇneˇ) vykona´va´a zdu˚raznit na prˇı´kladech rozdı´l mezi podmı´nkou a cyklem, jakmile se v diagramech objevı´, aby mezi nimi studenti rozlisˇovali od prvo- pocˇa´tku (zacˇa´tecˇnı´ci cˇasto nahrazujı´cyklus podmı´nkou nebo si neuveˇdomujı´riziko zacyklenı´). Nynı´na zakreslene´m algoritmu oveˇrˇı´me vlastnosti, ktere´by meˇl algoritmus spl- nˇovat. Seznam vlastnostı´algoritmu˚se v ru˚zne´literaturˇe lisˇı´, ale obecneˇby nemeˇly by´t opomenuty tyto:

1. konecˇnost (finitivnost) – algoritmus po konecˇne´m pocˇtu kroku˚vzˇdy urcˇiteˇ skoncˇı´(naprˇ. nedojde k uvı´znutı´v cyklu, tedy zacyklenı´)

2. obecnost (hromadnost, univerzalita) – algoritmus je mozˇne´aplikovat na libo- volne´vstupnı´hodnoty z mnozˇiny povoleny´ch vstupnı´ch hodnot2

3. determinovanost – pro stejne´vstupnı´podmı´nky vracı´algoritmus vzˇdy stejny´ (prˇedem dany´) vy´sledek (s pokrocˇily´mi studenty s programa´torskou praxı´lze zrovna diskutovat proble´m generova´nı´na´hodny´ch, resp. pseudona´hodny´ch cˇı´sel a zmı´nit, zˇe „na´hodna´ cˇı´sla“ jsou vzˇdy zcela deterministicky volena z cˇı´selne´rˇady a je-li genera´tor na´hodny´ch cˇı´sel inicializova´n stejnou hodnotou, dosta´va´me stejnou posloupnost cˇı´sel)

4. rezultativnost – vede k neˇjake´mu vy´sledku (ve vztahu ke vstupu) – studentu˚m lze prˇiblı´zˇit spı´sˇe jako „neˇco deˇla´, neˇco zmeˇnı´“ nezˇzˇe nutneˇmusı´pocˇı´tat

5. korektnost – vy´sledek cˇi provedena´cˇinnost musı´odpovı´dat vstupnı´m hod- nota´m a u´kolu, ktery´ma´algoritmus rˇesˇit

6. efektivnost – algoritmus by meˇl k vy´sledku dojı´t efektivnı´m zpu˚sobem (prˇi- meˇrˇeneˇrychle a s prˇimeˇrˇeny´mi na´roky na pameˇt’apod.)

V za´vislosti na pokrocˇilosti a pochopenı´la´tky studenty, mu˚zˇeme zarˇadit dalsˇı´ podobna´cvicˇenı´: algoritmus cˇinnosti automatu na jı´zdenky, algoritmus doda´nı´do- porucˇene´ho dopisu apod. Lepsˇı´ ale bude od abstraktnı´ch popisu˚ prˇejı´t ihned ke konkre´tnı´mu, byt’trivia´lnı´mu, jazyku Karel s u´vodnı´mi u´lohami, ktere´nebude teˇzˇke´ ani zakreslit ani prˇepsat. Vsˇechny u´lohy rˇesˇı´studenti nejprve bez pocˇı´tacˇe formou diagramu, teprve po zkontrolova´nı´prˇepı´sˇı´do pocˇı´tacˇe nebo prˇi vy´uce venku mohou rucˇneˇkrokovat na papı´rove´m hernı´m pla´nu s figurkou (to lze doporucˇit i v ucˇebneˇ s pocˇı´tacˇi). Prˇi tom neopomeneme zdu˚raznit, zˇe jazyk Karel je interpretovany´ a jeho interpretem je v nasˇem prˇı´padeˇzmı´neˇna´webova´stra´nka (resp. aplikace v Ja- vaScriptu).

2. Tento doveˇtek je nutny´: je v porˇa´dku, pokud algoritmus pro scˇı´ta´nı´nefunguje korektneˇpro za´porna´ cˇı´sla, jsou-li mnozˇinou povoleny´ch vstupu˚ prˇirozena´ cˇı´sla. Nenı´ to v porˇa´dku, jsou-li povoleny´m vstupem cˇı´sla z mnozˇiny cely´ch cˇı´sel.

68 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

U´ koly jsou serˇazeny podle obtı´zˇnosti, s na´vaznostı´na vyuzˇitı´jizˇnaprogramo- vany´ch funkcı´. Vyuzˇı´va´ se interpret na stra´nka´ch http://karel.oldium.net vcˇetneˇjeho syntaxe a nabı´dky prˇı´kazu˚(nedoporucˇuji interprety, ktere´majı´veˇtsˇı´po- cˇa´tecˇnı´slovnı´k). V prˇı´padeˇpotrˇeby lze dalsˇı´u´koly cˇerpat naprˇ. z [5]. Tyto u´koly necht’ rˇesˇı´studenti samostatneˇs na´slednou diskusı´(vcˇetneˇoveˇrˇenı´vlastnostı´algoritmu) v prˇı´padeˇpotrˇeby. (Rˇ esˇenı´jsou prˇilozˇena na CD.)

Prˇı´kladA1 – Otocˇenı´vpravo; prˇı´kaz VPRAVO

U´ vodnı´ trivia´lnı´ prˇı´klad. Rˇ esˇenı´ spocˇı´va´ ve trˇech po sobeˇ jdoucı´ch otocˇenı´ch vlevo. Mu˚zˇeme vyuzˇı´t i prˇı´kazy RYCHLE a POMALU, ktery´mi zajistı´me provedenı´ otocˇek, anizˇby byly prˇi vykona´va´nı´prˇı´kazu videˇt. Jako mı´rne´vylepsˇenı´opravı´me funkci pouzˇitı´m prˇı´kazu cyklu OPAKUJ 3-kra´t.

Prˇı´kladA2 – Otocˇenı´vzad; prˇı´kaz VZAD

Smyslem prˇı´kladu je diskuse nad mozˇnostı´implementovat otocˇenı´vzad jako dveˇ otocˇky vlevo nebo vpravo. Obeˇimplementace akceptujeme, ale zdu˚raznı´me, zˇe dveˇ otocˇky vpravo jsou vy´razneˇme´neˇefektivnı´, byt’spra´vne´. Zmı´nı´me pojmy profiler3 a refaktoring4. Pouzˇitı´cyklu OPAKUJ 2-kra´t komentujeme jako zbytecˇne´.

Prˇı´kladA3 – Dojdi ke zdi; prˇı´kaz KE ZDI

Prˇı´klad na sezna´menı´s cyklem s podmı´nkou, prˇı´kaz DOKUD. Lze ocˇeka´vat, zˇe mnozı´studenti pouzˇijı´cyklus OPAKUJ 9-kra´t nebo deveˇt po sobeˇjdoucı´ch prˇı´kazu˚ KROK. To jsou ale sˇpatna´rˇesˇenı´, jelikozˇnesplnˇujı´podmı´nku obecnosti – prˇi umı´steˇnı´ robota tak, zˇe prˇed sebou nema´pra´veˇ9 volny´ch polı´, nebudou fungovat.

Prˇı´kladA4 – Otocˇse nahoru (na sever); prˇı´kaz NAHORU

Opeˇt prˇı´klad na cyklus s podmı´nkou. Pouzˇitı´cyklu DOKUD NENI´ SEVER stu- dentu˚m neprozrazujeme, necha´me je pracovat s na´poveˇdou interpretu.

Prˇı´kladA5 – Opevni se; prˇı´kaz OPEVNI SE

U´ kolem je, aby robot vyskla´dal na polı´cˇka sousedı´cı´(i diagona´lneˇ) s jeho pozicı´ znacˇky (8 na kazˇde´pole) a pak se vra´til do pu˚vodnı´pozice. Povolene´vstupnı´hodnoty jsou: robot stojı´libovolneˇotocˇeny´na libovolne´m polı´cˇku, ktere´je v kazˇde´m smeˇru vzda´leno ode zdi alesponˇjedno pole.

3. profiler – program urcˇeny´k meˇrˇenı´rychlosti vykona´va´nı´cˇa´stı´ko´du 4. refaktoring – (lat. prˇedpona re- = znovu; sloveso facio, facere, feci, factum = deˇlat, konat, tvorˇit) opeˇtovne´prˇeprogramova´nı´u´seku ko´du tak, aby le´pe nebo rychleji fungoval (optimalizace) a/nebo aby byl le´pe cˇitelny´

69 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

Nejprve akceptujeme rˇesˇenı´tvorˇene´pouze jednou novou funkcı´, pote´navrhneme dekompozici s pouzˇitı´m funkcı´ POLOZˇ8ZNACˇEK, ktera´zaskla´da´cele´polı´cˇko 8 znacˇ- kami), a VAL3POLE, ktera´bude tvorˇit trˇı´polı´cˇkovy´„val“ ze znacˇek. Diskutujeme, zda druha´funkce nenı´zbytecˇna´prˇi dane´u´rovni slozˇitosti ko´du.

Prˇı´kazy z te´to lekce by si studenti meˇli ulozˇit, protozˇe na neˇbudou v prˇı´sˇtı´lekci navazovat.

2. lekce – Algoritmizace

Te´ma: Prˇı´klady z algoritmizace v jazyce Karel, za´pis algoritmu vy´vojovy´m nebo N-S diagramem. Cı´l: Procvicˇenı´slozˇiteˇjsˇı´ch algoritmizacˇnı´ch u´kolu˚; cykly, pod- mı´nky, dekompozice. Technologie: Interpret jazyka Karel (http://karel.oldium.net/), prˇı´padneˇna´stroj pro kreslenı´diagramu˚. Metodika: individua´lnı´ a kolektivnı´ pra´ce, programova´nı´ na papı´r, programming from scratch Pozna´mky: Tuto lekci je mozˇne´ucˇit za peˇkne´ho pocˇası´venku bez pocˇı´- tacˇe nebo s notebookem.

V te´to lekci pokracˇujeme individua´lnı´m programova´nı´m, nejprve diagramy na papı´r, na´sledneˇprˇepsa´nı´do jazyka Karel. U slozˇiteˇjsˇı´ch u´loh mu˚zˇeme vyuzˇı´t i pa´rove´ nebo skupinove´programova´nı´, nicme´neˇvzhledem k tomu, zˇe jde o u´vodnı´te´ma, bude lepsˇı´, aby studenti zatı´m procvicˇovali individua´lneˇ. V prˇı´padeˇobtı´zˇı´nejprve radı´me jen obecny´postup (naprˇ. „hodilo by se pouzˇı´t neˇjaky´cyklus“ nebo „bude vhodne´pracovat po rˇa´dcı´ch“), je-li ve studentoveˇalgoritmu chyba, necha´me ho jej krokovat, aby chybu sa´m odhalil. Je velmi vhodne´zkusit neˇktere´prˇı´klady spolecˇneˇna papı´rove´m modelu nebo prˇi dostatku prostoru nazˇivo se studentem, ktery´bude prˇedstavovat robota. Zada´nı´mu˚- zˇeme prˇipravit pro kazˇde´ho studenta na papı´r, abychom se nezdrzˇovali zada´va´nı´m a meˇli vı´ce cˇasu na kontrolu. U prˇı´kladu A9 doporucˇuji udeˇlat pauzu v individua´l- nı´m rˇesˇenı´a prvnı´verzi vyrˇesˇit kolektivneˇ. Je-li neˇkdo ze studentu˚vy´razneˇnaprˇed oproti ostatnı´m, pomu˚zˇe vyucˇujı´cı´mu s kontrolou ostatnı´ch. Nesmı´vsˇak prozrazovat rˇesˇenı´, pouze upozornit na chybu, vysveˇtlit jejı´prˇı´cˇinu a zkontrolovat opravu.

Prˇı´kladA6 – Jdi do rohu; prˇı´kaz VLEVO DOLU˚

U´ kol slouzˇı´k zopakova´nı´cyklu˚a dekompozice. Student ma´zajistit, aby se robot prˇesunul do leve´ho dolnı´ho rohu zcela bez ohledu na pu˚vodnı´pozici. Prˇedpokla´da´ se, zˇe v hernı´m pla´nu nejsou rozmı´steˇne´zdi.

70 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

Rˇ esˇenı´v jedne´funkci s neˇkolika cykly je sice akceptovatelne´, ale studenty nave- deme k vyuzˇitı´jizˇdrˇı´ve prˇipravene´ho ko´du (zmı´nı´me znovupouzˇitelnost ko´du, jeden ze za´kladnı´ch principu˚objektove´ho programova´nı´a spra´vny´ch programa´torsky´ch zvyklostı´ neprogramovat neusta´le dokola tote´zˇ, ale vyuzˇı´vat jizˇ hotove´ stavebnı´ prvky). Hodit se budou prˇı´kazy KE ZDI a NAHORU nebo z hlediska efektivity jeho u´prava DOLU˚.

Prˇı´kladA7 – Tanec; prˇı´kaz TANEC

Necha´me robota tancˇit, tedy pohybovat se cyklicky s urcˇity´m vzorcem. Tanec bude trˇı´doby´a bude sesta´vat ze za´kladnı´ho kroku a otocˇky. Za´kladnı´krok ma´tvar: krok vprˇed, krok vzad, krok stranou (vpravo). Pro krok vzad a stranou je nutne´ pouzˇı´vat prˇı´kazy RYCHLE a POMALU, aby se skrylo ota´cˇenı´se a u´krok byl opravdu na jednu dobu. Upozornı´me na neˇstudenty. Otocˇka spocˇı´va´v kroku vprˇed, otocˇenı´ vlevo a kroku vzad. Cely´ tanec pak tvorˇı´ prˇejitı´ na vy´chozı´ pozici („od stolu na parket“) 3 kroky vprˇed a 3 kroky vzhu˚ru, da´le 3 za´kladnı´kroky na´sledovane´otocˇkou opakovane´celkem cˇtyrˇikra´t (tedy robot tancˇı´do cˇtverce). Cely´tanec (bez prˇejitı´na vy´chozı´pozici) opakuje peˇtkra´t. Prˇı´klad je zameˇrˇen na vnorˇene´cykly, v tomto prˇı´padeˇcykly OPAKUJ. Digram je v tomto prˇı´padeˇvhodne´tvorˇit inkrementacˇneˇ, nejprve od kombinace 3 za´kladnı´ kroky a otocˇka, prˇida´nı´m te´to cˇa´sti do cyklu a pote´zaobalenı´m cele´za´kladnı´(cˇtver- cove´) sestavy do cyklu peˇtina´sobne´ho opakova´nı´. Pocˇa´tecˇnı´pozice je vzˇdy v leve´m dolnı´m rohu cˇelem vpravo.

Prˇı´kladA8 – Vyskla´dat znacˇky; prˇı´kaz POLOZˇ VSˇUDE

Robot z libovolne´pocˇa´tecˇnı´pozice a natocˇenı´zaskla´da´cely´hernı´pla´n 8 znacˇkami na kazˇde´m polı´cˇku. Prˇitom je nutne´pocˇı´tat s tı´m, zˇe prˇi prave´m okraji mohou by´t umı´steˇna polı´cˇka se zdı´(tj. zed’ mu˚zˇe by´t ve smeˇru zleva doprava umı´steˇna drˇı´ve nezˇpo 10 polı´ch). Vzhledem k umı´steˇnı´ zdı´ vpravo, nelze pouzˇı´t vyplnˇova´nı´ strˇı´daveˇ zleva a zprava, ale je nutne´jı´t vzˇdy zleva a pak se opeˇt vra´tit. Prˇı´kaz KE ZDI z minule´hodiny lze pouzˇı´t pro na´vrat, je vhodne´prˇimeˇt studenty,aby pouzˇili v ra´mci dekompozice sa- mostatnou funkci na vyplneˇnı´1 rˇa´dku, at’uzˇs na´vratem (POLOZˇ ZNACˇKY DO RˇA´DKU) nebo bez na´vratu (POKLA´DEJ KE ZDI). Prˇesto prˇi kontrole diagramu upozornı´me na prˇı´tomnost vnorˇenı´cyklu˚do sebe (byt’je zakryto vola´nı´m jine´ho prˇı´kazu, ktery´ teprve cyklus obsahuje).

Prˇı´kladA9 – Vysbı´ratvsˇechny znacˇky; prˇı´kazy SEBER VSˇUDE ZNACˇKU, SEBER VSˇECHNY ZNACˇKY a SEBER ZNACˇKY NECHEJ 1

U´ kol se skla´da´ze za´kladnı´verze, ve ktere´robot sebere z kazˇde´ho polı´cˇka na ktere´m se nacha´zı´ alesponˇ 1 znacˇka pra´veˇ 1 znacˇku (tedy snı´zˇı´ pocˇet znacˇek na

71 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ kazˇde´m poli o jednu). Tuto cˇa´st rˇesˇı´me kolektivneˇpod vedenı´m vyucˇujı´cı´ho, ktery´ kreslı´diagram na tabuli (nebo jej necha´zakreslit neˇkoho ze studentu˚, ktere´mu diktujı´ spoluzˇa´ci). V prˇı´kladu se poprve´objevı´podmı´nka, jejı´zˇpouzˇitı´musı´vyucˇujı´cı´– zatı´m jen intuitivneˇ– vysveˇtlit. Du˚lezˇite´bude prˇedve´st zakreslenı´ve vy´vojove´m diagramu a upozornit, zˇe podmı´nka ma´vzˇdy nejvy´sˇe dveˇmozˇnosti. Ko´d se vykona´pouze tehdy, byla-li podmı´nka splneˇna a vykona´se pra´veˇjednou. Toto je nutne´zdu˚raznit, aby nedocha´zelo k za´meˇneˇs podmı´neˇny´m cyklem. Z tohoto du˚vodu byly take´cykly za- rˇazeny v prˇı´kladech drˇı´ve, jelikozˇze zkusˇenosti plyne, zˇe v opacˇne´m porˇadı´studenti ra´di zameˇnˇujı´podmı´neˇny´cyklus za podmı´nku. Na´sledujı´cı´dveˇvariace na za´kladnı´u´kol necht’uzˇstudenti zpracova´vajı´sami (ve zdatneˇjsˇı´skupineˇmohou i bez kreslenı´diagramu˚). Prvnı´z nich prˇida´va´odstraneˇnı´ vsˇech znacˇek mı´sto jedne´. Neˇkterˇı´studenti jisteˇponechajı´podmı´nku z prˇedchozı´ verze a do nı´ vlozˇı´ podmı´neˇny´ cyklus. Toto rˇesˇenı´ komentujeme jako zbytecˇne´, protozˇe vlozˇenı´cyklu DOKUD JE ZNACˇKA do podmı´nky KDYZˇ JE ZNACˇKA je nad- bytecˇne´. Druha´u´prava spocˇı´va´v ponecha´nı´pra´veˇjedne´znacˇky na kazˇde´m polı´cˇku, kde znacˇka byla. Jelikozˇrobot Karel neumı´pocˇı´tat a netusˇı´tedy, kolik znacˇek na poli lezˇı´, spocˇı´va´rˇesˇenı´v jednoduche´u´vaze: kdyzˇneˇjake´znacˇky na poli jsou, nejprve je vsˇechny posbı´ra´m a pote´jednu opeˇt polozˇı´m. Proto rˇesˇenı´s kombinacı´podmı´nky a cyklu, komentovane´v prˇedchozı´verzi jako nadbytecˇne´, nynı´nadbytecˇne´nenı´. V podmı´nce za cyklem bude polozˇenı´znacˇky.

Prˇı´kladA10 – Dekadicky´soucˇet; prˇı´kaz SECˇTI

Acˇkoliv jazyk Karel neobsahuje promeˇnne´a tedy ani aritmetiku, lze ji cˇa´stecˇneˇ implementovat. K tomu slouzˇı´na´sledujı´cı´3 u´lohy a u´kol A14. Vstupem necht’je robot umı´steˇny´na polı´cˇku se znacˇkami nebo bez znacˇek, jejichzˇ pocˇet urcˇuje prvnı´scˇı´tanec (cˇlen). Na sousednı´m polı´cˇku, ke ktere´mu je robot otocˇen cˇelem mohou opeˇt by´t znacˇky.Ty urcˇujı´druhy´scˇı´tanec. Trˇetı´polı´cˇko necht’je pra´zdne´ a robot zde umı´stı´tolik znacˇek, kolik je soucˇet. Mu˚zˇe (musı´) prˇi tom odstranit znacˇky z prˇedchozı´ch dvou polı´cˇek. Algoritmus povazˇuje za vstup jen takove´pocˇty znacˇek, zˇe jejich soucˇet da´va´nejvy´sˇe osm. Na´rocˇneˇjsˇı´rozsˇı´rˇenı´prˇı´kladu by doka´zalo zachovat znacˇky i na polı´ch scˇı´tancu˚. (Znamenalo by to vyuzˇı´t dalsˇı´polı´cˇka a prˇed zapocˇetı´m scˇı´ta´nı´„rozkopı´rovat“ obsah polı´scˇı´tancu˚do dvou jiny´ch polı´a na´sledneˇprˇenosit zpeˇt obsah jednoho ze dvou vznikly´ch polı´na pu˚vodnı´mı´sto.)

Prˇı´kladA11 – Dekadicky´rozdı´l;prˇı´kaz ODECˇTI

Prˇı´klad je podobny´prˇedchozı´mu s tı´m rozdı´lem, zˇe na prvnı´m polı´cˇku urcˇuje pocˇet znacˇek mensˇenec a na druhe´m polı´cˇku mensˇitel. Na trˇetı´m polı´cˇku ve smeˇru natocˇenı´robota necht’pocˇet znacˇek urcˇı´rozdı´l. Z prvnı´ch dvou polı´cˇek robot mu˚zˇe

72 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

(musı´, nepracujeme-li s rozsˇı´rˇenı´m jako v minule´m prˇı´kladu) opeˇt znacˇky odstranit. Povoleny´m vstupem jsou takove´pocˇty znacˇek, aby vy´sledkem bylo cˇı´slo od nuly po osm.

Prˇı´kladA12 – Deˇlenı´dveˇma; prˇı´kaz DEˇLENO2

Na polı´cˇku, na ktere´m robot stojı´, je umı´steˇny´libovolny´pocˇet znacˇek. At’robot umı´stı´na sousednı´pole, kam je otocˇeny´cˇelem, tolik znacˇek, kolik je polovina (vzˇdy zaokrouhleno dolu˚).

Prˇı´kladA13 – Uklidit znacˇky; prˇı´kaz UKLIDˇ ZNACˇKY

Na hernı´m pla´nu jsou rozmı´steˇny znacˇky tak, zˇe v rˇa´dku jich je nejvı´ce 8 a na kazˇde´m poli smı´by´t nejvy´sˇe 1. Tyto znacˇky povazˇujeme za zˇidle v sa´le. Robot ma´za u´kol zˇidle uklidit a to tak, zˇe je naskla´da´na sebe po leve´straneˇsa´lu (hernı´ho pla´nu). Robot se ve vy´chozı´pozici mu˚zˇe nacha´zet kdekoliv v sa´le, ale musı´vzˇdy poklidit cely´sa´l. Prˇi kontrole oveˇrˇı´me prˇedevsˇı´m spra´vny´pocˇet znacˇek po leve´straneˇ(je vzˇdy soucˇtem drˇı´ve rozmı´steˇny´ch zˇidlı´), student by meˇl dojı´t k dekompozici na prˇı´kaz UKLIDˇ RˇADU a jeho cyklicke´opakova´nı´.

Prˇı´kladA14 – Bina´rnı´soucˇet; prˇı´kaz BIN SOUCˇET

Prˇı´klad je uka´zkou zavedenı´desetibitove´bina´rnı´aritmetiky. Naucˇte robota scˇı´tat desetibitova´bina´rnı´cˇı´sla. V pocˇa´tecˇnı´m postavenı´bude robot sta´t na rˇa´dku u prave´ho okraje otocˇeny´vlevo. V tomto rˇa´dku je kazˇde´polı´cˇko jedna cifra bina´rnı´ho cˇı´sla. Je-li na polı´cˇku alesponˇjedna znacˇka, ma´tato cifra hodnotu 1, nenı´-li, ma´hodnotu 0. Na dalsˇı´m rˇa´dku bude stejny´m zpu˚sobem zapsany´druhy´scˇı´tanec. Dalsˇı´dva rˇa´dky budou pra´zdne´a robot umı´stı´do druhe´ho vy´sledek (prvnı´smı´pouzˇı´t na pomocne´ hodnoty – carry, prˇevod do vysˇsˇı´ho rˇa´du, ale vycˇistı´jej). Ze zadanı´nesmı´soucˇet prˇete´ci desetibitovy´rozsah (nesmı´mı´t prˇevod do 11. rˇa´du, resp. program se pro takovy´vstup nemusı´chovat korektneˇ). Pravidla bina´rnı´ho scˇı´ta´nı´by meˇli studenti zna´t z hodin informatiky, prˇesto zo- pakujeme: 0 a 0 (pra´zdne´a pra´zdne´) je 0, 1 a 0 nebo 0 a 1 (znacˇka a pra´zdne´) je 1, 1 a 1 (dveˇznacˇky) je 0 a navı´c prˇevod 1 do vysˇsˇı´ho rˇa´du. V na´sledujı´cı´m rˇa´du je nutne´ prˇevod prˇicˇı´st k vy´sledku podle stejny´ch pravidel. Bude vhodne´nava´deˇt studenty ke spra´vne´dekompozici: prˇı´kaz SECˇTI 2 BITY pro scˇı´ta´nı´2 bitu˚a PRˇICˇTI PRˇENOS pro prˇicˇı´ta´nı´prˇenosu. Samotny´prˇı´kaz BIN SOUCˇET bude tyto dva volat pro kazˇdou cifru. Studenti by ho meˇli konstruovat s cyklem DOKUD NENI´ ZEDˇ nikoliv OPAKUJ 10-KRA´T, jelikozˇje to univerza´lneˇjsˇı´(upozor- nı´me na defenzivnı´prˇı´stup k programova´nı´, radeˇji prˇedpokla´da´me mozˇne´proble´my navı´c).

73 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

Prˇı´kladA15 – Schody; prˇı´kaz SCHODY Robot Karel se naucˇı´vyjı´t po schodech. Hernı´pla´n nynı´vnı´ma´me jako pohled z boku. Robot je umı´steˇny´ v jednom ze spodnı´ch rohu˚, cˇelem od zdi. Prˇed nı´m jsou vytvorˇene´schody z polı´cˇek se zdmi. Je mozˇne´, aby jeden schod byl delsˇı´nezˇ1 polı´cˇko, ale nesmı´by´t vysˇsˇı´nezˇjedno polı´cˇko. Narazı´-li robot na vysˇsˇı´schod, koncˇı´ (tj. pokusı´se zvednout, ale da´l nepokracˇuje). Robot se zveda´tak, zˇe pod sebe skla´da´ znacˇky. Jakmile pod sebe polozˇı´8 znacˇek, mu˚zˇe se zvednout o pole nahoru. Studenti by meˇli automaticky pouzˇı´vat drˇı´ve naprogramovany´prˇı´kaz KE ZDI a prˇı´padneˇ POLOZˇ8ZNACˇEK. Da´le je vhodne´napsat prˇı´kaz ZVEDNI SE, ktery´v bloku RYCHLE-POMALU poota´cˇı´a posune robota tak, aby se zda´lo, zˇe se opravdu zvedl o pole vy´sˇbez otocˇenı´.

Prˇı´kladA16 – Du˚m v bludisˇti; prˇı´kaz JDI DOMU Za´veˇrecˇny´prˇı´klad na procha´zenı´zaskla´dany´m prostorem vede na rekurzi. Snaha pouzˇı´t cyklus s podmı´nkou bude neu´speˇsˇna´kvu˚li nutnosti kontrolovat dvojı´pod- mı´nku s logicky´m opera´torem „dokud nenı´zed’ nebo du˚m“, kterou nelze v jazyce Karel pouzˇı´t. Tento prˇı´kladnenı´vhodny´pro zacˇa´tecˇnı´ky, mohl by je vı´ce zma´st nezˇ poucˇit. Prˇı´klad da´va´me pouze jako bonus pokrocˇilejsˇı´m studentu˚m, kterˇı´majı´prˇı´- padneˇzkusˇenost s neˇjaky´m programovacı´m jazykem jako trˇeba PHP. Upozornı´me na nevy´hodu rekurze, ktera´zateˇzˇuje pameˇt’vı´ce nezˇcykly (nutnostı´vytva´rˇet novy´ kontext) a hrozı´riziko opomenute´ho ukoncˇenı´, resp. ukoncˇenı´ke ktere´mu nedojde a rekurze se stane nekonecˇnou (ekvivalent zacyklenı´). Robot je umı´steˇny´v bludisˇti ktere´ma´na´sledujı´cı´parametry: spodnı´rˇa´dek po- cˇı´ta´me jako 1., vsˇechny liche´rˇa´dky neobsahujı´zdi (je zde jen okraj hernı´ho pla´nu oznacˇeny´jako zed’) a na neˇktere´m z nich je neˇkde umı´steˇny´robotu˚v domov. Na sudy´ch rˇa´dcı´ch jsou zdeˇne´ prˇepa´zˇky, ktere´ mohou obsahovat jeden a vı´ce „pru˚- chodu˚“, tedy chybeˇjı´cı´ch zdı´. V teˇch domov umı´steˇny´by´t nesmı´. Proto v 10. rˇa´dku jsou jizˇjen zdi bez pru˚chodu. Robot je na pocˇa´tku umı´steˇny´kdekoliv v 1. rˇa´dku a libovolneˇnatocˇeny´. U´ kolem je najı´t domov a tam zu˚stat.

Je prakticky jiste´, zˇe prˇı´klady urcˇene´pro tuto lekci za jeden a pu˚l hodiny vsˇichni studenti nestihnou. To nicˇemu nevadı´. Zbyle´prˇı´klady mu˚zˇeme pru˚beˇzˇneˇzada´vat jako nepovinne´ doma´cı´cvicˇenı´. Je du˚lezˇite´, aby studenti tyto prˇı´klady meˇli zadane´ nepovinneˇa bez prˇedem prˇislı´bene´ho zna´mkova´nı´a tedy nemeˇli du˚vod je opisovat. Nic take´nebra´nı´jejich pru˚beˇzˇne´mu pouzˇitı´beˇhem na´sledujı´cı´ch neˇkolika lekcı´jako opakova´nı´.

74 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

3. lekce – Za´klady OOP

Te´ma: Za´kladnı´principy OOP, deˇdicˇnost, prˇı´klady na UML. Cı´l: Sezna´menı´s pojmy objekt, trˇı´da, instance, deˇdicˇnost a in- terface, zakreslenı´v UML. Technologie: Greenfoot, lze pouzˇı´t take´na´stroj na kreslenı´UML. Metodika: kolektivnı´nebo ty´mova´pra´ce Pozna´mky: Uzˇitı´na´stroje na kreslenı´UML lze doporucˇit azˇpo probra´nı´ metod a atributu˚, zatı´m by studenty zdrzˇovala orientace v programu.

V u´vodu hodiny se nezdrzˇujeme opakova´nı´m la´tky algoritmizace, ale mu˚zˇeme zkontrolovat zbyle´u´koly zadane´k doma´cı´prˇı´praveˇ. Zacˇı´na´me vysveˇtlenı´m „hierar- chie“ paradigmat. Existujı´ru˚zne´zpu˚soby jak pocˇı´tacˇi zadat u´kol k rˇesˇenı´(program). Teˇmto postu- pu˚m, metodika´m nebo souhrnu˚m pravidel urcˇujı´cı´m z cˇeho a jak vytvorˇit program se rˇı´ka´ programovacı´paradigma (mn. cˇ. paradigmata). Zcela za´kladnı´je imperativnı´paradigma, ktere´rˇı´ka´, zˇe program je jednou dlouhou posloupnostı´prˇı´kazu˚, ktere´pocˇı´tacˇpostupneˇ(sekvencˇneˇ) vykona´va´. Mezi teˇmito prˇı´kazy se mu˚zˇe nacha´zet prˇı´kaz umozˇnˇujı´cı´prˇeskocˇit na ktery´koliv jiny´rˇa´dek ko´du (goto). To obzvla´sˇteˇu veˇtsˇı´ch programu˚prˇina´sˇı´snı´zˇenı´prˇehlednosti a riziko, zˇe programa´tor prˇed skokem opomene neˇjaky´prˇı´kaz a bude chybu teˇzˇko hledat. Pokud zaka´zˇeme pouzˇitı´prˇı´kazu goto a nahradı´me jej podmı´nkami (viz KDYZˇ v jazyku Karel) a cykly (viz DOKUD a OPAKUJ v jazyku Karel) a zacˇneme pouzˇı´vat funkce – u´seky ko´du, ktere´pojmenujeme a pouzˇı´va´me jako nove´prˇı´kazy, dosta´va´me paradigma strukturovane´. U rozsa´hly´ch programu˚je i toto paradigma ma´lo prˇehledne´, protozˇe sta´le musı´me veˇdeˇt, ktera´funkce je k cˇemu urcˇena, jak pracuje a co meˇnı´. Pouzˇijeme proto paradigma objektove´ (zkratka OOP), ktere´jednotlive´cˇa´sti pro- gramu rozdeˇlı´na samostatne´ objekty, ktere´majı´sve´vlastnı´chova´nı´(metody) a vlast- nosti (atributy). Objekty si vza´jemneˇprˇeda´vajı´zpra´vy (volajı´sve´metody) anizˇby musely veˇdeˇt, jak pracujı´. Take´nesmı´meˇnit nic, co nenı´jejich. Vsˇechny pozˇadavky na objektoveˇorientovane´programy urcˇujı´na´sledujı´cı´„Principy OOP“:

1. Zapouzdrˇenı´– objekty skry´vajı´jak sva´data a zpu˚sob jak je ukla´dajı´, tak i al- goritmus, jak prova´deˇjı´jednotlive´cˇinnosti. Nabı´dnou pouze seznam cˇinnostı´, ktere´umı´. Navı´c specifikujı´, co musı´me dodat (vstup) a co po provedenı´do- staneme (vy´stup). Uzˇale nerˇı´kajı´, jak to deˇlajı´. To prˇina´sˇı´vy´hodu modularity – objekt lze zameˇnit za jiny´, ktery´nabı´zı´tote´zˇ, ale deˇla´to jinak. Dalsˇı´vy´hodou je znovupouzˇitelnost – tenty´zˇobjekt lze pouzˇı´t v ktere´mkoliv programu, ktere´mu se hodı´, anizˇby se znovu programoval.

75 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

2. Deˇdicˇnost – objekt mu˚zˇe by´t potomkem jine´ho objektu. Pak zdeˇdı´po sve´m rodicˇi vsˇechny jeho schopnosti a mu˚zˇe prˇida´vat dalsˇı´sve´vlastnı´. Nemusı´me tedy zdeˇdeˇne´vlastnosti a metody programovat znovu.

3. Polymorfismus – objekt se umı´tva´rˇit jako kdokoliv z jeho prˇedchu˚dcu˚. Jsou-li objekty zˇirafa a jelen potomkem objektu sudokopytnı´ci, mu˚zˇeme je povazˇovat i za sudokopytnı´ky a pta´t se bez ohledu na konkre´tnı´druh na pocˇet kopyt, cozˇje spolecˇna´vlastnost vsˇech sudokopytnı´ku˚. Ti budou potomkem objektu zˇivocˇich, jehozˇ potomkem bude i krtek. Proto vsˇem trˇem mu˚zˇeme vydat spolecˇny´ prˇı´kaz „prˇijmi potravu“, jelikozˇ tu prˇijı´majı´ vsˇichni zˇivocˇichove´. Dı´ky zapouzdrˇenı´to kazˇdy´ale udeˇla´po sve´m.

Zmı´neˇne´vlastnosti a na´sledujı´cı´ch 5 novy´ch pojmu˚procvicˇı´me na prˇı´kladu Zoo.

Objekt je neˇjaky´samostatny´, specificky´celek uvnitrˇprogramu. Jako o objektu mu˚- zˇeme mluvit o libovolne´trˇı´deˇnebo instanci.

Atribut je urcˇita´specificka´vlastnost objektu a mu˚zˇe naby´vat ru˚zny´ch hodnot. Naprˇ. atribut „barva ocˇı´“ u objektu „cˇloveˇk“ mu˚zˇe mı´t hodnotu zelena´, modra´, hneˇda´a jine´podle toho o ktere´ho cˇloveˇka jde.

Metoda je urcˇita´cˇinnost, va´zana´na konkre´tnı´objekt, ktery´ji doka´zˇe vykona´vat. Naprˇ. kazˇde´auto bude mı´t jisteˇmetodu „rozjed’se“ a „zastav“, ale take´trˇeba „zatrub“ nebo „zjisti stav paliva“.

Trˇı´da je prˇedpis, jak utvorˇit objekt urcˇite´ho typu. Je to tedy obecny´popis neˇjake´sku- piny objektu˚se stejny´mi atributy (byt’mohou mı´t ru˚zne´hodnoty) a stejny´mi metodami. Naprˇ. budeme mı´t trˇı´du cˇloveˇk, podle ktere´budeme moci vytvorˇit kohokoliv konkre´tnı´ho a nastavit mu jeho barvu ocˇı´apod. Take´bude existo- vat trˇı´da auto, podle ktere´zkonstruujeme auto libovolne´barvy, s libovolny´m objemem na´drzˇe a motoru a libovolny´m pocˇtem mı´st k sezenı´. Vsˇechna se ale budou stejny´m zpu˚sobem rozjı´zˇdeˇt, zastavovat a troubit.

Instance je konkre´tnı´„zˇijı´cı´“ objekt ve spusˇteˇne´m programu. Je vytvorˇeny´podle neˇjake´trˇı´dy, mluvı´me proto o instanci urcˇite´trˇı´dy. Ma´nastavene´sve´vlastnı´ hodnoty atributu˚a mu˚zˇeme ho pozˇa´dat, aby provedl urcˇitou svou metodu.

Prˇı´kladG1 – Zoo Studenti na prˇı´kladu Zoo z prˇilozˇene´ho CD rozeberou zapsane´pojmy a podı´vajı´ se s vyucˇujı´cı´m na ko´d. Zkusı´si v prostrˇedı´Greenfoot vytvorˇit nove´instance sta´- vajı´cı´ch trˇı´d. S vyucˇujı´cı´m analyzujı´jake´jsou prˇı´tomny trˇı´dy a jake´instance. V tuto chvı´li by meˇl vyucˇujı´cı´intuitivneˇzave´st UML diagramy, nejprve zakreslenı´m dia- gramu objektu˚, pak diagramu trˇı´d, prozatı´m bez zapisova´nı´atributu˚a metod, jen samotne´trˇı´dy nebo instance a jejich deˇdicˇne´vazby. Nakonec si zkusı´vytvorˇit vlastnı´ trˇı´du, jako potomka neˇktere´sta´vajı´cı´. Bud’ novy´druh zvı´rˇete (kra´lı´k) jako potomek

76 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ trˇı´dy Animal nebo prˇı´mo potomka neˇktere´ho zvı´rˇete – naprˇ. slonı´mla´deˇjako po- tomek Elephant nebo specificky´poddruh zˇa´by – stacˇı´zmeˇnit obra´zek prˇes prave´ tlacˇı´tko nad trˇı´dou (tam take´najdeme ”New subclass...” pro vytvorˇenı´potomka). Upozornı´me studenty, zˇe musı´z noveˇvznikle´trˇı´dy odstranit automaticky prˇidanou metodu „act“. Jelikozˇzatı´m nevı´, jaka´je syntaxe metod, necha´me je opisovat ze sta´- vajı´cı´ch trˇı´d. Mohou zkusit i doplneˇnı´konstruktoru a zmeˇnu hodnot, ktere´urcˇujı´ pocˇa´tecˇnı´vlastnosti dane´ho zvı´rˇete.

Prˇı´kladG2 – FlyingAid Jako dalsˇı´prˇı´klad mu˚zˇeme zvolit na CD prˇilozˇeny´program FlyingAid, ve ktere´m dveˇletadla shazujı´balı´ky prvnı´pomoci a trˇetı´bombu. Pohybujı´cı´se postava chyta´ tyto balı´cˇky, humanita´rnı´pomoc jı´dobı´jı´energii (zatı´m nevyuzˇijeme), bomba oka- mzˇiteˇzabı´jı´. V tomto programu studenti vyzkousˇı´prˇida´nı´letadel a postav, mohou vyzkousˇet i postavu KeyboardMover, ktera´se ovla´da´kla´vesnicı´. Dalsˇı´mozˇnostı´je podeˇdit od trˇı´d AidPlane a FightPlane nove´typy letadel. Do prˇı´sˇtı´hodiny zada´me studentu˚m jako doma´cı´prˇı´pravu procˇı´st materia´l o atri- butech a datovy´ch typech (soubor je v PDF prˇilozˇen na CD).

4. lekce – Atributy a datove´typy

Te´ma: Atributy, datove´typy, opera´tory, konstanty. Cı´l: Pouzˇitı´atributu˚trˇı´d, jejich viditelnost, prˇirˇazenı´hodnoty a dalsˇı´opera´tory, atributy v UML diagramu. Technologie: tabule (nebo i Greenfoot) Metodika: teoreticka´vy´uka – vy´klad a diskuse, individua´lnı´pra´ce Pozna´mky: Je nezbytne´prˇedchozı´hodinu rozdat nebo v prˇedstihu e- mailem poslat studentu˚m pracovnı´list k atributu˚m a dato- vy´m typu˚, aby si jej procˇetli a prˇipravili si ota´zky.

V u´vodu hodiny se studenty projdeme pracovnı´ list k atributu˚m. Vysveˇtlı´me nejasnosti, na rea´lny´ch prˇı´kladech zkusı´me, zda si pamatujı´na´zvy datovy´ch typu˚ (naprˇ. „Jaky´datovy´typ zvolı´me pro jme´no cˇloveˇka, jeho rodne´cˇı´slo apod.“). Nejprve klademe ota´zky trivia´lnı´, pozdeˇji mu˚zˇeme prˇidat i ota´zky u ktery´ch studenty budeme muset nave´st k rˇesˇenı´: naprˇ. jaky´datovy´typ je vhodny´pro ulozˇenı´veˇku cˇloveˇka. Studenty navedeme k rˇesˇenı´, zˇe le´pe nezˇpouzˇı´t int na ulozˇenı´veˇku, budeme ukla´dat sice do int, ale rok narozenı´a aktua´lnı´veˇk dopocˇı´ta´vat. Podobneˇtrˇeba na ulozˇenı´ barvy pouzˇijeme trˇı´du Color, kterou nebudou zna´t. Te´ma datovy´ch typu˚bohuzˇel lze bez znalosti pra´ce s metodami jen teˇzˇko porˇa´dneˇ prakticky procvicˇit, proto zvolı´me teoreticky´prˇı´stup zalozˇeny´na UML na´vrhu. Stu- dentu˚m budeme zada´vat vytva´rˇet datovy´na´vrh ru˚zny´ch objektu˚vcˇetneˇatributu˚ (ale bez metod) a zakreslovat do diagramu v sesˇiteˇa na tabuli. Pra´ci s opera´tory

77 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ procvicˇı´me na snippetech. Velice du˚lezˇite´je dostatecˇneˇvysveˇtlit vy´znam opera´toru prˇirˇazenı´a pouka´zat, zˇe za´pis ma´zcela odlisˇny´vy´znam od matematiky. Nezapo- mı´na´me ani na opera´tory, ktere´ nemajı´ paralelu v matematice: prˇedevsˇı´m new a instanceof. Neprobı´ra´me terna´rnı´opera´tor, ktery´patrˇı´do lekce o podmı´nka´ch. Promeˇnne´mu˚zˇeme prakticky procvicˇovat na prˇı´kladu Zoo z minule´lekce. Po- mocı´atributu˚nastavitelny´ch zvı´rˇeti budeme meˇnit jeho vy´chozı´chova´nı´prˇi pohybu. Vytvorˇı´me jine´druhy zvı´rˇat se specificky´mi parametry pohybu.

5. lekce – Metody, API Greenfootu

Te´ma: Metody, viditelnost metod, staticke´metody, API Greenfo- otu. Cı´l: Sezna´menı´ s pojmem metoda objektu a staticka´ metoda, trˇı´dy frameworku Greenfoot a jejich metody. Technologie: Greenfoot Metodika: Demonstrace na prˇipraveny´ch prˇı´kladech, individua´lnı´ pra´ce, doplnˇova´nı´kra´tky´ch u´seku˚ko´du do hotovy´ch pro- jektu˚. Pozna´mky: Nesmı´me opomenout zakreslenı´metod do UML diagramu.

Prˇı´kladG3 – Karel

Na prˇı´kladu Karel z prˇilozˇene´ho CD demonstrujeme vola´nı´a deklaraci metod. Zdu˚raznı´me vy´znam klı´cˇovy´ch slov public, protected a private, ktere´se vy- skytly uzˇu atributu˚. Po otevrˇenı´souboru v prostrˇedı´Greenfoot si studenti zkusı´ spustit nad instancı´robota, ktery´je vlozˇen ve sce´neˇ, metodu vypln(). Tato aplikace se nepousˇtı´tlacˇı´tkem Run, jelikozˇroboti nevykona´vajı´zˇa´dnou cyklickou cˇinnost! Ro- bot vlozˇeny´do sce´ny je VyplnovaciRobot a je tedy potomkem trˇı´dy Robot, ktera´ ma´vytvorˇene´metody podobne´prˇı´kazu˚m jazyka Karel, vcˇetneˇmetod vracejı´cı´ch boolean hodnotu, ktere´poslouzˇı´v cyklech a podmı´nka´ch. Studenti by si meˇli vytvorˇit vlastnı´ho potomka trˇı´dy Robot a naucˇit ho neˇjakou jednoduchou cˇinnost, zatı´m bez pouzˇitı´podmı´nek a cyklu˚. Pokrocˇilejsˇı´studenti vsˇak mohou vyzkousˇet v duchu PBL samostatneˇi u´koly s podmı´nkami a cykly. Dalsˇı´m u´kolem bude doplnit do robota novou funkcionalitu nezalozˇenou na jeho sta´vajı´cı´ch metoda´ch. Nabı´zı´se naprˇı´klad mozˇnost prˇehra´t zvuk – Greenfoot .playSound() (zde je nutne´vysveˇtlit princip staticky´ch metod), prˇemı´stit robota na zadane´mı´sto, apod. Vyuzˇı´va´me prˇi tom velmi aktivneˇznalosti opera´toru˚a pro- meˇnny´ch a zada´va´me u´koly na ktery´ch se opakuje i toto te´ma.

78 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

Prˇı´kladG1 – Zoo Do prˇı´kladu Zoo doplnˇujeme specificke´dovednosti zvı´rˇat (opeˇt mu˚zˇe jı´t o jejich zvuk), vracenı´hodnot jejich atributu˚. V tuto chvı´li vysveˇtlı´me pojmy setter a getter5 Ve zbyle´m cˇase studenty sezna´mı´me se za´klady dokumentace ko´du pomocı´Ja- vaDoc. Za´meˇrem je vyvolat v nich dojem, zˇe dokumentace je zcela integra´lnı´soucˇa´st ko´du a je hrubou chybou, zˇe trˇeba v prˇı´kladu Zoo chybı´, proto je nutne´ji ihned doplnit. Meˇli bychom pouka´zat na to, zˇe je pro na´s problematicke´dohleda´vat, co ktera´metoda deˇla´a jaky´vy´znam majı´jejı´parametry. Pouka´zˇeme na prˇehlednost do- kumentace prostrˇedı´Greenfoot a prˇı´kladu Karel. Meˇli bychom studenty odka´zat i na dokumentaci Javy na stra´nka´ch http://docs.oracle.com/javase/7/docs/ /index.html.

6. lekce – Podmı´nkya vy´jimky

Te´ma: Podmı´nky a vy´jimky v jazyce Java. Cı´l: Zvla´dnutı´ konstrukcı´ if, if-else, switch-case a vyvola´nı´ a odchyta´va´nı´vy´jimek. Technologie: Greenfoot Metodika: rozsˇirˇova´nı´existujı´cı´ho ko´du

Nejprve studentu˚m ve strucˇnosti vysveˇtlı´me syntaxi podmı´nek. Jejich pouzˇitı´ v ko´du mu˚zˇeme demonstrovat na neˇktere´m z prˇı´kladu˚.

Prˇı´kladG4 – SimpleUI

Prˇı´klad SimpleUI na prˇilozˇene´m CD obsahuje jen 3 jednoduche´ trˇı´dy. Trˇı´da SimpleCheck reprezentuje jednoduche´zasˇkrta´va´tko, SimpleButton je jednodu- che´tlacˇı´tko, SimpleEvalButton je tlacˇı´tko, ktere´vyhodnotı´stav zasˇkrta´va´tek. Prˇı´- klad je na prˇilozˇene´m CD jizˇvyrˇesˇen, proto jej prˇed prˇeda´nı´m studentu˚m nejprve upravı´me – odstranı´me podle u´vahy a schopnostı´skupiny neˇktere´cˇa´sti ko´du. Studenti by meˇli vytvorˇit jednoduchy´program, ktery´bude radit, co uvarˇit. Do hernı´ho pla´nu jsou umı´steˇna 3 zasˇkrta´va´tka se surovinami v popisku, da´le tlacˇı´tko pro vyhodnocenı´a dalsˇı´tlacˇı´tko slouzˇı´jako vy´stup – nastavenı´m jeho atributu label se prˇeda´va´uzˇivateli text. Mı´rna´za´ludnost spocˇı´va´v tom, jak se dostat z trˇı´dy tlacˇı´tka k jednotlivy´m zasˇkr- ta´va´tku˚m, abychom mohli vyhodnotit jejich stav. Vzorove´rˇesˇenı´pouzˇı´va´zjednodu- sˇenı´, ktere´nenı´zcela idea´lnı´a je zapotrˇebı´to tak studentu˚m prezentovat. Tlacˇı´tka i

5. Setter a getter – verˇejne´ metody vytvorˇene´ pro kazˇdy´ priva´tnı´ atribut tak, aby setter umozˇnil hodnotu nastavit zatı´mco getter prˇecˇı´st. Uvnitrˇsetteru obvykle probı´ha´kontrola, zda je nastavovana´ hodnota korektnı´, getter mu˚zˇe prova´deˇt u´pravy vracene´hodnoty nebo dopocˇı´ta´vat z jiny´ch atributu˚ve skutecˇnosti neexistujı´cı´atribut. Oba poma´hajı´odstı´nit datovou implementaci, tedy jde o zapouzdrˇenı´.

79 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ zasˇkrta´va´tka jsou vlozˇena ve trˇı´deˇ SomeWorld do pla´nu a za´rovenˇse sta´vajı´verˇej- ny´m atributem te´to trˇı´dy. Metoda doAction() trˇı´dy SimpleEvalButton si tyto atributy prˇevezme do svy´ch loka´lnı´ch promeˇnny´ch kvu˚li snazsˇı´mu za´pisu. Jelikozˇmetoda getWorld() vracı´trˇı´du World, je nutne´explicitneˇprˇetypova´vat. Tyto veˇci mohou pu˚sobit slabsˇı´m studentu˚m proble´m, proto jim lze da´t za u´kol doplneˇnı´jen samotny´ch podmı´nek. Zdatneˇjsˇı´studenti mezi tı´m budou doplnˇovat dalsˇı´zasˇkrta´va´tka s jiny´mi volbami. U´ cˇelem je naucˇit se nejen jednoduche´podmı´nky, ale i slozˇene´s logicky´mi opera´tory. Studenti mohou beˇhem procvicˇova´nı´z te´to aplikace vytvorˇit novou (zdu˚raznı´me znovupouzˇitelnost ko´du – trˇı´dy nepı´sˇeme cele´znovu), ktera´bude naprˇ. radit jak stra´vit odpoledne s volbami „prsˇı´, svı´tı´slunce, sneˇzˇı´“.

V dalsˇı´cˇa´sti hodiny se vra´tı´me k pojmu setter. Upozornı´me studenty, zˇe cˇasto je nutne´omezit povolene´hodnoty, ktere´lze nastavit neˇktere´mu atributu, cozˇby meˇl rˇesˇit pra´veˇ setter s podmı´nkami. Doplnı´me tyto podmı´nky do prˇı´slusˇny´ch metod pouzˇı´vany´ch prˇı´kladu˚– naprˇı´klad settery pro vy´sˇku a sˇı´rˇku trˇı´dy SimpleCheck by meˇly omezovat minima´lnı´povolene´rozmeˇry. V prvnı´fa´zi pouzˇijeme jen prˇı´kaz return, ktery´m se opustı´metoda, pokud meˇla by´t nastavena nepovolena´hodnota. Pak ale probereme vy´jimky a studenti se naucˇı´ v takove´m prˇı´padeˇprˇedat vy´jimku a v nadrˇazene´m bloku ji odchytit. Pochopit princip vy´jimek bude vyzˇadovat delsˇı´cˇas, proto bude vhodne´te´ma te´to lekce v prˇı´padeˇpotrˇeby rozsˇı´rˇit na dveˇlekce.

Prˇı´kladG3 – Karel Na prˇı´kladu robota Karla uka´zˇeme prakticke´vyuzˇitı´vy´jimek, ktere´by spra´vneˇ meˇla prˇeda´vat metoda krok, pokud robot narazı´ do zdi a metody poloz() a zvedni() pokud je pole plne´nebo pra´zdne´.

7. lekce – Cykly

Te´ma: Cyklus for, while, do-while. Cı´l: Pouzˇitı´cyklu˚, vnorˇenı´cyklu˚. Technologie: Greenfoot Metodika: rozsˇirˇova´nı´existujı´ko´du

Cyklu nejprve probereme strucˇneˇ teoreticky – syntaxi a rozdı´l v jednotlivy´ch typech. Studentu˚m uva´dı´me prˇı´klady ru˚zny´ch konstrukcı´a necha´me je rozhodnout jaky´ typ cyklu zvolı´ (chci z kla´vesnice prˇevzı´t cˇı´slo, ale jen 1–5: do-while; chci nechat blikat cˇervene´sveˇtlo, dokud metoda isDangerState() vracı´ true: while; chci vypsat seznam deseti polozˇek: for).

80 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

V prostrˇedı´Greenfoot se cykly procvicˇujı´hu˚rˇe, protozˇe za´kladnı´cyklicke´jevy rˇesˇı´me opakujı´cı´m se vola´nı´m metody act(), cozˇprova´dı´samo prostrˇedı´. Pouzˇitı´ cyklu jinde mu˚zˇe mı´t blokujı´cı´charakter, pokud cyklus beˇzˇı´prˇı´lisˇdlouho nebo je nekonecˇny´. Cˇasto je pak nutne´restartovat cele´prostrˇedı´pomocı´volby Controls → Show debugger → Terminate. Cykly procvicˇujeme na prˇı´kladu Karel vytva´rˇenı´m novy´ch metod, jako je dojitı´ ke zdi. Studenti za´rovenˇmohou zkusit zvy´sˇit nebo snı´zˇit rychlost robota u´pravou metody waitASecond; Dalsˇı´m vhodny´m te´matem na pocvicˇenı´bude kreslenı´obra´zku˚: vytva´rˇenı´novy´ch objektu˚v prˇı´kladu SimpleUI nebo v nove´m projektu, kde bude u´kolem vykreslovat objektu nebo do pozadı´ hernı´ho pla´nu mı´sto obra´zku z prˇedlohy obrazec podle parametru˚. Prˇı´klady by meˇly by´t voleny i na vnorˇenı´cyklu˚(kreslenı´sˇachovnice, umist’ova´nı´objektu˚do hernı´ho pla´nu pravidelneˇv obou rozmeˇrech), jelikozˇto by´va´ pro spoustu studentu˚teˇzˇko pochopitelne´.

8. lekce – Procvicˇova´nı´

Te´ma: Procvicˇova´nı´prˇedchozı´la´tky, pa´rove´programova´nı´. Cı´l: Vyzkousˇet si vytvorˇenı´vlastnı´ho projektu od zacˇa´tku, zku- sit si pa´rove´programova´nı´. Technologie: Greenfoot Metodika: pa´rove´programova´nı´, programming from scratch, minipro- jekty Pozna´mky: Tuto lekci je mozˇne´prota´hnout na vı´ce hodin.

Studenti by v tuto chvı´li meˇli mı´t obecny´prˇehled o za´kladnı´ch programovy´ch struktura´ch. Vyuzˇijeme metodiku pa´rove´ho programova´nı´ a miniprojektu˚ k pro- cvicˇenı´vsˇech teˇchto konstrukcı´. Studenty rozdeˇlı´me do dvojic, eventua´lneˇtrojic a zada´me jim kra´tke´projekty, ktere´naprogramujı´. Vyucˇujı´cı´beˇhem semina´rˇe procha´zı´mezi studenty, kontroluje jejich postup. Zˇ a´ci se mohou kdykoliv pta´t, syntaxi napovı´da´me, ale ko´d sami nikdy nevpisujeme, v krajnı´m prˇı´padeˇradeˇji diktujeme a vzˇdy klademe ota´zky studentu˚m, aby vytvo- rˇenou konstrukci popsali. Jako odpoveˇd’ na rozsa´hlejsˇı´dotazy („Jak se odchyta´vajı´ vy´jimky?“) radeˇji uva´dı´me odkazy na stra´nky s cˇla´nky na dane´te´ma, aby se stu- denti naucˇili pracovat s elektronicky´mi zdroji a dokumentacı´a nespole´hali jen na ucˇitele, ktery´ma´pu˚sobit spı´sˇe v roli osoby zabranˇujı´cı´sˇpatne´interpretaci zdroju˚a usmeˇrnˇujı´cı´tok mysˇlenek. Vhodne´zdroje informacı´o jazyce Java na cˇeske´m internetu jsou naprˇı´klad seria´ly na serverech http://www.linuxsoft.cz, http://www.builder.cz, http: //www.programujte.com a http://www.algoritmy.net nebo porta´l http: //www.java.cz.

81 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

Na´meˇty na prˇı´klady mu˚zˇeme bra´t z rozsa´hle´sbı´rky projektu˚na http://www. greenfoot.org, inspiracı´mohou by´t i deskove´nebo arka´dove´hry, ale je nutne´ nepodcenit rozsah pra´ce.

9. lekce – Testy a TDD, BlueJ

Te´ma: Testy a test driven development. Cı´l: Pochopit vy´znam testova´nı´a vy´hody technologie unit testu˚. Technologie: BlueJ, Netbeans Metodika: test driven development, individua´lnı´pra´ce Pozna´mky: Podle pokrocˇilosti skupiny volı´me IDE BlueJ nebo Netbe- ans. Majı´-li studenti proble´my se samotny´m ko´dem, nebu- deme je zateˇzˇovat na´rocˇneˇjsˇı´m IDE.

Po procvicˇenı´za´kladnı´ch programovy´ch konstrukcı´mu˚zˇe prˇijı´t na rˇadu volba alternativnı´ch metodik vy´voje, mezi ktere´spada´i testy rˇı´zene´programova´nı´. V Javeˇ pouzˇı´vane´JUnit testy bohuzˇel nelze vytva´rˇet v prostrˇedı´Greenfoot, proto tentokra´t zvolı´me prostrˇedı´BlueJ, ktere´je mu blı´zke´.

Prˇı´kladB1 – Kalkulacˇka Na prˇilozˇene´m CD je uka´zkovy´program Kalkulacˇka. Pozor, soubor projektu obsahuje rˇesˇenı´ a sice trˇı´du KalkulackaR. Studentu˚m bychom meˇli nejprve da´t verzi bez te´to trˇı´dy, mu˚zˇeme smazat ale take´trˇı´du Kalkulacka. Domluvı´me se na jejı´m na´vrhu: vsˇechny jejı´metody budou abstraktnı´(mu˚zˇeme zmı´nit, zˇe se jedna´ o na´vrhovy´vzor /Utility class, tj. knihovnı´trˇı´da), pracovat bude s promeˇn- ny´mi double, jednotlive´metody volı´me tak, jak jsou vypsa´ny ve vzorove´m rˇesˇenı´, vcˇetneˇvyhazova´nı´vy´jimek. Ma´me-li ve skupineˇprˇiblizˇneˇstejneˇschopne´studenty, mu˚zˇeme na´vrh vytvorˇit do detailu˚spolecˇneˇ, jinak necha´me kazˇde´ho zvla´sˇt’at’zva´zˇı´ naprˇ. kdy bude z urcˇeny´ch metod prˇeda´vat vy´jimky. Studenti kazˇdy´sa´m za sebe implementujı´trˇı´du Kalkulacka. Ve spolecˇne´dis- kusi se projde ko´d KalkulackaTest a zdu˚raznı´se rizika tohoto prˇı´stupu (sˇpatneˇ navrzˇene´testy, chyba v testu, prˇı´lisˇna´rocˇna´konstrukce testu oproti trivia´lnı´funkci testovane´trˇı´dy, nutnost mı´t prˇedem pevnou specifikaci apod.) oproti vy´hoda´m (neu- sta´ly´prˇehled, ktera´komponenta je u´plna´a funkcˇnı´, jasne´zada´nı´, apod.). Za zmı´nku stojı´metoda equals ve trˇı´deˇ Pair, jejı´mzˇprˇedefinova´nı´m se zavedla rovnost in- stancı´te´to trˇı´dy na za´kladeˇobou atributu˚bez ohledu na porˇadı´.

82 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

10. a 11. lekce – Pole, kolekce, itera´tory

Te´ma: Pole, kolekce a itera´tory. Cı´l: Za´kladnı´prˇehled o jednotlivy´ch kolekcı´ch. V druhe´lekci jejich podrobne´pouzˇitı´. Technologie: BlueJ Metodika: snippety, individua´lnı´programova´nı´

V u´vodu hodiny probereme ve strucˇnosti pole (jednorozmeˇrna´). Studenti se snadno prˇesveˇdcˇı´, zˇe jejich pouzˇitı´je mimo nejjednodusˇsˇı´ch prˇı´padu˚poneˇkud kr- kolomne´a neprakticke´, naprˇ. pokud bychom jejich pomocı´meˇli implementovat da- tove´struktury jako je fronta nebo za´sobnı´k, obecneˇjake´koliv struktury, ktere´nemajı´ pevnou maxima´lnı´velikost, vyzˇadujı´dynamicke´prˇida´va´nı´nebo odebı´ra´nı´prvku˚, vyhleda´va´nı´podle klı´cˇe apod. Motivace pro pouzˇitı´kolekcı´by meˇla vzejı´t z nedostatku˚pole. Proto hned v u´vodu zacˇneme rozdeˇlenı´m kolekcı´a map tak, aby studenti prˇedevsˇı´m pochopili rozdı´l mezi rozhranı´m a konkre´tnı´implementacı´, cozˇvzhledem k obvykle´mu za´pisu, kdy promeˇnna´se deklaruje jako neˇktere´z rozhranı´, ale prˇirˇazenou instancı´je konkre´tnı´ implementace (List seznam = new ArrayList();), prˇina´sˇı´zmatky a znesnad- nˇuje orientaci. Kolekce (prˇesneˇji kontejnery – mapy totizˇnejsou potomci rozhranı´ Collection) deˇlı´me na:

Seznamy jsou trˇı´dy implementujı´cı´rozhranı´ List. Lze do nich vkla´dat tenty´zˇprvek vı´cekra´t a kazˇdy´prvek ma´jednoznacˇneˇurcˇene´mı´sto (porˇadı´). Implementace jsou: ArrayList je alternativa k beˇzˇne´mu poli, ovsˇem zde s dynamickou de´lkou. Platı´, zˇe tato implementace umı´pomeˇrneˇrychle prˇistupovat k prvku˚m, ale pomalu meˇnı´ porˇadı´ prvku˚ nebo prˇida´va´ prvky na zacˇa´tek nebo doprostrˇed pole. LinkedList je take´dynamicka´alternativa k beˇzˇne´mu poli, tentokra´t rychle zpracova´vajı´cı´ cˇaste´ zmeˇny ve strukturˇe (vkla´da´nı´ prvku˚ doprostrˇed apod.), ale pro zmeˇnu pomala´prˇi procha´zenı´svy´ch prvku˚. Mnozˇiny jsou trˇı´dy implementujı´cı´rozhranı´ Set. Jsou obdobou tohoto pojmu z ma- tematiky a proto kazˇdy´prvek smı´by´t v mnozˇineˇnejvy´sˇe jedenkra´t a jeho pozice nenı´urcˇena porˇadı´m vlozˇenı´. Mnozˇiny jsou vy´hodne´prˇi vyhleda´va´nı´ nebo prˇi rˇazenı´. Implementace jsou: HashSet je za´kladnı´ typ mnozˇiny. Negarantuje zˇa´dne´ pevneˇ dane´ porˇadı´ prvku˚. Slouzˇı´tedy naprˇ. k oveˇrˇenı´, zda je neˇjaky´prvek prˇı´tomen. TreeSet je implementace usporˇa´dane´ mnozˇiny. Vsˇechny vkla´dane´ prvky jsou okamzˇiteˇ rˇazeny do stromove´ struktury. Rˇ azenı´ urcˇuje metoda

83 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

compareTo objektu, pokud ovsˇem implementuje rozhranı´ Comparable. V opacˇne´m prˇı´padeˇje nutne´vytvorˇit specia´lnı´trˇı´du nazy´vanou kompa- ra´tor (implementuje rozhranı´ Comparator), ktera´bude urcˇovat porˇadı´ prvku˚mnozˇiny.Vy´hodou je, zˇe lze mı´t vı´ce ru˚zny´ch kompara´toru˚a tudı´zˇ ru˚zne´mnozˇiny rˇazene´ru˚zny´mi kriterii.

Mapy jsou trˇı´dy implementujı´cı´rozhranı´ Map. Od mnozˇin a seznamu˚se lisˇı´tı´m, zˇe kazˇdy´prvek ma´tzv. hash neboli klı´cˇovou hodnotu, pod kterou je ulozˇen. Je to tedy asociativnı´struktura (podobna´mnozˇineˇ), vkla´da´me klı´cˇa hodnotu. Obojı´ mohou by´t libovolne´ objekty (nikoliv primitivnı´ datove´ typy) naprˇ. String a Integer reprezentujı´cı´ jme´no a cˇı´slo mobilnı´ho telefonu. Nenı´ nutne´se omezovat jen na jeden typ, klı´cˇe (i hodnoty) jsou obecneˇ Object a proto mohou nara´z koexistovat v jednom kontejneru klı´cˇe ru˚zny´ch typu˚. Je-li do mapy vlozˇeno opakovaneˇpod stejny´m klı´cˇem, pu˚vodnı´hodnota se prˇepı´sˇe. Implementace jsou:

HashMap je za´kladnı´typ mapy, ktery´nijak nerˇadı´klı´cˇe. TreeMap je mapa, ktera´rˇadı´klı´cˇe v za´vislosti na kompara´toru nebo rˇazenı´ metodou compareTo.

Vsˇechny tyto kolekce postupneˇzkousˇı´me na jednoduchy´ch prˇı´kladech v BlueJ. Naprˇ.: seznam lidı´stojı´cı´ch ve fronteˇna u´rˇadu, tiskova´fronta, seznam veˇcı´na skladeˇ prodejny, objekt pocˇı´tacˇe majı´cı´ jako atribut seznam svy´ch komponent, . . . Pou- zˇı´va´me vy´pis do termina´lu prˇes System.out.println() a opakujeme pouzˇitı´ cyklu˚. Beˇhem procvicˇova´nı´studenty sezna´mı´me take´s pojmem itera´toru˚, acˇkoliv v Javeˇ nenı´jejich vy´znam takovy´jako v C++ a zprvu mohou studenti pouzˇı´vat u seznamu˚ metodu get(). Vsˇechna tato te´mata jsou pomeˇrneˇna´rocˇna´na pochopenı´a zapama- tova´nı´, proto te´ma probı´ra´me ve dvou lekcı´ch.

12. lekce – Souborovy´vstup/vy´stup

Te´ma: Vstup a vy´stup do souboru bina´rnı´ho i textove´ho. Cı´l: Zı´skat prˇehled, jak funguje za´pis a cˇtenı´v jazyce Java, jake´ trˇı´dy se na neˇm podı´lı´. Technologie: Greenfoot Metodika: Programming from scratch, rozsˇı´rˇenı´existujı´cı´ho projektu, pa´rove´programova´nı´.

Poslednı´kapitola teoreticke´prˇı´pravy patrˇı´pra´ci se soubory.Meˇli bychom projı´t se studenty rozdı´l mezi soubory bina´rnı´mi (podle Pascalovske´terminologie typovy´mi) a textovy´mi. Je dobre´ upozornit na to, zˇe textove´ soubory jsou prakticky vzato bina´rnı´mi soubory, ktere´ukla´dajı´pouze pole znaku˚, aby studenti nezı´skali mylnou

84 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ prˇedstavu, zˇe mezi teˇmito typy souboru˚ existuje rea´lny´ „fyzicky´“ rozdı´l, cozˇ se obcˇas sta´va´. Bina´rnı´soubory mu˚zˇeme demonstrovat na na´sledujı´cı´m prˇipravene´m prˇı´kladu.

Prˇı´kladG5 – SaveLoad

Prˇı´klad je prˇilozˇen na CD v hotove´podobeˇ. Umı´vykreslovat ve cˇtvercove´matrici polı´cˇka o ru˚zny´ch barva´ch a navı´c jeden typ objektu, ktery´ma´ikonu chodidla a ne- usta´le se prˇemı´st’uje. Sce´na se da´nacˇı´st a ulozˇit, vsˇe se deˇje kla´vesovy´mi zkratkami, ktere´jsou popsane´v JavaDocu trˇı´dy SaveLoadEr. Jde o velmi jednoduchou aplikaci, jejı´mzˇjediny´m smyslem je demonstrovat u´skalı´pra´ce se soubory. Studentu˚m bude nutne´vysveˇtlit vy´znam implementova´nı´rozhranı´ Serializable a pojem seriali- zace, zdu˚vodnit, procˇse nevola´prˇi obnovenı´serializovane´ho objektu konstruktor, a vysveˇtlit odstı´neˇnı´media pomocı´mezivrstvy streamu˚. Projektem na delsˇı´dobu pro pokrocˇile´studenty by byla vlastnı´implementace ukla´da´nı´obra´zku˚do forma´tu BMP, ktery´je bina´rnı´a prˇitom celkem jednoduchy´, alesponˇpro nejrozsˇı´rˇeneˇjsˇı´variantu neindexovany´ch 24bitovy´ch obra´zku˚bez kom- prese.

Nacˇı´ta´nı´a ukla´da´nı´textovy´ch souboru˚mu˚zˇeme procvicˇit zada´nı´m u´kolu v pa´- rove´m programova´nı´. Studenti vytvorˇı´program, ktery´bude opisovat rˇa´dky textu, ktery´uzˇivatel zada´va´z konzole do textove´ho souboru. Volitelneˇmohou text naprˇ. sˇifrovat posunutou abecedou nebo prˇeva´deˇt na velka´pı´smena apod. Nakonec rozsˇı´rˇı´ neˇktery´ z prˇedchozı´ch u´kolu˚ v Greenfootu o ukla´da´nı´ stavu sce´ny. Naprˇ. aktua´lnı´rozmı´steˇnı´zvı´rˇat v u´kolu Zoo nebo rozehranou hru v u´kolu FlyingAid. Mu˚zˇeme volit ukla´da´nı´jak bina´rnı´(ktere´bude jednodusˇsˇı´), tak do texto- ve´ho forma´tu (je nutne´ulozˇit atributy trˇı´d a jejich stav, spra´vneˇcˇı´st vstupnı´textovy´ soubor a vkla´dat podle ulozˇeny´ch parametru˚nove´objekty).

Dalsˇı´navrhovane´lekce

Prˇedchozı´vy´cˇet prˇı´prav by meˇl pokry´t lekce s podstatny´mi teoreticky´mi te´maty. Navrzˇena´metodika sice pocˇı´ta´s rychly´m probra´nı´m teorie a na´slednou pracı´na projektech k procvicˇenı´a detailnı´mu pochopenı´, ale je mozˇne´prokla´dat vy´uku ho- dinami s projekty drˇı´ve, podle potrˇeby. Podobneˇlze neˇktera´me´neˇza´sadnı´te´mata prˇesunout azˇdo cˇa´sti pra´ce na projektech. Na´vrhy te´mat teˇchto hodin jsou naprˇı´klad:

• U´ prava ko´du, pravidla cˇleneˇnı´a zarovna´va´nı´, spra´vne´na´zvy objektu˚, metod a promeˇnny´ch, komenta´rˇe.

• Detailneˇjsˇı´rozbor vy´znamu rozhranı´a vysveˇtlenı´vı´cena´sobne´deˇdicˇnosti.

• Metoda toString() a prˇetypova´va´nı´.

85 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´

• Metoda public static void main(String [ ] args) a spousˇteˇnı´ programu˚v Javeˇz prˇı´kazove´rˇa´dky.

• Kompilace v prˇı´kazove´rˇa´dce. JAR soubory – struktura, vytvorˇenı´.

• Java applety ve webovy´ch stra´nka´ch. (Netbeans)

• Swing a aplikace s GUI. (Netbeans)

• J2ME a Java aplikace pro mobilnı´telefony.

• Na´vrhove´vzory: Tova´rnı´trˇı´da/metoda, Singleton, Pra´zdny´objekt, Adapte´r, Pozorovatel (Observer), . . .

• Modernı´metodiky vy´voje SW: agilnı´metodiky, extre´mnı´programova´nı´.

• Callback, zası´la´nı´zpra´v o zmeˇna´ch. (Netbeans, GUI)

• Aktivnı´a pasivnı´cˇeka´nı´.

• Jazyk Python. Upravenı´/rozbor jednoduche´ho skriptu v jazyce Python.

• Prˇepis prˇimeˇrˇeneˇjednoduche´trˇı´dy v jazyce C++ do Javy nebo naopak. Za´- kladnı´rozdı´ly mezi Javou a C++.

• Cˇa´stecˇny´rozbor a prˇı´padneˇu´prava/doplneˇnı´nove´funkce v rozsa´hlejsˇı´m a zna´me´m open-source projektu v Javeˇ.

• Detailnı´pra´ce s Netbeans, verzova´nı´.

Te´mata projektu˚mohou by´t ru˚zna´v za´vislosti na zdatnosti studentu˚, pocˇı´naje naprˇı´klad hrami v prostrˇedı´Greenfoot. Studenti zameˇrˇenı´na programova´nı´by meˇli by´t schopni v prostrˇedı´Netbeans stvorˇit jednoduchou aplikaci v GUI, applet nebo mobilnı´aplikaci. Tyto u´koly mohou rˇesˇit bud’ ty´movy´m programova´nı´m (nejle´pe v ty´mech o dvou azˇtrˇech studentech) nebo individua´lneˇ. Pro vyucˇujı´cı´ho je vhodneˇjsˇı´ varianta ty´mova´, protozˇe spoustu proble´mu˚si vza´jemneˇvysveˇtlı´studenti a nebude tudı´zˇ tolik zatı´zˇen opravova´nı´m. Studenti by meˇli dostat take´ pru˚beˇzˇne´ termı´ny demonstrace stavu rˇesˇenı´u´kolu. Po naprogramova´nı´ma´na´sledovat prezentace prˇed ostatnı´mi, zhodnocenı´pouzˇity´ch postupu˚a vysveˇtlenı´prˇı´padny´ch problematicky´ch mı´st. Lze zadat i rozsa´hly´projekt (program na tvorbu kola´cˇovy´ch grafu˚), ktery´nejprve dekomponujeme na dı´lcˇı´cˇa´sti (widget6 kreslı´cı´kola´cˇovy´graf, uzˇivatelske´rozhra- nı´/menu, zpracova´nı´vstupnı´ch dat do vy´stupu v procentech, ukla´da´nı´grafu do souboru, nacˇı´ta´nı´vstupnı´ch dat), kazˇdou cˇa´st zada´me jedne´skupineˇstudentu˚. Spe- cifikujeme rozhranı´teˇchto komponent, zvolı´me metodiku vy´voje, v za´vislosti na nı´

6. widget – komponenta graficke´ho uzˇivatelske´ho rozhranı´, naprˇ. tlacˇı´tko, zasˇkrta´va´tko, menu apod.

86 5. PRˇ I´PRAVY PRO SEMINA´ Rˇ PROGRAMOVA´ NI´ naprˇ. prˇipravı´me testy nebo provizornı´trˇı´dy s definovany´m rozhranı´m, ale pra´zd- nou implementacı´(kvu˚li mozˇnosti kompilovat a testovat dı´lcˇı´cˇa´sti). Takova´pra´ce vyzˇaduje ale spolehlive´studenty, protozˇe jedna skupina, ktera´nedodrzˇı´domluveny´ termı´n, mu˚zˇe znemozˇnit pokracˇova´nı´ostatnı´m.

87

Kapitola 6 Shrnutı´

V te´to pra´ci jsem chteˇl prˇine´st strucˇny´prˇehled ru˚zny´ch dnes pouzˇı´vany´ch pro- gramovacı´ch jazyku˚a zhodnotit jejich vhodnost k vy´uce programova´nı´na strˇednı´ch sˇkola´ch. Dalsˇı´podstatnou cˇa´stı´meˇly by´t prˇı´pravy k vy´uce semina´rˇe z programova´nı´ na gymna´ziu, jelikozˇtakovy´semina´rˇjizˇtrˇi roky vedu a nebyl jsem spokojeny´s jeho na´plnı´, strukturou a pouzˇı´vany´mi technologiemi. Beˇhem studova´nı´literatury, ktera´ je bohuzˇel prakticky vesˇkera´zahranicˇnı´a z velke´cˇa´sti zameˇrˇena´na vysoke´sˇkoly, jsem se sezna´mil nejen s novy´mi vy´ukovy´mi prostrˇedı´mi, ktera´jsem doposud ne- znal, ale take´s novy´mi metodikami vy´uky a s hodnocenı´m (podlozˇeny´m vy´zkumy) postupu˚a na´zoru˚, ktere´bych sa´m teˇzˇko oveˇrˇoval. Vzhledem k prˇı´nosnosti a zajı´mavosti teˇchto za´veˇru˚ jsem se rozhodl rozsˇı´rˇit teoretickou cˇa´st pra´ce, ve ktere´je shrnuji, vza´jemneˇkonfrontuji a hodnotı´m jejich vyuzˇitelnost na cˇesky´ch strˇednı´ch sˇkola´ch. Doufa´m, zˇe tato cˇa´st bude pro cˇtena´rˇe z rˇad ucˇitelu˚stejneˇprˇı´nosna´, jako zmı´neˇne´prˇı´pravy k vy´uce, jejichzˇrozsah jsem byl nucen vzhledem k rozsahu pra´ce poneˇkud zkra´tit. V kapitole o graficke´m popisu algoritmu˚jsem se pokusil alesponˇcˇa´stecˇneˇforma- lizovat za´pis pomocı´vy´vojovy´ch diagramu˚v souladu s jejich normou, jelikozˇse lze setkat s velky´m mnozˇstvı´m pochybenı´v jejich pouzˇı´va´nı´a i mnozı´vyucˇujı´cı´neznajı´ pravidla, ktera´se s jejich pouzˇı´va´nı´m pojı´. Take´digramy Nassi-Shneidermann byly pro meˇnovinkou, jelikozˇv cˇeske´m prostrˇedı´jsem se s nimi dosud nesetkal. Prˇi hodnocenı´jazyku˚jsem si vsˇechny popisovane´odzkousˇel na volneˇdostup- ny´ch ko´dech, cozˇmi pomohlo jejich konceptu˚m le´pe porozumeˇt a udeˇlat si vlastnı´ intuitivnı´prˇedstavu o snadnosti za´pisu ko´du cˇloveˇkem, ktery´v dane´m jazyce pı´sˇe poprve´, jelikozˇv neˇktery´ch z nich jsem zatı´m nemeˇl prˇı´lezˇitost nic naprogramo- vat. Jako pokracˇova´nı´te´to pra´ce bych ra´d videˇl rˇesˇenou sbı´rku programa´torsky´ch u´loh v ru˚zny´ch jazycı´ch se strucˇny´m shrnutı´m syntakticky´ch pravidel jednotlivy´ch jazyku˚. To se bohuzˇel nevesˇlo do rozsahu me´pra´ce a proto jsem se omezil jen na prˇehledove´shrnutı´podstatny´ch vlastnostı´podle zvoleny´ch krite´riı´hodnocenı´. Do prˇehledu vy´vojovy´ch prostrˇedı´jsem zahrnul prostrˇedı´zna´ma´a v praxi pou- zˇı´vana´i didakticky orientovana´. Tato kapitola by nemeˇla cˇtena´rˇu˚m – kolegu˚m pe- dagogu˚m – slouzˇit jen jako strucˇny´vy´cˇet, ale take´shrnutı´hlavnı´ch rysu˚, vlastnostı´ a prˇı´padny´ch u´skalı´. Za´veˇrecˇna´cˇa´st prˇina´sˇı´vy´beˇr prˇı´prav na dvana´ct lekcı´semina´rˇe z programova´nı´. Zvolil jsem te´mata lekcı´, ktera´povazˇuji za za´sadnı´, abych nabı´dl uka´zku jak ucˇit na´rocˇneˇjsˇı´la´tku. Zvolena´metodika je vhodna´pro starsˇı´a pracoviteˇjsˇı´studenty, kterˇı´

89 6. SHRNUTI´ jevı´o programova´nı´za´jem, cozˇodpovı´da´stanovene´cı´love´skupineˇ: vysˇsˇı´mu stupni gymna´zia ve volitelne´m semina´rˇi. Soucˇa´stı´prˇı´prav jsou i uka´zkove´a rˇesˇenı´prˇı´klady a v za´veˇru seznam dalsˇı´ch mozˇny´ch te´mat hodin.

My´m prˇa´nı´m je, aby tato pra´ce neslouzˇila jako podklad pro zmeˇnu vy´uky pro- gramova´nı´jen mneˇsamotne´mu, ale aby se stala prˇı´nosem i pro kolegy, kterˇı´zvazˇujı´ zmeˇnu na svy´ch sˇkola´ch nebo hledajı´inspiraci pro sve´vlastnı´programovacı´semi- na´rˇe.

90 Literatura

[1] Angster, E.: Teaching Concepts in the Object-Oriented Field. In Object-Oriented Technology: ECOOP’98 Workshop Reader, Berlin: Springer, 1998, ISBN 978-3-540- 65460-5, s. 577–578.

[2] kolektiv autoru˚: Ra´mcovy´ vzdeˇla´vacı´ program pro gymna´zia. [online], 2007, naposledy navsˇtı´veno 2011. URL http://www.vuppraha.cz/wp-content/uploads/2009/12/ RVPG-2007-07_final.

[3] Beck, K.: Extre´mnı´programova´nı´. Grada Publishing, 2002, ISBN 80-247-0300-9, 160 s., autorizovany´ prˇeklad Pavla Makovce z 1. edice anglicke´ho origina´lu Extreme Programming Explained.

[4] Bennedsen et al.: Reflections on the Teaching of Programming: Methods and imple- mentation. Springer, 2008, ISBN 3330000242313, 259 s.

[5] Boha´cˇ, L.: Tvorba webove´ho interpretu jazyka Karel [online]. Diplomova´pra´ce, Ma- sarykova univerzita, Fakulta informatiky, 2011 [cit. 2012-05-07]. URL http://is.muni.cz/th/365368/fi_m/

[6] Diethelm, I.; Geiger, L.; Zu¨ndorf, A.: Teaching Modeling with Objects First.

[7] Drbal, P.: Co to je strukturovane´programova´nı´. Praha: Nova´vlna, 1992, ISBN 80- 900325-6-7, 56 s.

[8] Ehlert, A.; Schulte, C.: Empirical comparison of objects-first and objects-later. In Proceedings of the fifth international workshop on Computing education research workshop, ICER ’09, New York, NY, USA: ACM, 2009, ISBN 978-1-60558-615-1, s. 15–26.

[9] Habermann, A. N.: Critical Comments on the Pascal. In Acta Informatica, rocˇnı´k 3, Springer-Verlag, 1973, s. 47–57, dostupne´ prˇes elektronicke´zdroje SpringerLink.

[10] Hamilton, K.; Miles, R.: Learning UML 2.0. O’Reilly, 2006, ISBN 0-596-00982-8, 286 s.

[11] Jackson, D.; Miller, R.: A New Approach to Teaching Programming. 2. u´nor 2009.

91 6. SHRNUTI´

[12] Kak, A.: Teaching Programming. Dostupne´ online. Naposledy navsˇtı´veno 15. 1. 2012. URL https://engineering.purdue.edu/kak/ TeachingProgramming.pdf

[13] Mannila, L.; de Raadt, M.: An objective comparison of languages for teaching introductory programming. In Proceedings of the 6th Baltic Sea conference on Com- puting education research: Koli Calling 2006, Baltic Sea ’06, New York, NY, USA: ACM, 2006, s. 32–37.

[14]A´ sru´n Matthiasdottir: How to Teach Programming Languages to Novice Stu- dents? Lecturing or Not? In International Conference on Computer Systems and Technologies, Bulharsko, cˇerven 2006, s. 1–6.

[15] McIver, L.: Evaluating Languages and Environments for Novice Programmers. In 14th Workshop of the Psychology od Programming Interest Group, Brunel Univer- sity, cˇerven 2002, s. 100–110. URL http://ppig.org/papers/14th-mciver.pdf

[16] Milne, I.; Rowe, G.: Difficulties in Learning and Teaching Programming: Views of Students and Tutors. In Education and Information Technologies, rocˇnı´k 7, dı´l 1, Hingham, MA, USA: Kluwer Academic Publishers, brˇezen 2002, s. 55–66.

[17] Moritz, S. H.; Wei, F.; Parvez, S. M.; aj.: From objects-first to design-first with multimedia and intelligent tutoring. SIGCSE Bull., rocˇnı´k 37, 2005: s. 99–103, ISSN 0097-8418.

[18] Nassi, I.; Shneiderman, B.: Flowchart Techniques for Structured Programming. SIGPLAN Notices, rocˇnı´k 8, 1973, dostupne´online. Naposledy navsˇtı´veno 29. 12. 2011. URL http://www.cs.umd.edu/hcil/members/bshneiderman/nsd/ 1973.pdf

[19] Robins, A.; Rountree, J.; Rountree, N.: Learning and Teaching Programming: A Review and Discusion. In Computer Science Education, rocˇnı´k 13, dı´l 2, Swets and Zeitlinger, 2003, s. 137–172.

92