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.
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.pytest
und pylint
funktionieren.
Studieren Sie den Code der Klasse Reader
.
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: VALUE ist ein ungültiger Zahlenwert“. Hier steht VALUE als Platzhalter für den konkret falsch eingegebenen Text.
Implementieren Sie die abstrakte Klasse MathOp
(in der Datei math_operations.py
) gemäss den Beispielen in der Theorie.
Testen Sie diesen Schritt mit dem Testfall test_math_op_instantiate
in der Datei test_mathop_class_instantiation.py
.
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.
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
.
Implementieren Sie nun die Klasse Calculator
in der Datei calculator.py
.
Diese Methode schreibt das Ergebnis in den Stdout.
Testen Sie die Klasse mit den Testfällen aus der Datei test_calculator.py
.
Implementieren Sie in der Datei main.py
die Hauptroutine (main
).
Hier werden die Exceptions gefangen und verarbeitet.
Das heisst, 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.