Domů > Odborné články > Gymnaziální vzdělávání > UML a Flowchart ve výuce programování na gymnáziu
Odborný článek

UML a Flowchart ve výuce programování na gymnáziu

30. 9. 2011 Gymnaziální vzdělávání
Autor
RNDr. Michal Černý Ph.D.

Anotace

Podle RVP pro gymnázia se mají žáci seznámit se základy programování a algoritmizace. V následujícím článku se pokusíme ukázat, jakým způsobem k tomu užít grafického modelování procesů pomocí UML či Flowchart.

Základní otázkou, kterou si při výuce jakéhokoli bloku znalostí musíme položit, je, které mají být výstupní parametry výuky a jakým způsobem budou pro žáky užitečné. Stojíme-li před problémem, zda chceme ze žáků vychovat alespoň programátory začátečníky, dovolím si odpovědět negativně. Jistě se hodí, aby měli představu o tom, jak se deklarují funkce, jak se pracuje s proměnnými, cykly nebo jak vypadá základní podmínka. Jde ale až o znalosti v podstatě druhotné. Dle mého soudu je cenné, pokud se žáci naučí hledat ve světě či matematických problémech algoritmy.

Pokud dokáží přehlédnout problém a vytvořit systematický postup, jak jej řešit, pak vlastní implementace problému do programu napsaného v určitém paradigmatu není příliš obtížná a ani důležitá, neboť ji většina žáků nebude pravidelně používat. Akcent by tak měl být kladen především na rozvoj jejich myšlení, který právě s rozvojem algoritmizace těsně souvisí.

Pro tento účel se velice dobře hodí dvě významné metody grafického zápisu algoritmu. Jde jednak o Flowchart, tedy diagram, kterým lze krok za krokem popsat algoritmus v imperativním jazyce. Pokud nemáme za cíl vytvářet objektový návrh řešení problému, mohli bychom si vystačit s ním. Osobně se ale domnívám, že přinejmenším zmínka o objektově orientovaném návrhu programu by padnout měla, neboť jde o zcela dominantní způsob programování. A pro něj se ukazuje jako velice vhodný nástroj UML.

V následujícím článku se tedy ještě letmo zmíníme o významu algoritmizace pro rozvoj myšlení žáků a matematiku, podrobněji popíšeme Flowchart a UML a představíme několik programů, které umožňují jejich tvorbu na počítači. 

Proč učit algoritmizaci

Základní otázkou je, jaký význam má výuka algoritmizace, co je v ní tím bonusem, který obohatí žáka, dá mu větší intelektuální schopnosti, probudí v něm kreativitu nebo mu předá něco užitečného do života. Pro to, abychom mohli vhodně odpovědět, je třeba se krátce podívat na to, kde všude se algoritmy kolem nás vyskytují. Jistě zde nevyčerpáme všechny možnosti, ale pokusíme se vyzdvihnout alespoň několik zajímavých oblastí.

Obrovské množství vzorců chování, které je možné algoritmizovat, nacházíme v živé přírodě. Dokonce v informatice existuje celá disciplína, která se těmito procesy zabývá. Konkrétních příkladů může být obrovské množství; funkce rychlosti srdečního tepu ve vztahu k aktuální zátěži, řízení toku v grafu při dopravě materiálu v mraveništi nebo třeba popis závislostí činností hormonálních žláz v různých situacích. Jde dokonce často o modely, které je možné graficky a obecně (bez konkrétních hodnot) relativně dobře znázornit. Je tedy možné snadno propojit tuto část výuky například s biologií.

Další zajímavou oblastí jsou různé situace, na které se vztahují fyzikální zákony. Jednoduše je možné modelovat srážky částic, pohybový stav tělesa při průchodu polem atp. Pěkným příkladem, jak zde rozvinout algoritmizaci, může být užití aplikace Step pro simulaci nějakého děje. Pak provedeme dekompozici jednotlivých prvků a graficky popíšeme, co se musí kdy s danými objekty (kupříkladu pružinou, koulí či kladkou) stát. Jen jednotlivé přírodní zákony nasazujeme na objekty, které se mohou vzájemně ovlivňovat.

Nejjednodušší a asi také prakticky nejpoužívanější oblastí algoritmizace jsou matematické problémy. V zásadě zcela triviálně lze se žáky procházet jednotlivé naučené postupy a ukazovat, jak by se zpracovaly čistě algoritmicky. Řada pedagogů dokonce přímo postupy ve výuce matematiky vypisuje mocí Flowchart a žáci si tak snadno uvědomují, jak jsou jednotlivé postupy zcela automatické. Samozřejmě lze jít dále než jen k výpisu dělitelů daného čísla, řešení kvadratické rovince a podobných úkolů. Zde je možné se žáky klidně i nějakou konkrétní implementaci řešení projít.

Ve výčtu možných řešení bychom mohli pokračovat dále – do jisté míry je možné algoritmizovat lidské chování v určitých situacích, kuchařské recepty nebo jednoduché otázky z rozhodovacího managementu. Záleží jen na fantazii a času pedagoga, kam až může s algoritmizací zajít. Zde se dostáváme k základní otázce, proč vlastně algoritmizaci vyučovat. Jde o metodu, která umožní žákům dekomponovat a analyzovat problémy a jevy, které jsou všude kolem nich, a racionálně k nim přistupovat.

Lidský mozek neustále algoritmizuje, jde o vlastní činnost, která nám umožňuje strukturovaně myslet. Žákům dá nejen přehled o tom, co vše může do nějakého procesu vstupovat, ale také v nich rozvine schopnost kreativně vnášet nové prvky do řešení různých problémů, a to pokud možno co nejjednodušším způsobem. Jde tedy o rozvoj kreativity, analytického myšlení i celkový rozvoj intelektuálních schopností žáka. A právě v tom, že se naučí dívat se na jevy či problémy algoritmicky, spatřuji hlavní význam výuky základů programování na střední škole. 

UML a Flowchart

V této části článku si stručně ukážeme dvě základní metody grafického záznamu programu a ukážeme, v kterých situacích který z nich efektivně využít.

UML (Unified Modeling Language) je v softwarovém inženýrství grafický jazyk pro vizualizaci, specifikaci, navrhování a tvorbu dokumentace programových systémů. Nabízí standardní způsob zápisu jak návrhů systému včetně konceptuálních prvků, jako jsou business procesy a systémové funkce, tak konkrétních prvků, jako jsou příkazy programovacího jazyka, databázová schémata a znovupoužitelné programové komponenty. Podporuje objektově orientovaný přístup k analýze, návrhu a popisu programových systémů, ale neobsahuje způsob, jak se má používat [1].

Kishorekumar 62. UML Diagramy. [cit. 2011-09-26]. Dostupný pod licencí  Creative Commons Attribution-Share Alike 3.0 Unported na WWW: http://en.wikipedia.org/wiki/File:UML_Diagrams.jpg

V prvé řadě jde tedy o nástroj sloužící pro návrh objektově orientovaného programu. Pro žáky může být zajímavé také to, že pomocí UML je možné modelovat například i ekonomické procesy. V zásadě existují v programování tři základní způsoby, jak je využít. V prvním jde čistě o analýzu problému – analytik zhodnotí situaci, naznačí, co se bude muset v daných objektech odehrávat, a praktickou implementaci nechá na programátorovi. Druhou variantou je přípravná programátorská práce, kdy analytik nejen navrhne model, ale provede také popis modelu tříd, řekne, co má obsahovat které rozhraní a které vlastnosti mají mít jednotlivé objekty. Třetí variantou je pak přímá implementace kódu v UML návrhu.

V posledních patnácti letech zažívá UML poměrně velký boom a je ideální nejen pro obecnou výuku algoritmizace, ale také při vysvětlování toho, jak funguje objektově orientované programování. Lze pomocí něj jednoduše popsat nejen základní strukturu, ale také interakce mezi objekty nebo chování jednotlivých elementů, což je zvláště pro větší projekty velice užitečné.

Flowchart neboli vývojový diagram, je druh diagramu, který slouží ke grafickému znázornění jednotlivých kroků algoritmu nebo popisu obecného procesu (opět je možné jej využít i pro ekonomické procesy). Vývojový diagram používá pro znázornění jednotlivých kroků algoritmu symboly, které jsou navzájem propojeny orientovanými šipkami. Standardně se používá následujících symbolů:

  • Úsečka (spojnice) či množina navazujících úseček končící šipkou — určuje směr zpracování algoritmu. Standardně není třeba používat šipky, pokud je tok programu doprava nebo dolů.

  • Obdélník s popisem — definuje dílčí krok zpracování algoritmu.
  • Kosočtverec — větvení postupu v algoritmu v závislosti na splnění podmínky.
  • Obdélník se zaoblenými rohy — počátek nebo ukončení algoritmu.
  • Kruh — spojka, je možné s ním uzavřít určitou skupinu kroků. 
Jedna z možností, jak může vypadat Flowchart
[cit. 2011-09-26]. Dostupný pod licencí Public domain na WWW:
http://en.wikipedia.org/wiki/File:FlowchartExample.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dle potřeby jsou pak připojovány také další značky, které umožňují například oddělení subprogramu či procedury, naznačení vstupu či výstupu a mnohé další. Je dobré si se žáky na počátku jasně nadefinovat „abecedu“ a tu pak v dalším výkladu dodržovat. Vývojové diagramy se velice dobře hodí pro zápis lineárního neobjektového algoritmu. Často je možné jej zvolit jako doplněk k UML pro jednotlivé uzly grafu. 

Programy pro tvorbu grafického návrhu algoritmů

V této poslední části se pokusíme upozornit na několik málo zajímavých aplikací, které umožňují tvorbu grafického návrhu programu a jsou zdarma. To je důležité nejen pro školu, ale také pro žáky, kteří je pak mohou zkoušet také doma.

Bouml

Silným a kvalitním nástrojem, který umožňuje dobře ukázat, v čem spočívá síla UML, je Bouml, který podporuje možnost převodu diagramu do jazyků Java, Idl či C++ a to oboustranný. Je tedy možné jednoduše analyzovat pedagogem připravené programy, stejně jako se žáky navrhovat vlastní. Jde tedy o poměrně kvalitní řešení, které je možné používat i v různých programátorských seminářích. Užitečné také je, že jde o program, který je k dispozici téměř pro všechny rozšířené operační systémy.

Dia

Pokud nám jde jen o grafický návrh, je možné sáhnout po některém z nástrojů na tvorbu diagramů. Zřejmě nejznámějším takovým nástrojem pro Linux je Dia, který je určený pro tvorbu obecných diagramů. Snadno s ním ale vytvoříte jak Flowchart, ke kterému má přednastavené tvary, tak také ULM návrh. Na rozdíl od Bouml je jednodušší a pro většinu žáků také zřejmě snáze ovladatelný. Podobně lze využít také například Draw z balíčku LibreOffice či OpenOffice.org.

Dia
Autor díla: Michal Černý

Flowchart.com

Flowcharty je možné jednoduše tvořit také online a to například pomocí Flowchart.com, který nabízí jednoduché ovládání, online přístup, ale také řadu dalších funkcí – přidávání zdrojového kódu k jednotlivým částem, spolupráci více uživatelů, vkládání obrázků pro větší přehlednost, možnost práce na více listech atp. Nechybí ani možnost exportu projektu do png či pdf. 

Závěrem

Ve výčtu dalších programů bychom mohli pokračovat velice dlouho. Z komerčních lze uvést Visio od Microsoftu. Pokud jde o bezplatné aplikace, tak pro UML je možné zmínit populární  Umbrello, Graphor a mnohé další. Flowchart je možné navrhnout téměř v libovolném nástroji na tvorbu diagramů, ať již jde o Xmind nebo v Javě napsaný eYd, který nabízí velké množství funkcí pro řadu druhů diagramů a skvěle se hodí na tvorbu ilustrací na nejrůznější informatická témata. Výběr je vskutku bohatý.

eYd
Autor díla: Michal Černý

Ať již k výuce programování a algoritmizace přistoupíte jakkoli – obecně nebo výukou konkrétního jazyka, je dobré mít na paměti, že nástroje pro grafický návrh programů jsou pro žáky názorné, jednoduché a přehledné. V žádném případě se v nich nebudou ztrácet a mohou posloužit jako dobrý odrazový můstek pro další rozvoj jejich schopností. Z osobní zkušenosti mohu říci, že jejich užívání má ještě jeden významný pozitivní prvek – vede k rozvaze nad problémem, strukturovanému psaní a efektivnímu řešení problémů. Odpadá tak klasické školní napsání programu jen tak, aby fungoval, bez koncepce a rozmyslu. Již jen proto jejich využití ve výuce mohu jen doporučit.

Literatura a použité zdroje

[1] – Unified Modeling Language. [cit. 2011-09-30]. Dostupný z WWW: [http://cs.wikipedia.org/wiki/UML].

Licence

Všechny články jsou publikovány pod licencí Creative Commons BY-NC-ND.

Autor
RNDr. Michal Černý Ph.D.

Hodnocení od recenzenta

Tým RVP.CZ
30. 9. 2011
Za tento článek, respektive nosnou myšlenku v něm obsaženou, jeho autorovi moc děkuji. Studoval jsem v letech, kdy jsme mohli vidět počítače (ty sálové) jen na obrázku. Jeden takový měla fakulta uložený v bednách ve sklepě. A přesto, že jsme si na něj nikdy nesáhli, učili jsme se řešit algoritmy v rámci výuky matematiky a to právě na vývojových diagramech. Tehdy jsem to považoval za zbytečnost! Jak se mi ale tato dovednost hodila po mnoha letech v okamžiku, kdy jsem vlastnil svůj první osmibitový počítač a mohl bez problémů řešit algoritmy a programovat. Nejprve Basic, Pascal... Algoritmy zůstávají, mění se jen syntaxe a architektura jazyka.

Hodnocení od uživatelů

Ivan Ryant
3. 10. 2011, 18:49
UML je dost dobrý jazyk na konceptuální modelování, ale diagramy UML, které slouží k návrhu algoritmu (tj. activity diagrams, state transition diagrams) jsou pro výuku programování stejně nevhodné jako vývojové diagramy (flowcharts dříve také nazývané bloková schemata). Viz dopis Edsgera Dijkstry "Go To Statement Considered Harmful" z března 1968 (vyšel v Communications ACM 11 / 3, http://www.cs.u…D215.PDF ) nebo článek Eda Posta "Real Programmers Don't Use Pascal", viz http://www.cs.b…ory.html - obojí doporučuji přečíst, zvláště ten druhý mě před asi třiceti lety dost pobavil. Nehodlám tady znovu rozpoutávat války za strukturované programování, myslel jsem, že je už dávno dobojováno.
Strukturované programy lze docela dobře zaznamenat pomocí myšlenkových map (viz články "7 tipů, jak použít myšlenkové mapy" a "Myšlenkové mapy v edukačním procesu" na tomto portálu). Klasické jsou Jacksonovy strukturogramy (použité např. v dříve populárním Soukupově nástroji SGP) nebo např. kopenogramy autorů Kofránka, Pecinovského a Nováka použité např. v "Dálkovém kursu číslicové techniky", který v 80. letech vydávala 602. ZO Svazarmu. Ještě lepší než pouhá kreslítka na diagramy jsou jistě vývojová prostředí, kde diagramy můžete rovnou spustit (Karel, Baltík, Scratch, MS Kodu apod.) - viz článek "MS Kodu ve výuce" Terezy Humpolcové zde na portálu. Mně se osvědčila didaktická hra "Záhada slibového pahorku", kterou jsem podrobněji popsal v diskusi k článku "MS Kodu ve výuce". Před tím jsem naprogramoval podobnou hru "Zachraňte Karla!" (viz http://members.…lovi.htm ).
Další zásadní námitka proti vývojovým diagramům (a také proti strukturogramům a stavovým diagramům všeho druhu) je, že vývojovým diagramem neznázorníte rekurzi, redukujete algoritmus na pouhý konečný automat a žáci (studenti) tak nemohou pochopit vyjadřovací sílu algoritmického myšlení - podrobnosti jsem uvedl v článku "Nahraďte algoritmizaci systémovým přístupem!" zde na portálu. Ukázky algoritmizace úloh z počtů (např. trojčlenka, kořeny kvadratické rovnice, Pythagorova věta, největší společný dělitel, numerická integrace obdélníkovou nebo lichoběžníkovou metodou, řešení rovnic metodou sečen atd.) - to všechno jsou pěkné názorné ukázky pro laiky, ale algoritmické myšlení je především myšlením matematických důkazů. A pokud jde o střední školu, tak právě to je jediné téma z matematiky (počty nechme stranou), kde algoritmizace pomůže studentům pochopit podstatu věci (stejně jako Alanu Turingovi umožnila v roce 1937 převést problém nerozhodnutelnosti na daleko názornější problém nezastavení Turingova stroje).

Váš komentář

Pro vložení komentáře je nutné se nejprve přihlásit.

Článek není zařazen do žádného seriálu.

Kolekce

Článek je zařazen v těchto kolekcích:

Článek pro obor:

Informatika a informační a komunikační technologie