[Zadani je v kodovani UTF-8] 1) Vytvořte třídu Student která bude představovat studenta. * každý student - má finální atribut id typu int, kterým je jednoznačně identifikován - má finální atribut surname typu String, který představuje jeho příjmení - má finální atribut name typu String, který představuje jeho jméno - má finální atribut dateOfBirth typu Date (z balíku java.util), který představuje jeho datum narození * vytvořte konstruktor se 4 parametry (jeden parametr pro každý z atributů) - konstruktor vyhodí výjimku IllegalArgumentException pokud je id <= 0 - konstruktor vyhodí výjimku NullPointerException pokud je některý z parametrů null - v ostatních případech inicializuje všechny atributy pomocí zadaných parametrů * pro každý atribut vytvořte odpovídající get metodu * implementujte metodu equals() pro porovnání studenta s libovolným objektem - dvě instance třídy Student jsou shodné, právě tehdy když mají stejné id - nezapomeňtě odpovídajícím způsobem implementovat metodu hashCode() * implementujte metodu toString(), která vrátí testovou reprezentaci studenta - výsledný řetězec by měl určitě obsahovat id studenta a jeho celé jméno - formát řetězce je čistě na vás * nad třídou Student definujte uspořádání podle id od nejmenšího po největší - třída bude implementovat rozhraní Comparable - metodu compareTo() z implementovaného rozhraní napište co nejjednodušeji 2) Vytvořte třídu StudentDateOfBirthComparator porovnávající studenty podle data narození vzestupně. * třída bude implementovat rozhraní Comparator - není nutné implementovat metodu equals() z rozhraní * metoda compare() - bude mít dva parametry typu Student (dle specifikace v rozhraní Comparator) - vyhodí výjimku NullPointerException pokud je některý z parametrů null 3) Vytvořte třídu StudentFullNameComparator porovnávající studenty dle příjmení a následně dle jména. * třída bude implementovat rozhraní Comparator - není nutné implementovat metodu equals() z rozhraní * metoda compare() - bude mít dva parametry typu Student (dle specifikace v rozhraní Comparator) - vyhodí výjimku NullPointerException pokud je některý z parametrů null 4) Vytvořte třídu Students s metodou main() a privátním (a prázdným) konstruktorem. * vyzkoušejte si práci se třídou Student - datum narození lze snadno získat použitím třídy Calendar - pro testovací účely stačí vytvářet datum narození pomocí konstruktoru Date(long) * vytvořte množinu studentů a uložte do ní alespoň 8 různých studentů - v množině nalezněte nejmladšího a nejstaršího studenta a vypište je na standardní výstup - dále nalezněte prvního a posledního studenta v abecedě a vypište je na standardní výstup - uspořádejte studenty podle id a vypište je na standardní výstup - vše lze jednoduše implementovat s použitím třídy Collections, případne použitím vhodné kolekce * zamyslete se, kdy výše uvedené nebude fungovat 5) Vytvořte třídu StudentRegister představující registr studentů. * třída bude mít implicitní konstruktor * vytvořte metodu createStudent() se třemi parametry a návratovým typem Student - první parametr surname bude typu String - druhý parametr name bude typu String - třetí parametr dateOfBirth bude typu Date (z balíku java.util) - metoda vyhodí výjimku NullPointerException pokud je některý z parametrů null - metoda vytvoří nového studenta se zadanými parametry a unikátním id - vytvořeného studenta si metoda uloží do vhodné interní kolekce - nakonec metoda vrátí vytvořeného studenta * vytvořte metodu containsStudent() s jedním parametrem typu int a návratovým typem boolean - metoda vrátí true, právě tehdy když v registru existuje student se zadaným id - v opačném případě vrátí metoda false * vytvořte metodu getStudentById() s jedním parametrem typu int a návratovým typem Student - metoda vyhodí výjimku IllegalArgumentException pokud student se zadaným id neexistuje - pokud id existuje, metoda vrátí studenta se zadaným id * vytvořte metodu getStudentsSortedByFullName() s návratovým typem SortedSet - metoda vrátí množinu studentů uspořádanou dle příjmení a následně dle jména * vytvořte metodu getStudentsSortedByDateOfBirth() s návratovým typem SortedSet - metoda vrátí množinu studentů uspořádanou sestupně dle data narození 6) Demonstrujte použítí třídy StudentRegister v metodě main() třídy Students. Případné dotazy prosím směřujte do diskuzního fóra.