Scenariusz na lab 4: ProszÄ zaimplementowaÄ klasÄ dla liczb wymiernych. Klasa powinna nazywaÄ siÄ Rational i mieÄ nastÄpujÄ ce metody: (1) statyczne metody zero() : Rational i one() : Rational, ktĂłre zwracajÄ zero i jedynkÄ. (2) metody arytmetyczne - add(Rational x) : Rational, - subtract(Rational x) : Rational, - multiply(Rational x) : Rational, - divide(Rational x) : Rational, - opposite() : Rational, - inverse() : Rational, ktĂłre wykonujÄ odpowiednie operacje arytmetyczne: dodawanie, odejmowanie, mnoĹźenie, dzielenie, branie liczby przeciwnej oraz odwrotnoĹci. KaĹźda operacja ma zwracaÄ wynik jako nowy obiekt. (3) akcesory: - sign() : int, - numerator() : int, - denominator() : int, ktĂłre zwracajÄ odpowiednio znak (-1, 0 lub +1), licznik, i mianownik danej liczby, w postaci nieskracalnej (ze wzglÄdnie pierwszym licznikiem i mianownikiem). (4) metoda compare(Rational x) : int, ktĂłra zwraca -1, 0 lub +1 w zaleĹźnoĹci czy (this) jest mniejsze, rĂłwne, czy wiÄksze od x. (5) metoda toString() : String, ktĂłra zwraca string z reprezentacjÄ liczby w postaci nieskracalnej w formacie "[znak](licznik)/(mianownik)", np. "-1/2", "2/3", "-101/10", "0/1". (6) konstruktory Rational(int n) oraz Rational(int p, int q) tworzÄ ce odpowiednio n/1 oraz p/q (dla dowolnych p i q, byÄ moĹźe ujemnych). Przy implementacji zacznij najpierw od okreĹlenia, w jaki sposĂłb Twoja klasa bÄdzie przechowywaĹa wewnÄtrzne dane, w szczegĂłlnoĹci kiedy bÄdzie nastÄpowaÄ normalizacja do postaci nieskracalnej. ZwrĂłÄ uwagÄ, Ĺźeby okreĹliÄ jak najmniejszy zbiĂłr krytycznych metod potrzebny do zaimplementowania caĹej funkcjonalnoĹci, tzn. implementuj niektĂłre metody przy uĹźyciu zĹoĹźeĹ innych. Dzielenie przez zero naleĹźy zignorowaÄ (tzn. pozwoliÄ na odpalanie siÄ standardowych wyjÄ tkĂłw arytmetycznych). ProszÄ teĹź napisaÄ funkcjÄ main, w ktĂłrej bÄdzie kilka prostych testĂłw sprawdzajÄ cych, Ĺźe funkcjonalnoĹÄ dziaĹa. Zadanie powyĹźsze jest trzecim zadaniem domowym z laboratorium; naleĹźy je oddaÄ mailem do Ĺrody 6-ego kwietnia, do godziny 14:15. Zadania z gwiazdkÄ (bez bonusĂłw, oprĂłcz satysfakcji): - Naucz siÄ z internetĂłw jak siÄ przeĹadowuje metody equals oraz hashCode, i odpowiednio uzupeĹnij swĂłj projekt o to. - Naucz siÄ z internetĂłw jak dziaĹajÄ wyjÄ tki w Javie, i zdefiniuj wyjÄ tek DivisionByZero podnoszony przy prĂłbie dzielenia przez zero (przy dzieleniu, odwrotnoĹci, albo drugim konstruktorze). - Naucz siÄ z internetĂłw jak dziaĹa w Javie interfejs Comparable<T> i zrĂłb tak, by Twoja klasa implementowaĹa ten interfejs do porĂłwnywania.