Úloha číslo 6

Výjimky

Tomáš Pitner

Petr Adámek

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

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.

  • Chápat způsob práce s výjimkami.

Zadání

V této úloze bude Vaším úkolem vytvořit hierarchii výjimek MessageException, CannotSendException a TargetUnreachableException. 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 MessageException bude potomkem třídy Exception, zatímco výjimky CannotSendException a TargetUnreachableException budou potomky třídy MessageException. U každé výjimky nezapomeňte alespoň na jeden konstruktor, který umožní nastavit řetězec s chybovou hláškou a zároveň příčinu (cause) výjimky (tj. výjimku, která byla bezprostřední příčinou této výjimky). Výjimka TargetUnreachableException bude reprezentovat chybu při navazování spojení, zatímco CannotSendException bude reprezentovat chybu při vlastním posílání zpráv.

Dále vytvoříte třídu MyMessenger, která bude implementovat rozhraní Messenger a bude sloužit k zasílání zpráv. Třída MyMessenger bude mít jeden konstruktor, který bude mít dva parametry – connector typu Connector a maxSendAttemptCount typu int. Zprávy bude zasílat tak, že nejdříve pomocí instance třídy Connector naváže spojení s cílovou adresou (tj. počítačem) a pak pomocí takto získaného spojení zašle text zprávy jako data. Pokud při zasílání dat dojde k chybě a hodnota maxSendAttemptCount bude větší než jedna, operace se bude opakovat (maxSendAttemptCount - 1) krát. Pokud bude mít maxSendAttemptCount hodnotu 2 a při prvním pokusu dojde k chybě, pokus o zaslání dat se jednou zopakuje. Pokud ani podruhé operace neuspěje, bude vyhozena výjimka CannotSendException. Pozor, opakování operací se týká pouze vlastního zaslání zprávy, pokud dojde k chybě hned při navazování spojení, žádné operace se neopakují a rovnou je vyhozena výjimka TargetUnreachableException.

Vše si můžete vyzkoušet pomocí třídy Demo a k dispozici máte také testovací třídu MyMessengerTest.

Několik rad

  • V konstruktoru třídy MyMessenger nezapomeňte zkontrolovat platnost parametrů, tj. nemá-li connector hodnotu null a není-li maxSendAttemptCount menší než jedna. V opačném případě vyhoďte výjimku NullPointerException, nebo IllegalArgumentException.

  • Každá výjimka musí mít nastavenou smysluplnou chybovou hlášku a pokud vznikla jako reakce na jinou výjimku tak musí mít nastavenou i svoji příčinu.

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