Sie können eine umfassende Aufgabe mit diversen Techniken der OOP umsetzen.
Sie implementieren einen einfachen Rechner mit den Grundoperationen +, -, *, /, basierend auf dem gezeigten Klassendiagramm.
Beachte:
Reader
und Tokenizer
sind vorgegeben und sollen/dürfen durch Sie nicht verändert werden.ZeroDivisionError
stammt aus der Python-Bibliothek und darf nicht selber implementiert werden. Sie ist der Vollständigkeit wegen im Diagramm skizziert.NumberFormatException
und OperationException
) erben von Exception
. Das ist hier im Diagramm aus Platzgründen nicht mehr gezeigt.@property
implementiert, also ohne den Vorsatz get_···.
Aufgabe 1
Laden Sie das Repo von github-classromm. Der Link findet sich im Moodle Kurs.
Aufgabe 2
Studieren Sie den Code der Klasse Reader
.
Besprechen Sie Ihre Erkenntnisse mit der Lehrperson.
Aufgabe 3
Implementieren Sie die beiden Exception-Klassen (in der Datei exceptions.py
). Sie erben von der Klasse Exception
aus der Python Bibliothek.
OperationException
gibt folgenden Hinweis aus: “ERROR: ungültiges Operationszeichen eingegeben!”. Dabei wird nicht mitgeteilt, was falsch eingegeben wurde.NumberFormatException
gibt folgenden Hinweis aus: “ERROR: falscher Text ist ein ungültiger Zahlenwert”. Hier steht falscher Text als Platzhalter für den konkret falsch eingegebenen Text.
Aufgabe 4
Implementieren Sie die abstrakte Klasse MathOp
(in der Datei math_operations.py
) gemäss der Theorie in LU07.
Testen Sie diesen Schritt mit dem Testfall test_math_op_instantiate
in der Datei test_mathop_class_instantiation.py
.
Aufgabe 5
Implementieren Sie die 4 Klassen Adder
, Subtractor
, Multiplier
und Divider
für die konkrete Umsetzung der mathematischen Operationen. Dabei müssen Sie die abstrakte Methode der Oberklasse MathOp
überschreiben.
math_operations.py
execute_op
“weiss” jeweils, welche Operation sie mit den beiden Zahlenwerten ausführen muss.Divider
bei einer Division mit 0 die entsprechende Exception (ZeroDivisionError
) werfen muss.
Testen Sie die Klassen mit den entsprechenden Testfällen aus der Datei test_math_operations.py
.
Aufgabe 6
Implementieren Sie nun die Klasse Calculator
in der Datei calculator.py
.
Testen Sie die Klasse mit den Testfällen aus der Datei test_calculator.py
.
Aufgabe 7
Implementieren Sie in der Datei main.py
die Hauptroutine (main
).
Hier werden die Exceptions bearbeitet, d.h. dass jeweils eine entsprechende Meldung auf den Stdout (mit print
-Befehl) ausgegeben wird.
Halten Sie sich dabei an das folgende Sequenzdiagramm.
Führen Sie das Programm aus. Sie sollten eine vergleichbare Ausagbe erhalten.