Úloha číslo 8

Vstup a výstup v Javě

Petr Adámek

Abstract

Cílem této úlohy je naučit se pracovat se základními třídami pro vstup a výstup.


Table of Contents

Co je potřeba znát
Zadání
Několik rad
Odevzdání úlohy
Metodické pokyny
Pokyny pro opravování

Co je potřeba znát

Pro vyřešení této úlohy je třeba

  • Rozumět principům objektového programování v jazyce Java.

  • Umět pracovat s výjimkami a generickými typy.

  • Mít vyřešenou úlohu číslo 7.

  • Chápat principy proudového vstupu a výstupu v Javě.

Zadání

V této úloze rozšíříme úlohu číslo 7 a ke katalogu studentů doplníme třídu umožňující jeho ukládání na disk. Vytvoříte třídu CatalogStorageImpl, která bude implementovat rozhraní CatalogStorage. Popis chování jednotlivých metod naleznete v komentářích JavaDoc u tohoto rozhraní. Třída CatalogStorageImpl bude mít veřejný bezparametrický konstruktor.

K dispozici je testovací třída CatalogStorageTest, která slouží jako formální zadání. To znamená, že správné řešení je takové, které úspěšně projde všemi testy. Vaše řešení samozřejmě musí projít i testovací třídou CatalogTest z předchozí úlohy. V této úloze je testovací třída obzvlášť užitečná, neboť zde existuje velké množství poteciálních chyb a situací, které je nutné ošetřit při nahrávání souboru s obsahem katalogu.

Několik rad

Pro úspěšné vyřešení úlohy tak, aby prošla všemi testy, je nuté dodržet několik zásad a pravidel. Možná se Vám některá z nich budou jevit jako zbytečná, nicméně jsou velmi důležitá a jejích dodržování Vám v budoucnu velmi usnadní programování a zejména řešení různých problémových situací.

  • Nezapomeňte na řetězení výjimek.To znamená, že pokud je nějaká výjimka způsobená jinou výjimkou, měli byste tuto původní výjimku připojit k nově vytvářené, aby byla zachována informace o původní příčině problému:

    try {
        // nějaký kód
    } catch (IOException ex) {
        throw new MyException("Nepodařilo se to a to",ex);
    }
  • Při implementaci metody load() vám nebude stačit přistupovat k třídě CatalogImpl pouze prostřednictvím metod poskytovaných rozhraním Catalog, neboť budete potřebovat vytvářet studenty s předem daným id. Doporučuji pro tento účel do metody CatalogImpl doplnit neveřejnou metodu. V žádném případě byste neměli manipulovat přímo s vnitřními datovými strukturami třídy CatalogImpl!

Další rady a návody jak řešit některé z potenciálních problémů Vám poskytnou cvičící v příslušném cvičení.

Odevzdání úlohy

Před odevzdáním úlohy si zkontrolujte:

  1. Zda jde úloha přeložit a zda jdou přeložit i všechny testy.

  2. Zdali všechny testy projdou bez chyby.

  3. Zda jste nezapomněli správně vyplnit hlavičky všech tříd ve formátu JavaDoc (popis třídy, autor, popis všech metod, apod.)

Metodické pokyny

Je vhodné zopakovat základní pojmy související se vstupem a výstupem, zejména pak rozdíl mezi binárními a textovými proudy. Doporučuji také připomenout princip řetězení výjimek.

Při implementaci metody load si studenti nevystačí s metodami poskytovanými rozhraním Catalog, ale budou muset do třídy CatalogImpl doplnit neveřejnou pomocnou metodu pro vytvoření nového studenta s předem daným id. Tento problém je důležité vysvětlit a naznačit jeho řešení. Upozorněte studenty, že by neměli v žádném případě přistupovat k atributům třídy CatalogImpl (ty mají zůstat private) a že i nově definovaná pomocná metoda by měla být přátelská v rámci balíčku.

Pokyny pro opravování

  • Prověřte, že studenti do hlaviček tříd správně doplnili své jméno a popis třídy.

  • Prověřte, že studenti důsledně používají generické typy.

  • Prověřte, že studenti neporušují princip zapouzdření a že jsou všechny atributy třídy CatalogImpl typu private (a že metoda load pro vytváření studentů používá neveřejnou metodu).