Rudolf Pecinovský: Klasická výuka programování je škodlivá (3) – Jak učit objektově orientované programování

úterý 26. října 2004 ·

V minulých dvou článcích jsem se snažil vysvětlit, proč je klasický způsob výuky nevhodný. Nyní se pokusím ukázat, čeho všeho se dá s dětmi dosáhnout při výuce OOP.

Na toto téma jsem již řadu článků publikoval (mnohé na tomto serveru) a nechci se zbytečně opakovat. Pro ty, které by zajímaly některé z článků, na něž bude tento článek navazovat, uvedu nejprve pár odkazů.

Většinu zásad, které bychom se měli ve výuce programování snažit dodržovat, jsem shrnul na tomto serveru v článku Zásady správné výuky programování . Později jsem o těchto zásadách aplikovaných na výuku OOP hovořil na konferenci Objekty 2003 (viz [1]) a na Žilinské didaktické konferenci (viz [2]). Vlastní postup výkladu pak najdete v knize Myslíme objektově v jazyku Java 5.0 [3], která nedávno vyšla a podle níž učím jak děti v kroužcích, tak profesionální programátory ve svých kurzech. Starší verze výkladu najdete i na tomto serveru (viz jejich  přehled ). Jeho PDF verzi včetně kapitol, které na České škole nevyšly, si můžete stáhnou na adrese http://vyuka.pecinovsky.cz/.

Nebudu zde proto opakovat, co již bylo napsáno. Spíš bych se vám pokusil přiblížit úlohy, které děti v jednotlivých etapách výuky řeší, abyste je mohli porovnat s úlohami, které lze pro děti připravit při výuce strukturovaného programování. Předvedené úlohy jsou k dispozici ke stažení na adrese http://knihy.pecinovsky.cz/mojj50 (stránka věnovaná zmíněné publikaci, na které jsou doplňující komentáře i doprovodné příklady).

Seznámení s třídami a objekty

V prvních hodinách se děti dozvědí, co je to objekttřída, a seznámí se s termínem instance třídy. Vysvětlíme si, že objektový program je popis tříd, jejich instancí a zpráv, které si mezi sebou tyto instance posílají. Děti si otevřou projekt se třemi třídami představující grafické objekty a dalšími třemi pomocnými třídami. Zkouší si interaktivně vytvářet instance předdefinovaných tříd a posílat jim i jejich třídám zprávy. Experimentální fáze trvá v dětských kroužcích dva až tři týdny.


Naprogramování vlastní třídy

Po této experimentální fázi se začnou učit, jak definovat vlastní třídy, konstruktory, které vytvářejí jejich instance, metody (ekvivalenty procedur a funkcí), jež jsou popisem reakcí tříd a instancí na zaslané zprávy, a atributy, v nichž si třídy a instance uchovávají informace o svém stavu.

Tato část končí tvorbou hry, při níž mají děti za úkol navrhnout třídu UFO, jejíž instance představují UFO v simulovaném vesmíru. Dostanou seznam 16 zpráv, na které musí UFO umět reagovat, a reakce na tyto zprávy samy naprogramují. Vzhledem k tomu, že 12 z těchto reakcí lze naprogramovat pomocí jediného příkazu, 3 pomocí dvou příkazů a jednu pomocí šesti příkazů, zvládají jejich naprogramování poměrně snadno i ti nejmladší.

Šest příkazů vyžaduje i definice konstruktoru, takže ani ta nebývá zdrojem závažnějších problémů. Výsledkem je program, v kterém se vytvořená UFO pohybují zrychleně v závislosti na velikosti tahu jejich motorů, která se nastavuje stisky kurzorových kláves. Hráči pak mají za úkol dovést UFO ze startovací rampy do některého z připravených hangárů. Chtějí‑li řešení zrychlit, mohou rozpohybovat několik UFO najednou a přepínat mezi jejich ovládáním.

Všimněte si, že děti zde bez problémů vytvářejí program řízený událostmi, v němž se nezávisle na sobě pohybuje několik objektů, které jsou schopny reagovat na příkazy z klávesnice. Nepotřebují k tomu ani podmíněné příkazy, ani cykly.

Polymorfizmus

Po vytvoření třídy UFO s žáky ještě chvíli prohlubujeme jejich znalosti tvorby tříd a pak přejdeme k dalšímu tématu, kterým je polymorfismus. Zde si ukážeme, že jeden a ten samý objekt může měnit svůj typ v závislosti na okamžité potřebě, a převedeme si několik jednoduchých příkladů, jak toho lze využít.

Pokračujeme výkladem dědičnosti typů a ukazujeme si, jak může být v některých případech užitečné, když má parametr více typů současně. Vše si pak demonstrujeme na dvou příkladech.

Nejprve děti seznámím s návrhovým vzorem Stav a ukážu jim, jak je možno s jeho pomocí definovat šipky pohybující se ve čtyřech či osmi směrech (připomínám, že děti stále neznají příkaz if).

Pak dostanou samostatnou úlohu, v níž mají za úkol definovat třídu Kabina, jejíž instance (kabiny) budou schopny se pohybovat po uzavřených linkách od stanice ke stanici. U linky si vždy zjistí, jaká je na ní doporučená rychlost a doporučená doba čekání ve stanici, a po požadovaném počkání vyrazí. Když kabina dojede zadanou rychlostí do další stanice, zeptá se jí, která stanice po ní následuje, a vyrazí k ní. A tak stále pořád dokola.

Děti tak vytvoří další událostmi řízený program, v němž se nezávisle na sobě pohybuje několik objektů. Stále jsme přitom ještě nezavedli podmíněný příkaz ani cykly a nevyužíváme ani rekurzi.

Veškerá „inteligence“ programu je postavena na využití základních objektových konstrukcí a událostmi řízeného programování. Všechny „procedury“ a „funkce“, které děti vytvářejí, obsahují několik málo příkazů. Konkrétně třída pohybujících se kabin vyžaduje definici konstruktoru tvořeného osmi příkazy, tří metod tvořených jediným příkazem, dvou metod tvořených dvěma příkazy a dvou tvořených čtyřmi příkazy. Nic, co by nemohly zvládnout i ty nejmladší děti z kroužku.

Příště předvedu příklady, které s dětmi řešíme poté, co se konečně seznámí s podmíněnými příkazy a cykly.


Literatura

[1] Pecinovský R.: Výuka objektově orientovaného programování žáků základních a středních škol. Objekty 2003 – Sborník příspěvků osmého ročníku konference. Ostrava 2003. ISBN 80-248-0274-0. PDF verzi článku si můžete stáhnout na adrese http://vyuka.pecinovsky.cz/Vyuka_OOP_zaku_zakladnich_a_strednich_skol.pdf  

[2] Pecinovský R.: Proč a jak učit OOP žáky základních a středních škol. Žilinská didaktická konferencia, červen 2004. PDF verzi článku si můžete stáhnout na adrese http://vyuka.pecinovsky.cz/Proc_a_jak_ucit_OOP_na_ZS_a_SS.pdf  

[3] Pecinovský R.: Myslíme objektově v jazyku Java 5.0, Grada, 2004. ISBN 80‑247‑0941‑4. 


Autor pracuje jako EDU-expert ve společnosti Amaio Technologies, Inc.



Rudolf Pecinovský

0 komentářů:

Články dle data



Učitelské listy

Nabídka práce

Česká škola - portál pro ZŠ a SŠ

Česká škola poskytuje svým čtenářům diskusní prostor k vyjádření názorů na školskou problematiku. Tyto příspěvky se nemusí shodovat se stanoviskem redakce České školy a jsou uveřejňovány jako podnět k dalším diskusím.

Obsah článků nemusí vyjadřovat stanovisko redakce nebo vydavatele Albatros Media, a.s.


Všechna práva vyhrazena.

Tento server dodržuje právní předpisy
o ochraně osobních údajů.

ISSN 1213-6018




Licence Creative Commons

Obsah podléhá licenci Creative Commons Uveďte autora-Neužívejte dílo komerčně-Nezasahujte do díla 3.0 Česká republika, pokud není uvedeno jinak nebo nejde-li o tiskové zprávy.



WebArchiv - archiv českého webu



Tyto webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Informace o tom, jak tyto webové stránky používáte, jsou sdíleny se společností Google. Používáním těchto webových stránek souhlasíte s použitím souborů cookie.