1
Výuka objektového programování
Problémy výuky objektového programování lze shrnout do následujících bodů: • Na začátku studijního plánu se vyučují základy (strukturovaného) programování pomocí jazyka Java, jako projev moderního trendu, který smetl Pascal do propadliště dějin. objektové programování se zde vykládá jen jako jakýsi nezbytný doplněk ksyntaxi tohoto jazyka - tedy nedostatečně • Později vprůběhu studia se studenti seznamují vpředmětech softwarového inženýrství srůznými metodikami tvorby softwaru vjejichž diagramech se operuje spojmy OOP. • Čisté OOP vprogramování nebo vdatabázových systémech je odloženo až na konec magisterského studia ve volitelném předmětu Objektové programování. Zde mají studenti první a poslední možnost si sáhnout na nehybridní objektový programovací jazyk a také poznat, jak vypadá objektový databázový systém bez relačních tabulek a primárních klíčů. • OOP je demonstrováno na nevhodných příkladech. Argument, že se jedná jen o demonstraci dědičnosti, přestínění metod apod nemůže obstát, neboť student není schopen posoudit vhodnost příkladu a tento si často zapamatuje nejen jako ukazku syntaktického zápisu ale i jako příklad použití v praxi. Výsledkem je stav, kdy sice studenti píší „objektovéÿprogramy v objektovém prostředí používající objektové knihovny, nicméně při bližším pohledu nacházíme vesměs jen objekty, jejichž atributy a parametry zpráv jsou pouze skalární hodnoty typu znak, číslo, grafická souřadnice. Studenti rovněž oprávněně poukazují na nenávaznost předmětů na sebe a také na překrývání témat, kdy je jedna a ta samá látka (např. pojmy třída, instance a vazby mezi objekty) diskutována vrůzných předmětech opakovaně, ale vždy jiným způsobem ve specifickém kontextu.
2
Výuka databázových systémů
Problematika výuky databázových systémů (dále jen DBS) je dnes často zjednodušována na otázku: Který DBS studenty naučit? Vzhledem k obrovskému množství produktů i nekomerčních projektů je celkem snadné si některý z těchto vybrat, důkladně prozkoumat, ovládnout a se studenty se pak o tuto zkušenost podělit. Je ale otázkou, zda se nejprve pustit do implementačních podrobností velkého komerčního relačního databázového systému, kterým je vnašich podmínkách Oracle, a teprve vnásledujícím databázovém předmětu poodhalit studentům, že existují i jiné varianty relačních databází a nedejbože i jiných než relačních. Na některých českých vysokých školách se setkáváme i stím, že se spomocí Oracle snaží vyučovat i síťový a objektový datový model.
1
Přestavme si pedagoga, který se rozhodl naučit studenty databázově myslet pomocí komerčního mainstreamového relačního DBS. Tento DBS bude jistě vykazovat vysokou míru odlišnosti vůči obecným standardům, dokumentace k němu bude hůře dostupná, stejně tak jako samotný software, nemluvě o zdrojových kódech. Mezi další vlastnosti takového DBS bude pravděpodobně také patřit vysoká míra nepřehlednosti knihoven funkcí a specifik jazka SQL, v nichž se neznalý student začne pomalu ale jistě ztrácet. Výuka databázových systémů má však i další, dle našeho soudu rovněž vážný, nedostatek. Tím je opomíjení čistých objektových DBS. Někteří pedagogové mají ve zvyku objektové DBS nezmiňovat vůbec, nebo jen jako nevýkonné zastaralé, v dnešní době nepoužitelné mastodonty. A to i přesto, že si tyto systémy ve světě už dávno vydobyly své nezastupitelné postavení. V nejhorším případě takový pedagog studenta ošálí tvrzením, že relační DBS už dávno relačně-objektové jsou, takže vlastně objektových DBS není třeba. Pokud studentům neukážeme objektový datový model v praxi na pořádné objektové databázi a budeme pracovat jen s relačními databázemi, byť jakkoli doplněnými o hybridní přístupy, můžeme u studentů vyvolat dojem, že tabulky a relační vztahy mezi nimi jsou jediný prakticky možný způsob návrhu a implementace rozsáhlých dat v informačních systémech. Bohužel pravidla pro návrh struktury relačních tabulek se značně liší od zásad objektového modelování. Takoví studenti potom na objektové modelování (a tak i na UML a na metody softwarového inženýrství) nahlížejí jen jako na prakticky nepoužitelný mezikrok mezi zadáním a implementací, který je třeba se naučit jen kvůli zkoušce zdaného předmětu a nepochopí, že takové modely mohou přímo pokračovat do implementace.
3
Náš návrh
Základní myšlenky navrhované struktury jsou následující: • V počátku studia vyučovat teoretické základy na specializovaných výukových nástrojích. • Jednotlivá programovací paradigmata učit na „čistýchÿjazycích. • Objektové programování učit již od začátku jako samostatný předmět. Celý program staví na dvou základních pilířích – algoritmizaci a objektovém modelování – a je rozdělen do několika logických úrovní. Cílem prvních dvou úrovní je získat solidní teoretické základy a pochopení meritu věci. Cílem druhých dvou je pak získání praktických znalostí. V dnešní době již není třeba diskutovat o tom, že objektově orientovaný přístup je důležitou součástí výuky informatiky. Jedná se o problematiku, která přesahuje rámec jednoho vyučovaného předmětu. Dohromady se objektový přístup týká více než poloviny všech informatických předmětů vyučovaných na našich fakultách.
2
Odborníci jako např. E. Yourdon, B. Meyer a další se shodují v názoru, že čím dříve se začne s výukou OOP, tím lépe. Máme sami velmi dobré zkušenosti s výukou čistého objektově orientovaného programování (Smalltalk od roku 1991) a nerelačních objektových databází (Gemstone od roku 2002), které potvrzují tyto názory. OOP je samo o sobě syntézou disciplin, které kladou přiměřeně vysoké nároky na abstraktní myšlení a jako takové představují pro výuku velmi vhodnou intelektuální disciplinu. Nevidíme žádný důvod pro otálení a předkládání OOP jako vyvrcholení řetězu výuky, který začínal klasickými předměty. Podle našich vlastních zkušeností výuku OOP s nadšením přijímají především lepší studenti a to nejen proto, že se jedná o moderní trend, ale také proto, že nástroje OOP, jsou-li vhodně vybrány, jsou srozumitelné, efektivní a stimulují abstrakci. Varianta, kdy se informatika zahájí výukou OOP je sice netradiční, ale má dva z pedagogického hlediska významné přínosy: 1. Nedochází zde k efektu, kdy jsou nejprve vyloženy tradiční metody a postupy tvorby software, od kterých se však později musí student oprostit, když je konečně zahájen kurz OOP. 2. Zahájení výuky informatiky pomocí soudobé v praxi používané technologie (tedy prostředků OOP) a učení dalších přístupů později je v souladu se záměrem členit výuku na úvodní praktickou bakalářskou etapu a následnou více teoretickou a jdoucí do hloubky inženýrskou etapu studia. Tento záměr odpovídá systémům studia na většině univerzit Evropské unie a v USA. Právě skutečnost, že zde hovoříme o bakalářském stupni studia, považujeme za nejdůležitější. Je třeba si totiž uvědomit, že značná část studentů nebude pokračovat do magisterského stupně studia a půjde rovnou do praxe. Proto jim potřebujeme podat ucelenou sadu použitelných znalostí. Výuka historie výpočetní techniky, byť jakkoliv fundovaná, je bakalářům absolventům skoro kničemu. Takoví studenti potřebují jiné znalosti, které samozřejmě přesahují středoškolskou úroveň, ale zároveň je nezajímá všechno ztoho, co je určeno pro posluchače magisterského stupně. Nehovoříme tu ale o podávání kojenecké stravy studentům po lžičkách. Zahájení celého curricula objektovým paradigmatem není jednodušší. Jestliže se totiž má učit OOP jako první metodologie tvorby software, potom také musí připravovat půdu pro pozdější výuku dalších souvisejících disciplin, jako například funkcionální či logické programování, databázová technologie, imperativní jazyky, projektování informačních systémů apod. Tato podmínka je ale dobře splnitelná a v praxi jsou známy příklady, kdy předchozí kurz OOP měl blahodárný vliv například na budoucí programátory v C či Cobolu, neboť seznámení se s abstraktnějším a logičtějším programovacím paradigmatem následně vede k čistšímu a efektivnějšímu využívání klasičtějších prostředků. Do značné míry je tato diskuse opakováním historie výuky výpočetní techniky. Před cca 20 lety totiž proběhla malá revoluce ve výuce programování. Dříve se zahajovalo počítačovým hardwarem a strojovými jazyky a vyšší programovací jazyky byly vyučovány až potom. Mnozí znás si ještě pamatují změnu ve 3
prospěch strukturovaného programování ve vyšším programovacím jazyku Pascal jako prvního programovacího paradigmata. Domníváme se, že diskutovaný přechod na objektové paradigma zde má svoji analogii. Každé samostatné paradigma tvorby softwaru by mělo mít svůj nástroj, na kterém by se dané paradigma co nejlépe prakticky procvičilo. Proto je na OOP nejvhodnější používat nějaký čistý objektový jazyk, pro relační databáze používat nějaký systém respektující standard SQL, pro objektové databáze používat objektovou databázi atd. Snaha najít jeden univerzální programovací jazyk a jeden univerzální databázový systém je mylná a vkombinaci s(viz. první poznámka a UML) používáním různých modelovacích prostředků vrůzných souvislostech téměř šílená. Po zvládnutí základů programování, programovacích paradigmat a konkrétních programovacích jazyků je nutné se věnovat pokročilým programátorským tématům, jako: • návrhové vzory, normalizace • refactoring a testování (jak jednotkové, tak testování větších celků) • návrh uživatelského rozhraní, jeho testování • víceprocesové/vícevláknové aplikace • bezpečnost IT (technická, organizační) • různé metody řízení SW projektu Hlavní těžiště těchto témat není ani tak v encyklopedických znalostech jako ve zkušenostech. Proto by hlavní část výuky měla spočívat v řešení praktických úloh pod vedením zkušeného učitele.
4
Objektové modelování
Předmět Objektové modelování je spolu sAlgoritmizací jedním ze dvou pilířů nového studijního plánu. Podobu tohoto předmětu jsme formulovali na základě dosavadních zkušeností svýukou OOP (vyz výše) To, co skutečně potřebujeme, je umět navrhovat datové objekty pro aplikace. To znamená tvořit vlastní třídy, instance a kolekce objektů, jejich atributy jsou další objekty, a které vytvářejí pomocí vzájemných vazeb skládání a dědění netriviální soustavu objektů modelující nějakou praktickou úlohu. Takový program nemusí být ani animovaný ani jinak grafický a přesto je na rozdíl od jiných důsledně objektový. Vtomto předmětu, jehož detailní osnovy připravujeme, plánujeme vyučovat následující okruhy: 1. Zahájit přednáškami o teoretických základech programování a vyložit lambda kalkul. Ten potřebujeme proto, že jde o ideální prostředek pro pozdější výklad chování objektů. 4
2. Pokračovat základy OOP. Zde bude vyložen pojem třída, instance a kolekce objektů. Dále dědičnost objektů, skládání objektů a polymorfismus objektů. 3. Následuje objektový model výpočtu. Zde budou diskutovány metody a zprávy. Dříve vyložený lambda výraz se zde objeví nejen vpodobě kódu objektových metod, ale také jako parametr zpráv i jako samostatný objekt. 4. Po důkladném procvičení na příkladech budeme pokračovat výkladem vybraných technik návrhu jako je objektová normalizace a aplikace vybraných návrhových vzorů. 5. Samostatnou část budou také tvořit základy datových manipulací sobjekty a s kolekcemi objektů. Kromě dotazování vduchu databázových systémů počítáme i sproblematikou změny struktury schématu a migrace objektů mezi různými verzemi. 6. Vprůběhu výuky se bude pracovat smodelovacím softwarem, ve kterém bude možné sobjekty přímo pracovat, a CASE nástrojem, což prakticky znamená, že se zde formou praktických příkladů studenti seznámí se základynotace diagramu tříd UML. 7. Předmět bude zakončen semestrálním projektem Jak vyplývá snávrhu, tak smyslem tohoto předmětu není výuka OOP pro účely psaní programů hýřících různými efekty. Tento předmět je úvodním předmětem celého curricula a jeho smyslem je postavit základ, na který může být navazováno následujícím způsobem: 1. Vnavazujícím předmětu Základy projektování už nebude třeba složitě vysvětlovat modelovací pojmy OOP. Bude tedy více prostoru pro vlastní nástroje jako například diagramy UML a nebo specifikace OCL. Protože se studenti vúvodním předmětu prakticky seznámili sdatovým modelováním a naučili se používat zjednodušený diagram tříd UML, tak předpokládáme i větší motivaci. 2. Vnavazujícím předmětu Základy databázových systémů bude možné rovnou začít výkladem všech dnes používaných tří datových modelů síťového, relačního a objektového. Každý ztěchto datových modelů může být svýhodou vykládán jako konkrétní implementační varianta toho, sčím se už dříve studenti seznámili a tím pádem se lépe soustředit na konkrétní přednosti a nevýhody konkrétních datových modelů. 3. Vnavazujícím předmětu Datové struktury a algoritmy bude možné na dříve prakticky podanou látku pokračovat důkladným výkladem programovacích technik (např. řazení, třídění a vyhledávání), návrhových vzorů atd.
5