Úloha číslo 5

Abstract

Cílem této úlohy je vyzkoušet si práci s výjimkami.


Table of Contents
Co je potřeba znát
Zadání
Několik rad
Odevzdání úlohy
Výjimky

Co je potřeba znát

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


Zadání

Systém simuluje doručování doporučených dopisů adresátům.

V této úloze bude Vaším úkolem vytvořit hierarchii výjimek MailException, RecipientFailureException, LetterRefusedException, RecipientMissedException a BadAddressException. Dále budete muset vytvořit jednoduchou třídu na posílání zpráv, která bude na různé chybové stavy reagovat právě těmito výjimkami.

Výjimka MailException bude potomkem třídy Exception, zatímco ostatní výjimky budou potomky třídy MailException. U každé výjimky nadefinujte přinejmenším konstruktor, který umožní nastavit řetězec s chybovou hláškou a konstruktor, který navíc nastaví i příčinu (cause) výjimky (tj. výjimku, která byla bezprostřední příčinou této výjimky). Význam výjimek viz dále.

Vytvořte třídu MyPostOffice, která bude implementovat rozhraní PostOffice a bude sloužit k doručení doporučených dopisů. Třída MyPostOffice bude mít jeden konstruktor, který bude mít dva parametry – addressBook typu AddressBook a maxSendAttemptCount typu int. Dopisy bude doručovat tak, že nejdříve pomocí instance třídy AddressBook zjistí, jestli adresa na dopise existuje. Pokud adresa neexistuje, vyhodí výjímku BadAddressException, Pokud existuje, získáme odkaz na pošťáka, pod jehož rajon adresa spadá. Pošťák se pak snaží dopis doručit. Pokus o doručení může skončit nezdarem, viz dokumentace rozhraní Mailman. Pokud se dopis nepodařilo doručit proto, že adresát nebyl zastižen, pokusí se třída MyPostOffice o doručení opakovaně. Počet pokusů je dán parametrem maxSendAttemptCount konstruktoru. Pokud se dopis nepodařilo doručit proto, že adresát odmítl dopis převzít, žádný další pokus o doručení se již neprovádí. V obou případech vyhodí třída MyPostOffice stejnou výjimku RecipientFailureException.

Vše si můžete vyzkoušet pomocí třídy Demo (chová se náhodně!) a k dispozici máte také testovací třídu MyPostOfficeTest.


Několik rad

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.)