====== 5. Cvičení - Kolekce a generika ====== V tomto cvičení se naučíte základní práci s kolekcemi. Jako samostaný úkol se podívejte na kolekce typu Map. Zároveň byste se naučíte vytvořit a vyhodit výjimku a na vhodném místě zajistit její zpracování. ===== Úkoly ===== - Vytvořte třídu Contact, která v sobě uchovává jméno, příjmení, email, telefonní číslo a adresu osoby. Implementujte metodu toString, která vypíše kontakt v lidsky čitelné formě. - Zajistěte kontrolu vstupních parametrů (telefonního čísla, jména a příjmení) pomocí vyhození vlastní výjimky. - Vytvořte třídu ContactList, která bude uvnitř kolekce obsahovat instance třídy Contact. - Implementujte metodu toString u třídy ContactList. - Zajistěte naplnění třídy ContactList daty od uživatele a zároveň vhodně reagujte na možné chybné zadání kontrolovaných údajů pomocí try-catch. - Zajistěte, aby bylo možné seřadit kontakty v kolekci podle telefonního čísla pomocí implementace rozhraní Comparable ve třídě Contact. - Napište vlastní Comparator, který seřadí uživatele podle příjmení a pak jména. - S cvičícím projděte výhody a nevýhody obou přístupů k řazení prvků pomocí metody Collections.sort(). ==== Samostatná práce ==== * Vytvořte třídu Warehouse, která bude představovat sklad výrobního podniku. Podnik vyrábí ocelové výrobky SteelArticle. Tyto výrobky mají název, výrobní číslo a definovanou hmotnost v kg. Problémem je, že tyto výrobky s postupem času reznou a je tedy potřeba vyskladňovat tyto výrobky ze skladu v tom pořadí, jak byly vyrobeny, aby některé výrobky na skladě nerezly zbytečně dlouho. Navrhněte datovou strukturu, která bude představovat objekty Warehouse, SteelArticle. Warehouse bude na vyžádání seznamy jednotlivých typů výrobků seřazených podle pořadí, jak byly vyrobeny a tedy vloženy do skladu. * Majitel podniku se rozhodl, že výrobní podnik se na volném prostranství zaměří na zahradnictví. Postavili tedy nové skladiště, do kterého přibudou nové položky Plant (u každé rostliny máme název, výrobní číslo vzniklé při uložení do květináče, jeho hmotnost a pak informaci o tom, jestli se rostlina prodává v létě nebo na podzim). Upravte stávající Warehouse, aby byl schopný pracovat s třídami SteelArticle i Plant. Využijte k tomu generika ve spojení s kolekcemi. ==== Procvičení Map ==== * Jste členem Hvězdné flotily a vaším úkolem je vytvořit databázi planet v kvadrantu Alfa a Beta pomocí rozhraní Map. Každá planeta bude mít svůj název a základní informace, jako je rasa, která ji obývá, nebo její status (např. spojenecká, neutrální, nepřátelská). * Vytvořte program v Javě, který bude obsahovat: === Třídu Planet: === Atributy: * String name – Název planety * String species – Dominantní rasa na planetě * String status – Status planety (např. „Spojenecká“, „Neutrální“, „Nepřátelská“) * Konstruktor, gettery, settery a metoda toString() == Map == Vytvořte konkrétní implementaci této mapy * Přidejte do mapy alespoň 5 planet, např. Vulkán, Qo'noS, Romulus, Andoria, Bajor. * Implementujte metodu, která vypíše všechny planety v mapě. * Implementujte metodu, která najde planetu podle jména. * Implementujte metodu, která smaže planetu podle jména. Testovací data (atribut ''status'' je zde typu ''enum''): enum Status {FRIENDLY, NEUTRAL, ENEMY} record Planet(String name, String species, Status status) {} Planet planet1 = new Planet("Vulcan", "T'Khasi", Status.FRIENDLY); Planet planet2 = new Planet("Qo'noS", "Klingon", Status.ENEMY); Planet planet3 = new Planet("Romulus", "Hoshi", Status.ENEMY); Planet planet4 = new Planet("Andoria", "Andorians", Status.NEUTRAL); Planet planet5 = new Planet("Bajor", "Bajoran", Status.NEUTRAL); ===== Studijní materiály ===== [[kolekce|Kolekce]] [[vyjimky|Výjimky]] [[generika|Generika]]