Hallo,
ich habe folgende Aufgabe im Anhang. Das UML Diagramm ist mit dabei.
Ein paar Fragen hätte ich zu der Aufgabe.
1. Was macht combine()?
2. Warum ist die Methode compute() in Bin und nicht in den Subklassen von Bin?
Über Eure Hilfe, bedanke ich mich im Voraus.
ich habe folgende Aufgabe im Anhang. Das UML Diagramm ist mit dabei.
Ein paar Fragen hätte ich zu der Aufgabe.
1. Was macht combine()?
2. Warum ist die Methode compute() in Bin und nicht in den Subklassen von Bin?
Java:
// Allgemeiner arithmetischer Ausdruck.
abstract class Expr {
// Wert des Ausdrucks berechnen.
public abstract double compute();
}
Java:
// Konstanter Ausdruck.
class Const extends Expr {
// Wert des Ausdrucks.
private double value;
// Konstanten Ausdruck mit Wert v erzeugen.
public Const(double v) {
value = v;
}
// Wert des konstanten Ausdrucks berechnen.
public double compute() {
return value;
}
// Zeichenkettendarstellung des konstanten Ausdrucks liefern.
public String toString() {
return "" + value;
}
// Konstanten Ausdruck mit Objekt other vergleichen.
public boolean equals(Object other) {
if (!(other instanceof Const))
return false;
Const that = (Const) other;
return this.value == that.value;
}
}
Java:
// Binärer Ausdruck.
abstract class Bin extends Expr {
// Linker und rechter Teilausdruck.
private Expr left, right;
// Binären Ausdruck mit Teilausdrücken l und r erzeugen.
protected Bin(Expr l, Expr r) {
left = l;
right = r;
}
// Werte l und r mit dem Operator des binären Ausdrucks verknüpfen.
protected abstract double combine(double l, double r);
// Operator des binären Ausdrucks liefern.
protected abstract String oper();
// Wert des binären Ausdrucks berechnen.
public double compute() {
return combine(left.compute(), right.compute());
}
// Zeichenkettendarstellung des binären Ausdrucks liefern.
public String toString() {
return "(" + left + oper() + right + ")";
}
// Binären Ausdruck mit Objekt other vergleichen.
public boolean equals(Object other) {
if (!(other instanceof Bin))
return false;
Bin that = (Bin) other;
return this.oper().equals(that.oper()) && this.left.equals(that.left) && this.right.equals(that.right);
}
}
Java:
// Addition.
class Add extends Bin {
// Addition mit Teilausdrücken l und r erzeugen.
public Add(Expr l, Expr r) {
super(l, r);
}
// Werte l und r durch Addition verknüpfen.
public double combine(double l, double r) {
return l + r;
}
// Operator der Addition liefern.
protected String oper() {
return "+";
}
}
Über Eure Hilfe, bedanke ich mich im Voraus.