WPR 03-04
Klasy abstrakcyjne i interfejsy
Dziedziczenie i polimorfizm
Do realizacji tego zadania potrzebna będzie klasa RationalNumber z poprzednich zajęć.
Przydatna będzie również klasa IntegerNumber.
Zadanie 1: Klasa abstrakcyjna reprezentująca liczby dające się porównywać
Klasa RationalNumber udostępnia zestaw metod służących do porównywania
liczb reprezentowanych przez jej obiekty.
Możemy je wykorzystać do zaimplementowania metody znajdującej element maksymalny
w tablicy liczb typu RationalNumber.
Proszę zatem
stworzyć metodę RationalNumber max(RationalNumber[] arr),
która zwróci maksimum z tablicy arr.
Takie same metody do porównywania udostępnia klasa IntegerNumber.
W związku z tym, podobnie jak poprzednio,
stwórz metodę IntegerNumber max(IntegerNumber[] arr),
która zwróci maksimum z tablicy arr.
Okazuje się, że obie metody max(...) mają niemalże identyczne ciała.
Gdybyśmy chcieli zaimplementować podobną metodę min(...),
znajdującą element minimalny w dostarczonej tablicy,
to również musielibyśmy dodać dwie identyczne metody.
Pytanie
Jak - wykorzystując koncepcję dziedziczenia i klasy abstrakcyjnej -
zaprojektować powyższy zestaw klas tak,
by dodając nową metodę operującą na porównaniach (np. sortowanie)
wystarczyło umieścić jej kod w jednym miejscu?
Odpowiedź
Stwórz abstrakcyjną klasę ComparableNumber
zawierającą deklaracje abstrakcyjnych metod porównujących znanych z
RationalNumber i IntegerNumber.
Uczyń te dwie klasy podklasami ComparableNumber.
Umieść w niej implementacje metod max(...) i min(...).
Dodatkowo można również dodać metody sortujące tablice obiektów tego typu.
Wskazówka
Trzeba będzie wykonać zabiegi podobne jak przy implementacji metody equals()
z poprzednich zajęć.
W szczególności trzeba będzie obsłużyć wyjątek ClassCastException.
Ważne
W metodzie main(...) umieść odpowiednie testy.
W szczególności stwórz tablicę zawierającą kilka obiektów i
wyszukaj element maksymalny.
Zadanie 2: Implementacja interfejsu
Zapoznaj się z dokumentacją interfejsu java.lang.Comparable.
Zmodyfikuj klasę ComparableNumber w następujący sposób:
zaimplementuj interfejs Comparable
(jego metoda compareTo(T o) musi pozostać abstrakcyjna),
dodaj implementacje istniejących abstrakcyjnych metod (służących do porównywania)
wykorzystując do tego metodę compareTo(T o)
(a więc metody porównujące nie będą już abstrakcyjne),
W klasach RationalNumber i IntegerNumber
usuń implementacje metod porównujących i
dodaj implementację metody compareTo(T o) interfejsu Comaparable.
Wykonaj odpowiednie testy.
Wyszukiwarka
Podobne podstrony:
cwicz03 0404 (131)2006 04 Karty produktów04 Prace przy urzadzeniach i instalacjach energetycznych v1 104 How The Heart Approaches What It Yearnsstr 04 07 maruszewski[W] Badania Operacyjne Zagadnienia transportowe (2009 04 19)Plakat WEGLINIEC Odjazdy wazny od 14 04 27 do 14 06 14MIERNICTWO I SYSTEMY POMIAROWE I0 04 2012 OiOr07 04 ojqz7ezhsgylnmtmxg4rpafsz7zr6cfrij52jhi04 kruchosc odpuszczania rodz2Rozdział 04 System obsługi przerwań sprzętowychKNR 5 04więcej podobnych podstron