Table of Contents
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.
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
, která bude
implementovat rozhraní MyMessenger
a
bude sloužit k zasílání zpráv. Třída MyMessenger bude mít jeden
konstruktor, který bude mít dva parametry – Messenger
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
.
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í.