Napisz zestaw klasy umożliwiających przedstawienie
wyrażenia matematycznego (typu 1+3*4-6/2)
w postaci drzewa.
Liczby będą reprezentowane przez obiekty klasy Liczba
-
będą to liście drzewa.
Operatory będą reprezentowane przez obiekty dziedziczące z
klasy Operator(OpDodawania,
OpOdejmowania, OpMnożenia,
OpDzielenia) -
będą to węzły drzewa.
Dziećmi Operatora
mogą być zarówno Liczby jak i kolejne
Operatory -
stwórzmy zatem klasę abstrakcyjną Operand,
z której
dziedziczyć będą Liczba i Operator.
Zatem referencje na dzieci
Operatora będą
typu Operand.
W klasie Operand znajdzie się abstrakcyjna metoda oblicz,
zwracająca wartość danego elementu - w wypadku Liczby będzie to po
prostu wartość liczby, zaś w wypadku operatorów - obliczona
wartość wyrażenia (czyli np. suma wartości lewego i prawego poddrzewa w
wypadku operatora dodawania).
Diagram klas może wyglądać np. tak:
Działanie klas możesz przetestować przykładowym
programem:
Operand
wyrażenie
= new OpOdejmowania(new OpDodawania(new Liczba(1), new OpMnożenia(new
Liczba(3), new Liczba(4))), new OpDzielenia(new Liczba(6), new
Liczba(2)));
System.out.println(wyrażenie.oblicz());