Pro vyřešení této úlohy je třeba
Rozumět principům objektového programování v jazyce Java.
Znát základní typy kolekcí v Javě (Collection, List, Set, a jejich implementace ( ArrayList, LinkedList, HashSet, TreeSet). Je důležité vědět, čím se jednotlivé typy kolekcí i jejich konkrétní implementace liší a kdy je vhodné kterou z nich použít.
Chápat proncip rozhraní Comparable.
Umět pracovat s výjimkami a generickými typy.
V této úloze implementujeme jednoduchý systém půjčovny aut. Vaším úkolem bude vytvořit třídy CarImpl, CustomerImpl a CarRentalImpl, které budou implementovat příslušná rozhraní. Význam tříd a popis jejich chování naleznete v komentářích JavaDoc u rozhraní. Třída CarRentalImpl nebude mít veřejný bezparametrický konstruktor.
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í.
Všechny atributy všech tříd musí mít přístupová práva private.
Velice důležité je dodržet obecný kontrakt metody equals. Ten je definován ve třídě Object. S tím úzce souvisí i obecný kontrakt metody hashCode.
Každá metoda by si měla ověřit své vstupní parametry a v případě jakýchkoliv problémů by měla vyhodit vhodnou výjimku. Tato výjimka musí být popsána v dokumentaci příslušné metody. V této úloze je typ výjimky vždy předepsán příslušným rozhraním.
Každá vyhozená výjimka by měla obsahovat popis, který umožní identifikovat přesnou příčinu problémů. V případě výjimky IllegalArgumentException stačí jako její popis uvést název špatného parametru:
public void metoda(String popis) { if (popis == null) { throw new IllegalArgumentException("popis"); } // kód metody ... } |
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í.
Před odevzdáním úlohy si zkontrolujte:
Zda jde úloha přeložit a zda jdou přeložit i všechny testy.
Zdali všechny testy projdou bez chyby.
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.)
Je vhodné zopakovat základní typy kolekcí, jejich vlastnosti a vhodnost použit v konkrétním případě. Dále připomeňte základní principy práce s výjimkami a generickými typy. Užitečné je také připomenout obecný kontrakt metod Object.hashCode() a Object.equals() a jak takové metody implementovat.
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.