Hallo lieber java-forum,
Ich habe das Thema Modularität in etwa so verstanden:
Durch Zerlegung eines komplexen Problemes in Teilprobleme entstehen sogenannte Module?
Wenn ich nun sagen wir einfach mal einen Taschenrechner programmieren möchte, könnte ich die einzelnen Operationen (+, -, *, / ...) als jeweils eigene Methoden schreiben und jede dieser Methode wäre dann ein Modul, habe ich dies denn richtig verstanden?
Außerdem muss die Schnittstelle so passen das ich weitere Module problemlos hinzufügen könnte ohne den restlichen Code wirklich verändern zu müssen?
Wäre an sich soweit alles kein Problem.
Habe nun jedoch eine Aufgabe hier:
Wollen die das ich für Teilaufgabe a eine extra methode schreibe oder einfach nur eine veränder?
Wenn ich den if Fall (e is instance of Neg) einfach veränder dann habe ich dies doch nicht modular erweitert so wie ich das verstehe?
Bei Teilaufgabe b) würde ich einfach mal sagen ja, kann man
und bei Teilaufgabe c) habe ich garkeine Ahnung was ich da als Ansatz nehmen würde, da ich wie gesagt auch nicht ganz verstanden habe wie man modular programmiert D:
Bitte helft mir
Ich habe das Thema Modularität in etwa so verstanden:
Durch Zerlegung eines komplexen Problemes in Teilprobleme entstehen sogenannte Module?
Wenn ich nun sagen wir einfach mal einen Taschenrechner programmieren möchte, könnte ich die einzelnen Operationen (+, -, *, / ...) als jeweils eigene Methoden schreiben und jede dieser Methode wäre dann ein Modul, habe ich dies denn richtig verstanden?
Außerdem muss die Schnittstelle so passen das ich weitere Module problemlos hinzufügen könnte ohne den restlichen Code wirklich verändern zu müssen?
Wäre an sich soweit alles kein Problem.
Habe nun jedoch eine Aufgabe hier:
Gegeben ist ein Programm (siehe nächste Seite), welches mathematische Ausdrücke auswerten und
ausgeben kann. Diskutieren Sie kritisch die Modularität dieser Implementierung.
Welche der folgenden Änderungen können modular ausgeführt werden und welche nicht?
a) Negative Zahlen sollen zusätzlich in Klammern dargestellt werden
b) Neben Drucken und Evaluieren soll auch Vereinfachen von Ausdrücken, z.B. x+0=x und –x=x
unterstützt werden.
c) Neben Addition soll auch Subtraktion unterstützt werden
Verändern Sie das Programm mit dem Ziel, die Modularität zu erhöhen. Erläutern Sie, inwiefern
ihre Implementierung besser ist. Welche Änderungen können jetzt modular durchgeführt werden,
welche nicht?
3
Java:
public class Main {
public static void main(String[] args) {
Expr e = new Add(new Add(new Number(1), new Neg(new Number(2))), new Number(4));
System.out.print("Der Ausdruck ");
new Printer().print(e);
System.out.println(" evaluiert zu " + new Evaluator().eval(e));
}
}
public interface Expr {}
public class Number implements Expr {
public int value;
public Number(int v) { this.value=v; }
}
public class Add implements Expr {
public Expr left, right;
public Add(Expr left, Expr right) { this.left=left; this.right=right; }
}
public class Neg implements Expr {
public Expr expr;
public Neg(Expr expr) { this.expr=expr; }
}
public class Printer {
public void print(Expr e) {
if (e instanceof Number)
System.out.print(((Number) e).value);
if (e instanceof Add) {
System.out.print("(");
print(((Add) e).left);
System.out.print("+");
print(((Add) e).right);
System.out.print(")");
}
if (e instanceof Neg) {
System.out.print("-");
print(((Neg) e).expr);
}
}
}
public class Evaluator {
public int eval(Expr e) {
if (e instanceof Number)
return ((Number) e).value;
if (e instanceof Add)
return eval(((Add) e).left) + eval(((Add) e).right);
if (e instanceof Neg)
return -eval(((Neg) e).expr);
throw new RuntimeException("not a valid expression");
}
}
Wollen die das ich für Teilaufgabe a eine extra methode schreibe oder einfach nur eine veränder?
Wenn ich den if Fall (e is instance of Neg) einfach veränder dann habe ich dies doch nicht modular erweitert so wie ich das verstehe?
Bei Teilaufgabe b) würde ich einfach mal sagen ja, kann man
und bei Teilaufgabe c) habe ich garkeine Ahnung was ich da als Ansatz nehmen würde, da ich wie gesagt auch nicht ganz verstanden habe wie man modular programmiert D:
Bitte helft mir