[ Pobierz całość w formacie PDF ]

6
Pod pojęciem  konsument kryje się każdy odbiorca komunikatu, jakim jest zdarzenie. Może być to
zarówno kolejna warstwa aplikacji, jak też użytkownik czytający komunikat wyświetlany na ekranie.
Dlatego też nadanie mu zrozumiałej formy jest tak samo ważne w przypadku człowieka, jak innego
podsystemu aplikacji.

102 Część II Plan0wanie 0bsługi wyjątków
Oczywiście klasy nie są jedyną strukturą w ramach pisanych przez nas aplikacji, na poziomie
której należy rozważać i planować obsługę wyjątków. Java pozwala nam także korzystać z in-
terfejsów i opisywać za ich pomocą pewne ogólne cechy i zachowania7. Zalecenia dotyczące
definiowania wyjątków w ramach interfejsów są nieskomplikowane, chociaż wymagają jeszcze
większych zdolności przewidywania niż te, jakimi musimy wykazać się tworząc zwykłe meto-
dy. Jeśli interfejs ma uczestniczyć w obsłudze wyjątków, należy dość starannie rozważyć jego
użycie w ramach budowanego zestawu klas. Bazując na wymaganiach tworzonej konstrukcji
i prawdopodobnych sposobach implementacji interfejsu, jego twórca może przewidzieć i za-
deklarować pewne wyjątki zgłaszane przez wchodzące w skład interfejsu metody. Popraw-
ne dodawanie deklaracji wyjątków w ramach interfejsów powinno być zgodne z dwiema
następującymi regułami:
1. Dobrze zaplanowany interfejs zwykle zgłasza tylko jeden rodzaj wyjątku, chyba
że istnieje jakaś wyjątkowa przyczyna uzasadniająca większą ich liczbę. Typowy
interfejs reprezentuje określony model bądz ściśle zdefiniowany zestaw zachowań.
Dlatego dobrze jest przypisać mu jeden rodzaj wyjątku.
2. Wyjątki zgłaszane przez metody interfejsu powinny bezpośrednio dotyczyć zadań,
do jakich interfejs został przewidziany  ich znaczenie musi odpowiadać kontekstowi
sytuacji, w której mogą się potencjalnie pojawić. Dlatego też definiowanie
interfejsów idzie często w parze z tworzeniem własnych wyjątków.
Naturalną cechą interfejsów jest to, że nie definiują one dokładnego zachowania. Ich projektant
nie posiada kontroli nad tym, jak dokładnie zostaną one w przyszłości zaimplementowane
oraz w jaki sposób użyte zostaną zadeklarowane w metodach interfejsu wyjątki. Osoby wyko-
rzystujące w swych aplikacjach biblioteki, w których implementowane są te interfejsy, są w lep-
szej sytuacji, mają bowiem wpływ i na generowanie wyjątków, i na ich obsługę. Trudno na-
tomiast zazdrościć tym programistom, którzy nie mają wpływu ani na sam interfejs, ani na
jego implementację8.
Twórcy interfejsu naprawdę trudno dobrać odpowiedni poziom ogólności wyjątków genero-
wanych przez metody interfejsu, dlatego też błędy mogą być reprezentowane w sposób bardziej
elastyczny. Trafiając na problem tego typu, możemy skorzystać z jednego z takich rozwiązań:
1. Tworzymy interfejs ze stałą listą specyficznych dla niego wyjątków i wymuszamy
niejako na osobach odpowiedzialnych za implementację wyrzucanie tylko tych
wyjątków (bądz ich podzbioru), które zostały przez nas przewidziane. Jest to zwykle
najlepsza opcja, gdy zakładamy narzucenie pewnego standardu posługiwania się
interfejsem. Dotyczy to zwykle wyjątków związanych z błędami o średnim oraz
wysokim priorytecie.
2. Definiujemy interfejs, który nie deklaruje żadnych wyjątków. Ich obsługa musi
więc zostać zawarta wewnątrz implementacji metod. Jest to opcja polecana szczególnie
w sytuacjach, gdy zadania interfejsu sprecyzowane są w sposób bardzo ogólny i nie
7
Interfejs jest czasami porównywany w innych językach programowania do koncepcji  kontraktu .
Interfejsy zwiększają możliwości Javy, pozwalają na reprezentowanie pewnych współdzielonych pojęć
i zachowań bez uciekania się do mechanizmu dziedziczenia.
8
Dobrym przykładem problemów tego typu jest biblioteka dostępu do baz danych, czyli JDBC. Twórcy
interfejsu nie mieli żadnej kontroli ani nad ich implementacją (tworzone niezależnie sterowniki JDBC), [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • themoon.htw.pl
  •