Logo ČVUT
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE
STUDIJNÍ PLÁNY
2019/2020

Programování v JAVA

Předmět není vypsán Nerozvrhuje se
Kód Zakončení Kredity Rozsah
B6B36PJV Z,ZK 6 2P+3C+2D
Přednášející:
Cvičící:
Předmět zajišťuje:
katedra počítačů
Anotace:

Předmět navazuje na základy algoritmizace a programování z prvního semestru a uvádí studenty do prostředí Java. Na prvních přednáškách budou studenti seznámeni se základní koncepcí Java a virtuálního stroje JVM, strukturou programu, způsobech kompilace do byte kódu a mechanismy jeho spouštění spolu s předáváním parametrů. V dalších přednáškách bude představena syntaxe a základní knihovní metody, práce se soubory a použití generických typů. Druhá polovina semestru bude věnována síťovému rozhraní, modelům vícevláknových aplikací, jejich implementaci a přehledu tvorby grafického uživatelského rozhraní. V závěru semestru bude představen koncept distribuovaného programování. Poslední přednáška je věnována přehledu kódovacích stylů, pokročilým nástrojům pro řízení překladu zdrojových souborů a nástrojům pro efektivní vývoj a ladění programů (logování, debugováníi a profilování).

Praktická cvičení jsou pak věnována osvojování praktických dovedností a znalostí Java formou řešení semestralních úloh, které budou odevzdávány průběžně prostřednictvím systému pro správu zdrojových souborů. Nejdříve budou studenti seznámení s vývojovým prostředím, možnostmi kompilace a spouštěním programu. Následně budou řešit dílčí úlohy směřující ke komplexní aplikaci pro řešení úlohy hledání nejkratší cesty v grafu Dijkstrovým algoritmem. První větší úlohou je implementace prioritní fronty lineárním vyhledáváním a haldou, na které si studenti vyzkoušejí principy abstrakce a polymorphismu a dále také profilování. Prioritní frontu pak zobecní využitím generických datových typů pro různé číselné typy ohodnocení hran grafu v úloze hledání nejkratší cesty v tomto grafu. Další úloha rozšíří aplikaci o načítání parametrů z XML a efektivní načítání vstupního grafu. Poté bude následovat praktické vyzkoušení síťového rozhraní a rozšíření aplikace o síťovou komunikaci se serverem poskytujícím parametry pro vygenerování grafu a kontrolu nalezené nejkratší cesty. Následně bude aplikace rozšířena o více vláknový model (boss-worker), který umožní během výpočtu nejkratší cesty v grafu průběžně komunikovat se serverem pro odevzdání a kontrolu řešení. Tohoto modelu bude následně využito pro grafickou nadstavbu vizualizace průběhu řešení. Závěrečné cvičení bude věnováno praktickému vyzkoušení technologie vzdáleneho volání funkcí (RMI).

Studenti budou v průběhu semestru získávat body za odevzdané úlohy. Bodové hodnocení úlohy se skládá z bodů za správnost a efektivitu kódu, dále pak z bodů zohledňující kvalitu zdrojových kódů, jejich čitelnost a znovu použitelnost.

Požadavky:

Základy algoritmizace a programování. Základní povědomí o XML a DOM - je pokryto v předmětu Základy webových aplikací v prvním semestru.

Osnova přednášek:

1. Koncepce, historie jazyka a jeho vývoj - Java Virtual Machine, instalace vývojového prostředí, překlad a interpretace, syntaxe, primitiva a základní konstrukty.

2. Objektově orientované programování v programovacím jazyku Java, třídy, rozhraní a objekty; struktura programu, kompilace a spuštění, předávání parametrů, aplikace a aplety.

3. Řízení běhu programu, základní datové typy, proměnné, operátory, výjimky.

4. Pole, řetězce, základní datové kolekce a iterátory.

5. Principy objektového přístupu, třídy a dědičnost, řízení přístupu, hierarchie tříd, dědění, kompozice, abstraktní třídy, polymorfismus.

6. Datové kolekce a generické datové typy.

7. Práce se soubory, datové proudy, modely I/O operací.

8. Síťování - způsoby a modely komunikace, síťová API v programovacím jazyku Java, protokoly UDP, TCP a HTTP. Aplikace klient / server.

9. Paralelní programování - vlákna a modely vícevláknových aplikací, synchronizační primitiva.

10. Příklad vícevláknové aplikace a komunikace mezi vlákny; rozhraní JNI.

11. Grafické uživatelské rozhraní, události a listenery, Java 2D/3D, knihovny AWT a Swing.

12. Ovládání uživatelských rozhraní, multimediální rozhraní.

13. Distribuované programování - serializace, propojování modulů (middleware) a vzdálené volání funkcí, rozhraní Java RMI a další, např. ICE.

14. Kódovací konvence a styly, nástroje pro řízení překladu, logování; rezerva.

Osnova cvičení:

1. Vývojové prostředí a odevzdávání úloh.

2. Překlad a spuštění programu, dokumentace (javadoc), základy Java kódovací konvence a stylu.

3. Nástroje pro sestavení programu (ant, maven), základní dostupné třídy v Java Class Library.

4. Proměnné, výrazy, předávání parametrů programu a spuštění programu.

5. Řízení běhu programu, řetězce, cykly, prioritní fronta

(úloha: implementance prioritní fronty linearním vyhledáváním a haldou).

6. Zadání semestrální práce (hledání cesty v grafu);

(datové struktury pro uložení grafu, načítání bude řešeno doadnou funkcí).

7. Třídy, objekty a dědičnost; struktura programu, incializace objektů a správa paměti

(úloha: abstrakce prioritní fronty, návrh a implementace programu pro hledání cesty v grafu).

8. Polymorphismus (debugging, profiling)

(úloha s příkladem - Dijkstra s naivním vyhledáváním vs prioritní fronta).

9. Generické datové typy

(úloha: zobecnění úlohy hledání cesty v grafu, ohodnocení hran int/double).

10. Načítání a ukládání souborů

(úloha: načítání XML a načítání textového souboru - graf pro Dijkstra algoritmus; úvod do XML v Java).

11. Síťování

(úloha: klient pro získání zadání pro generování grafu pro Dijkstra algoritmus.

12. Vícevláknové aplikace

(úloha: boss-worker model v programu Dijkstra s událostmi posílanými mezi vlákny).

13. Grafické uživatelské rozhraní

(úloha: rozšíření předchozí úlohy o grafické rozhraní a vizualizaci průběhu výpočtu).

14. Serializace a distribuované programování (Java RMI).

Cíle studia:

Cílem předmětu je rozvinutí programovacích dovedností studentů a rozšíření jejich znalostí o programovacích jazycích o základy a specifika programovacího jazyka Java. Studenti si prohloubí znalosti o způsobech programování a seznámí se s Java programovým rozhraním pro síťové a internetové služby, způsoby paralelního programování, využitím datových kolekcí, zpracováním výjimek, tvorbou grafického uživatelského rozhraní a událostmi řízeným programováním.

Studijní materiály:

Doporučená literatura:

1. Herout, P.: Učebnice jazyka Java, Kopp, Č. Budějovice, 2000, s. 350.

2. Herout, P.: Učebnice jazyka Java II, Kopp, Č. Budějovice, 2001, s. 350.

3. Eckel, B.: Thinking in Java, Prentice Hall, 2006, s. 1150.

Poznámka:
Další informace:
Pro tento předmět se rozvrh nepřipravuje
Předmět je součástí následujících studijních plánů:
Platnost dat k 11. 8. 2020
Aktualizace výše uvedených informací naleznete na adrese http://bilakniha.cvut.cz/cs/predmet3129706.html