- * přednáškové slides: {{courses:a0b36pr2:lectures:01:36pr2-01_programovaci_styly.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:01:programovaci_styly_polymorfizmus.zip|}} * * poznámky: ===== Testík ===== * Jaké jsou základní vlastnosti procedurálního přístupu? * Jaké nebezpečí múže zapříčinit nevhodné použití nelokální proměnné? * Definujte rozdíl mezi proměnnou třídy a instanční proměnnou. * Popište roli haldy a zásobníku při rekurzivním volání metod. * Jaké základní vlastnosti objektového přístupu jste poznali? * Které datové struktury jsou referencované? * Jak spolu souvisí dědičnost a kompozice? * Chcete napsat program, který bude podporovat učení slovíček v angličtině, jejich zkoušení (v náhodném pořadí, pokud zodpoví zkoušený správně, již nebude na totéž slovíčko dotázán). Jaké třídy bude obsahovat? Jak vyřešit nejednoznačnost překladu, např. cesta může být přeložena jako way, trip, journey, ... Pokud si nejste jisti, mrkněte na [[:courses:A0B36PR2:lectures:01:minitest|minitest]]. ====== 2 - Objektově orientovaný přístup, polymorfismus ====== **Polymorfizmus** * Abstraktní třída, * řešení polymorfizmu * ''interface'', rozhraní, vícenásobné dědění * interface jako typ proměnné, * řešení polymorfismu rozhraním, * rozhraní a dědičnost, * typ interface, * atributy rozhraní; * Porovnání možností abstraktní třídy a ''interface'' * // Reverzní inženýrství v NetBeans// * Výčtové typy, ''enum'' -- * přednáškové slides: {{courses:a0b36pr2:lectures:02:36pr2-02_tridyiii.pdf|}} * řešené projekty: {{courses:a0b36pr2:lectures:02:pr2-02-tridyiii.zip|}} * poznámky: * ===== Testík ===== * Co je to polymorfizmus? * Jaké jsou způsoby realizace polymorfizmu v Javě? * Jak lze realizovat vícenásobnou dědičnost v Javě? * Popište strukturu abstraktní třídy. * Porovnejte vlastnosi abstraktní třídy a rozhraní. * K čemu slouží proměnné typu rozhraní? * Které abstraktní metody musí být při dědění implemetovány? * Navrhněte hierarchii tříd pro evidenci komponent počítačů. U každého dílu sledujte cenu, datu nákupu, výrobce a záruční dobu. Umožněte výpis informací o produktu a zbývající dobu záruky. U pamětí navíc sledujte kapacitu a u procesorů počty jader a frekvenci. Co by bylo typické pro další komponenty? Pokud si nejste jisti, mrkněte na [[vysledky minitestu|výsledky minitestu]]. ====== 3 Výjimky ====== * Výjimky, * pojem výjimky, * princip mechanismu * zpracování výjimek, * úplné zpracování výjimek; * vyhození výjimky, * propagace výjimek, * generování vlastní výjimky, * hierarchie výjimek, * kontrolované a nekontrolované výjimky -- * Slides z přednášek:{{courses:a0b36pr2:lectures:03:36pr2-03_vyjimky.pdf|}} * řešené projekty: {{courses:a0b36pr2:lectures:03:pr2-03-vyjimky.zip|}} * * poznámky: ===== Testík ===== * Co je to výjimka? * Jaká je sémantika bloku ''try''? * Jaká je role bloku ''catch'' a je-li jich více, jak spolu souvisí? * Co se stane, když není výjimka zachycena? * Jaký je základní rozdíl mezi kontrolovanou a nekontrolovanou výjimkou? * Uveďte strukturu tříd výjimek, počínaje ''Exception''. * Je vlastní výjimka kontrolovanou či nekontrolovanou výjimkou? * Provádíte kritickou sekci, v níž se mohou vyskytnout následující výjimky: FileNotFoundException, NumberFormatException, DynamicCastException, EOFException, IOException a NullPointerException. Ve výpisu chcete vypsat pro každý typ specifickou hlášku, v jakém pořadí budete uvádět odchytávání pomocí catch? * V jaké části (try, catch, nebo finally) uzavřete všechny otevřené soubory? Jak poznáte, že se podařilo soubor otevřít před pokusem o jeho uzavření? ====== 4 Kolekce ====== * Třída java.util.Arrays * Kontejnery, kolekce, * rozhraní * třídy * algoritmy * Třída java.util.Collections * seznamy, * množiny, * mapy, * Genericita * Komparátory * Iterátory * Hešování, hashCode a equals -- * přednášky:{{courses:a0b36pr2:lectures:04:36pr2-04_kolekce.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:06:pr2-06-kolekce.zip|}} * * poznámky: ===== Testík ===== * Co jsou to generické typy a generické metody? * Jaké znáte rozhraní kolekcí? * Jaké znáte standardní třídy, které implentují rozhraní kolekcí? * Co je typickou vlastností metod rozhrani ''Map'' * Kterou třídu rozhraní byste použili pro implementaci fronty a zásobníku? * Pro jaké implenetace je nejhodnější rozhrani ''Set'' a ''List''? * Jakým způsobem lze "indexovat" prvky v rozhraní ''Set''? * A troška spojování: ^Typ kolekce^ spojení souvisejících ^ příklad použití ^ |HashSet| |evidence reklamací, častý výpis nevyřízených reklamací| |LinkedList| |implementuji zobrazení volaného podle telefonního čísla| |TreeSet| |zpracovávám seznamy preventivních návštěv zaměstnanců u lékaře a potřebuji je vypisovat podle poslední doby kontroly.| |HashMap| |potřebuji zjistit seznam různých slov v souboru a počty jejich opakování| |ArrayList| |prioritní fronta zákazníků (priorita reprezentována číslem typu int), velmi časté vkládání privilegovaných zákazníků a výběr prvního na řadě.| Pokud si nejste jisti, mrkněte na [[vysledky minitestu|výsledky minitestu]]. ====== 5 Grafické uživatelské rozhraní ====== * GUI v Javě * zásady návrhu * typy komunikace, * knihovny AWT a SWING, * princip GUI, základní součásti * komponenty, * kontejnery, * správci rozmístění, * obsluha událostí * Grafika v Javě * grafický kontext * metoda ''paint'' * Aplety * Architektura webové aplikace * principy komunikace internetu * Aplety, princip, struktura * Aplet versus aplikace, * vlastnosti, použití, * způsob aktivace, * životní cyklus apletu, * Základní příkazy jazyka HTML * Předávání parametrů do apletu, * Omezení apletu, zmírnění omezení -- * přednáškové slides: {{courses:a0b36pr2:lectures:05:36pr2-05_gui.pdf|}} ,{{courses:a0b36pr2:lectures:05:36pr2-05_aplety.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:03:pr2-03-gui.zip|}} * * poznámky: ===== Testík ===== * Co je aplet a jaké má vlastnosti? * Jaké jsou výhody a nevýhody apletů? * Jakou má aplet roli ve webových aplikacích, jak se používá? * Kdo a kdy spustí aplet? * Jak zajistit to, abychom nemuseli implementovat všechny metody ''JApplet''? * Jakým způsobem mohu předávat data do apletu? * Kdy je možné použít aplet jako aplikaci? * Jaké jsou omezení pro aplet ve srovnání s aplikací? ===== Testík ===== * Co je účelem kontejneru? * Vysvětlete funkci metody paint()? * Co rozumíte grafickým kontextem? * Jakou funkci mají správci rozvržení a jaké znáte? * Porovnejte knihovny AWT a Swing. * Proč by se měly prvky GUI znepřístupňovat? * Lze přesně umístit grafický prvek v okně? * Jak bude vypadat komponenta:\\ JLabel jl = new JLabel(); jl.setText("x2"); * Pospojujte buňky z levého sloupečku s buňkami z pravého sloupečku: ^ Komponenta ^ spojení ^ typické použití ^ |JLabel| |vstup jednoduchého textu, např. jména uživatele| |JRadioButton| |jednoduchá editace možností muž/žena, dokončené vzdělání/nedokončené vzdělání| |JCheckBox| |víceřádkový editor textu| |JTree| |výběr kreslícího nástroje z možností tužka, štětec, razítko - vše zobrazeno ikonkami| |JTable| |výběr velikosti trička, možnostmi jsou S, M, L, XL a XXL| |JButton| |zobrazení popisu vstupního pole bez možnosti editace| |JTextField| |umožňuje propojení prvků v rámci skupiny, např. JRadioButtony či JToggleButony| |JTextArea| |vložení více komponent do jednoho bloku s vlastním správcem rozvržení| |JPanel| |tlačítko pro uložení souboru| |JScrollPane| |výpis struktury adresáře| |ButtonGroup| |vložení komponenty, u které se dá očekávat, že se nevejde do přiděleného prostoru a bude nutné zobrazit rolovátka| |JToggleButton| |zobrazení seznamu zaměstnanců spolu s jejich platem| Pokud si nejste jisti, mrkněte na [[vysledky minitestu|výsledky minitestu]]. ====== 6 - Události ====== * Koncepce zpracování událostí * událost jako objekt, * zpracování události, * zdroj události, * posluchač události, * model šíření události, * Implementace modelu zpracování události; * Zpracování vlastní události, * Více zdrojů a posluchačů, * Rozlišení zdrojů * Rozlišení typem * Rozlišení popisem * Dva posluchači téhož zdroje * Vnitřní třídy * Anonymní třídy -- * Podklady z přednášek:{{courses:a0b36pr2:lectures:06:36pr2-06_udalosti.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:04:pr2-04-udalosti.zip|}} * * poznámky: ===== Testík ===== * Charakterizujte pojem události. * Popište roli posluchače při zpracování události. * Co je podmínkou pro to, aby třída byla posluchačem? * Co musí udělat producent, aby měl své posluchače? * Co je třeba udělat proto, aby na jednu událost mohly reagovat dva posluchači? * Jak mohu odlišit dva producenty? * Co je to vnitřní třída? * Kde lze s výhodou použít anonymní třídu? * Pospojujte buňky z levého a pravého sloupečku: ^obsluha události^ spojení souvisejících ^typické použití^ |produkující třída implementuje příslušné rozhraní| |jednoduchá obsluha, která se nikde v programu neopakuje| |anonymní třída| |obsluha ActionPerformed pro pět různých tlačítek na jednom formuláři| |obslužná třída definovaná ve stejném souboru jako třída produkující události| |jednoduchá kreslící plocha s obsluhou všech událostí myši| |obslužná třída definovaná public ve svém souboru| |obsluha tlačítka refresh umístěném na různých formulářích, vždy stejný algoritmus| ====== 7 - Vlákna ====== * Procesy * Program versus proces * Přepínání kontextu * Priority, synchronizace * Stavy procesu * Proces versus vlákno * Vláknový model * Komunikace mezi vlákny * Výhody vláken * Problémy při komunikaci mezi procesy/vlákny * Uváznutí procesů * Vlákna v Javě * oblasti použití * třída Thread * rozhraní Runnable * Řízené ukončení činnosti vláken * Čekání na ukončení činnosti * Stavy vláken * Priority vláken * Synchronizace činnosti vláken, monitor * Synchronizace metody * Synchronizace příkazu * Komunikace mezi vlákny -- * přednáškové slides {{courses:a0b36pr2:lectures:07:36pr2-07_vlakna.pdf|}}, {{courses:a0b36pr2:lectures:07:36pr2-07_vlakna_uvod.pdf|}} * řešené projekty: {{courses:a0b36pr2:lectures:08:pr2-08-vlakna.zip|}} * * poznámky: ===== Testík ===== * Definujte pojem vlákna a jak souvisí s procesy? * Jak se realizuje "paralelní" činnost vláken? * Co rozumíte přepínáním kontextu? * V jakém stavu může být vlákno resp. proces? * Jak mohu implementovat vlákna v Javě. * Jak funguje součinnost vláken vzhledem k prioritě, jak mohu prioritu změnit, a jak i "potlačit"? * Co rozumíte synchronizací vláken a jak ji zajistíte? * Uvažujme následující kód: class Vlakno implements Runnable { static int stati = 1; int in = 1; public synchronized void run() { System.out.printf("1: in: %5d, stati:%5d\n", in++, stati++); if (in < 3) { try { wait(); } catch (InterruptedException ex) { } } else { notify(); } System.out.printf("2: in: %5d, stati:%5d\n", in++, stati++); } } public class Main { public static void main(String[] args) { Vlakno v1 = new Vlakno(); Vlakno v2 = new Vlakno(); Thread t1 = new Thread(v1); Thread t2 = new Thread(v1); Thread t3 = new Thread(v2); Thread t4 = new Thread(v2); t1.start(); t2.start(); t3.start(); t4.start(); System.out.println("Identifikace: " + t1.getId() + t2.getId() + t3.getId() + t4.getId()); } } Vyberte pravdivé výroky(pečlivě rozlišujte **musí x může x nesmí**), svá tvrzení zdůvodněte: - Program nepůjde přeložit, protože v jednom souboru nesmí být dvě třídy na nejvyšší úrovni. - Metoda main spustí celkem 4 nezávislá vlákna. - Ve výpisu by mohl být řádek ''Identifikace: 891011'' - První řádek výpisu musí začínat slovem Identifikace. - První řádek výpisu může začínat slovem Identifikace. - První řádek výpisu nesmí začínat slovem Identifikace. - Poslední řádek výpisu musí začínat slovem Identifikace. - Poslední řádek výpisu může začínat slovem Identifikace. - Poslední řádek výpisu nesmí začínat slovem Identifikace. - Klíčové slovo **synchronized** v deklaraci metody run třídy Vlakno: - Nemusí být, je tam implicitně ze třídy Thread. - Musí být, protože mění chování této metody. - Nesmí být, protože rozhraní Runnable má metodu run bez tohoto slůvka. - Nastaví zámek na objekt typu Vlakno a tak - do metody run nemohou současně vstoupit vlákna t1 a t2, ani t3 a t4, ale t1 a t3 mohou, - do metody run může vstoupit jediné vlákno z t1, t2, t3, t4. - Vlákna t1 a t3 sdílí proměnnou stati. - Vlákna t2 a t3 sdílí proměnnou stati. - Vlákna t2 a t3 nesdílí proměnnou stati. - Vlákna t1 a t2 nesdílí proměnnou stati. - Vlákna t1 a t3 sdílí proměnnou in. - Vlákna t2 a t3 sdílí proměnnou in. - Vlákna t2 a t3 nesdílí proměnnou in. - Vlákna t1 a t2 nesdílí proměnnou in. - Příkaz wait() uvolní zámek na objektu a do metody run bude moci vstoupit další vlákno. - První vlákno se zablokuje ostatní a po wait() se již nerozeběhne a program nikdy neskončí. - Poslední výpis proměnné **stati** bude ukazovat hodnotu: - 1 - 2 - 3 - 4 - 6 - 8 - Poslední výpis proměnné **in** bude ukazovat hodnotu: - 1 - 2 - 3 - 4 - 6 - 8 - Ve výpisu by se mohl objevit řádek ''Identifikace: 1232'' - Ve výpisu by se mohl objevit řádek ''Identifikace: 1 2 3 2'' - Ve výpisu by se mohl objevit řádek ''2: in: 3, stati: 4'' - Ve výpisu by se mohl objevit řádek ''2: in: 3, stati: 2'' ====== 8 - Základy jazyka C ====== * Charakteristika jazyka C * Porovnání JAVA vs „C“ * Co je stejné nebo podobné * Co C nemá * Co C nemá nebo je jinak * Proměnné, konstanty, přiřazení * Blok, místa pro deklaraci proměnných * Vstup, výstup * Řízení běhu programu (''if, for, while, switch'') * Operátory * Matematické funkce (knihovny) -- * Předáškové slides: {{courses:a0b36pr2:lectures:08:36pr2-08_jazykc1.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:09:pr2-09-c01.zip|}} * Další zdroj:{{courses:a0b36pr2:lectures:08:cforjavaprogrammers.ppt|}} * Další zdroj:{{courses:a0b36pr2:lectures:08:c_for_java_programmers_1_.pdf|}} * poznámky: ===== Testík ===== * Popište strukturu programu v C. * Charakterizujte jazyk C a vymezte oblast použití * Jak se realizuje metoda ''println()'' v C? * Vysvětlete pojem globální proměnné v C! * Jak probíhá překlad programu v C a je záviský na platformě? * Co je to makro? * Jak se zavádějí konstanty v C? * Co je to funkční prototyp a k čemu je? ====== 9 - C: Operátory a příkazy ====== * Komparativní výklad jazyka C k jazyku Java, * Překlad * syntaxe jazyka, * makra, * podmíněný překlad, * Funkce a procedury * Konstrukce metod a funkcí * Vstupní parametry funkce * Návratová hodnota funkce * Iterace a rekurze * Výstup údajů na obrazovku * Vstup údajů z klávesnice -- * přednáška: {{courses:a0b36pr2:lectures:09:36pr2-09_jazykc2.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:10:pr2-10-c02.zip|}} * * poznámky: ===== Testík ===== * Jak se ošetřuje korektnost vstupních dat v C? * Uveďte číselné datové typy v posloupnosti možnosti přiřazení! * K čemu slouží p¨říkaz ''go to'' a vymezte oblast jeho použití! * Najděte obdobu ''struct'' v Jave! * Jak byste realizovali strukturu ''union'' v Javě? * Je možné v C psát rekurziní funkce? * K čemu je klauzule ''extern''? * Porovnejte příkaz ''switch'' v obou jazycích! ====== 10 - C: Pointery a pole ====== * Pole * Vícerozměrné pole * Pole a funkce (předávání parametrů, návratová hodnota) * String * Pointery * Pole a pointery * Dynamicky alokované pole * Pointer na pointer -- * Přednášky: {{courses:a0b36pr2:lectures:10:36pr2-10_jazykc3.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:11:pr2-11-c03.zip|}} * poznámky: ===== Testík ===== * Jak spolu souvisi pointry a pole v C? * Je možné v C volat odkazem? * Je možné předat s polem i jeho délku? * Jaké operace lze provádět s pointry? * Vyvětlete pojem operace reference a dereference! * Vysvětlete sémentiky výrazu ''**p_pole''! * Vysvětlete možnost pointru na funkce! ====== 11 - C: Programy v C, struktury ====== * Struktura rozsáhlých programů * Globální proměnné * Hlavičkové soubory * Platnost proměnných, ''extern'' * Struktury * ''Struct'' * ''Union'' * Struktura v unionu * Ukazatel na funkce * Pole ukazatelů na funkce -- * přednáška: {{courses:a0b36pr2:lectures:11:36pr2-11_jazykc4.pdf|}} * řešené projekty:{{courses:a0b36pr2:lectures:12:pr2-12-c04.zip|}} * * poznámky: ===== Testík ===== * Vysvětlete význam podmíněného překladu pro setavení! * Co obsahují hlavičkové soubory? * Vysvětlete strukturu výrazu ''koreny->re1'' * Uveďte různé typy alokace paměti v C! * Uveďte různé způsoby definice vícerozměrného pole a porovnejte s Javou! * Lze v C použít funkci před její definicí? * Co je výsledkem překladu programu v C? * Uveďte základní rozdíl v použití jazyka C na rozdíl od Javy! * Kterému jazyku byste dal přednost při realizaci grafického ovladače a proč? ====== 13 Expertní přednáška ====== * Expertní přednáška: *{{courses:a0b36pr2:lectures:13:pr2_140515_clean.ppt|Trendy ve vývoji programování}} - J. Šedivý