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). (6) wyjÄ tek DivisionByZero podnoszony przy prĂłbie dzielenia przez zero (przy dzieleniu, odwrotnoĹci, albo drugim konstruktorze). 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 z gwiazdkÄ (bez bonusĂłw, oprĂłcz satysfakcji): 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.