cwicz03 04







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 04
04 (131)
2006 04 Karty produktów
04 Prace przy urzadzeniach i instalacjach energetycznych v1 1
04 How The Heart Approaches What It Yearns
str 04 07 maruszewski
[W] Badania Operacyjne Zagadnienia transportowe (2009 04 19)
Plakat WEGLINIEC Odjazdy wazny od 14 04 27 do 14 06 14
MIERNICTWO I SYSTEMY POMIAROWE I0 04 2012 OiO
r07 04 ojqz7ezhsgylnmtmxg4rpafsz7zr6cfrij52jhi
04 kruchosc odpuszczania rodz2
Rozdział 04 System obsługi przerwań sprzętowych
KNR 5 04

więcej podobnych podstron