Witam, mam problem z poniższym zadaniem, nie wiem za bardzo jak sie do niego zabrać. Za wszelkie podpowiedzi byłbym wdzięczny.
…
Zdefiniuj abstrakcyjną klasę bazową Wyrazenie, reprezentującą całkowitoliczbowe wyrażenie arytmetyczne. W klasie tej umieść deklarację abstrakcyjnej metody oblicz(), której zadaniem w klasach potomnych będzie obliczanie wyrażenia i przekazywanie wyniku jako wartości typu Long.
Następnie zdefiniuj klasy dziedziczące po klasie Wyrazenie, które będą reprezentowały kolejno liczbę, zmienną (zmienne pamiętaj w statycznej kolekcji TreeMap), operacje arytmetyczne (dwuargumentowe dodawanie, odejmowanie, mnożenie, dzielenie i modulo oraz jednoargumentowa operacja zmiany znaku), porównania (wynikiem porównania ma być jak w języku C liczba 0 albo 1 odpowiadająca wartościom logicznym false albo true), operacje logiczne (negacja, alternatywa i koniunkcja) i inne.
Klasy te powinny być tak zaprojektowane, aby można z nich było zbudować drzewo wyrażenia: obiekty klas Liczba lub Zmienna to liście, a operatory to węzły wewnętrzne w takim drzewie. W klasach potomnych zdefiniuj metody oblicz() oraz toString().
Na koniec napisz krótki program testowy, sprawdzający działanie obiektów tych klas. W swoim programie skonstruuj drzewa obliczeń, wypisz je metodą toString() a potem oblicz i wypisz ich wartość dla następujących wyrażeń:
* 7*11+2
* 13-x
* (x-3)/(x+3)
* ((x+1)*x)/2
* 2*x+10
* x%4==0x%100!=0||x%400==0
* !(|x-17|=0)
Na przykład wyrażenie (7-x)*2 należy zdefiniować następująco: Wyrazenie w =
new Mnozenie(
new Odejmowanie(
new Liczba(7),
new Zmienna(“x”)
),
new Liczba(2)
); Ustaw na początku programu testowego zmienną x na wartość –3. Pamiętaj też, aby złapać wyjątek przy próbie dzielenia przez 0.