Я недавно изучил иерархический дизайн того, как работает наследование Java. Но я не уверен, в какой момент я должен начать.Java - Как определить иерархии классов?
Приведенный пример вычисления двоичного выражения, он должен использовать два класса: Literal
и Binary
. Но это предполагает, чтобы дать следующие примеры выхода:
Literal a = new Literal(6);
Literal b = new Literal(12);
System.out.println(b); //Prints out: 12.0
System.out.println(b.evaluate()); //Prints out: 12.0
Binary e = new Binary(b, a, Operation.DIVIDE);
System.out.println(e); //Prints out: 12.0/6.0
Binary f = new Binary(e, a, Operation.PLUS);
System.out.println(f); //Prints out: (12.0/6.0) + 6.0
System.out.println(f.evaluate()); //Prints out: 8.0
Binary g = new Binary(e, f, Operation.TIMES);
System.out.println(g.evaluate()); //Prints out: 16.0
* Operation
является перечисление определяет четыре операции PLUS, MINUS, РАЗ и РАЗДЕЛИТЬ
Я попытался создать класс Literal
и другой класс Binary
которая простирается от класса Literal
... Но я обнаружил, что он может что-то неправильно в следующих последующих требованиях выходов на ...:
Variable v = new Variable(“a“);
Expression n = new Binary(f, v, Operation.DIVIDE);
System.out.println(n); //Prints out: ((12.0/6.0) + 6.0)/a
Environment x = new Environment();
x.addVariable(“a“, 4.0); //Variable “a“ has a value 4.0 in x
System.out.println(n.evaluate()); //RuntimeException
System.out.println(n.evaluate(x)); //Prints out: 2.0 (8.0/4.0 = 2.0)
Я обнаружил, что класс Binary
должен простираться от Expression
, чтобы соответствовать требованиям ... На самом деле я ошибаюсь в начале моего проекта?
Почему 'Binary' расширяет' Literal'? Я ожидаю, что они оба будут реализовывать «Выражение». –
Синтаксический анализ выражений - идеальный выбор для применения композитного шаблона дизайна: https://sourcemaking.com/design_patterns/composite – aquila
@JornVernee Поскольку переменная 'f' определена с объектом типа' Literal' ... Извините ... Я могу неправильно понять понятия ... – null