Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m320_2024:learningunits:lu11:aufgaben:calculator [2024/10/22 08:00] – angelegt msutermodul:m320_2024:learningunits:lu11:aufgaben:calculator [2024/10/22 13:39] (aktuell) msuter
Zeile 1: Zeile 1:
-==== Aufgabe 3 - Abstrakte Klasse für Taschenrechner ==== +====== LU11.A02 - Abstrakte Klasse für Taschenrechner ====== 
-=== Ziel ===+===== Ziel =====
 Sie können eine umfassende Aufgabe mit diversen Techniken der OOP umsetzen. Sie können eine umfassende Aufgabe mit diversen Techniken der OOP umsetzen.
-=== Auftrag === + 
-Sie implementieren einen einfachen Rechner mit den Grundoperationen +, -, *, /, basierend auf dem gezeigten Klassendiagramm.\\ +===== Auftrag ===== 
-{{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_calculator.png?1000|}}\\ +Sie implementieren einen einfachen Rechner mit den Grundoperationen +, -, *, /, basierend auf dem gezeigten Klassendiagramm. 
-**Beachte:**\\+ 
 +{{:modul:m320_2024:learningunits:lu11:aufgaben:calculator.png?600|}} 
 + 
 +==== Hinweise ==== 
   * Die beiden Klassen ''Reader'' und ''Tokenizer'' sind vorgegeben und sollen/dürfen durch Sie nicht verändert werden.   * Die beiden Klassen ''Reader'' und ''Tokenizer'' sind vorgegeben und sollen/dürfen durch Sie nicht verändert werden.
   * Die Klasse ''ZeroDivisionError'' stammt aus der Python-Bibliothek und darf **nicht** selber implementiert werden. Sie ist der Vollständigkeit wegen im Diagramm skizziert.   * Die Klasse ''ZeroDivisionError'' stammt aus der Python-Bibliothek und darf **nicht** selber implementiert werden. Sie ist der Vollständigkeit wegen im Diagramm skizziert.
   * Die beiden Exception-Klassen (''NumberFormatException'' und ''OperationException'') erben von ''Exception''. Das ist hier im Diagramm aus Platzgründen nicht mehr gezeigt.   * Die beiden Exception-Klassen (''NumberFormatException'' und ''OperationException'') erben von ''Exception''. Das ist hier im Diagramm aus Platzgründen nicht mehr gezeigt.
-  * Die Getter-Methoden werden "pythonlike" als ''@property'' implementiert, also ohne den Vorsatz get_···. 
   * Pushen Sie jede Teilaufgabe mit Codegenerierung auf github.   * Pushen Sie jede Teilaufgabe mit Codegenerierung auf github.
-\\ + 
-**Aufgabe 1**\\ +===== Schritt ===== 
-Laden Sie das Repo von github-classrommDer Link findet sich im Moodle Kurs.\\ + 
-\\ +  - Akzeptieren Sie das Assignment im GitHub Classroom. 
-**Aufgabe 2**\\+  Klonen Sie das Repository in Ihre Entwicklungsumgebung. 
 +  - Prüfen Sie, dass ''pytest'' und ''pylint'' funktionieren
 + 
 +===== Schritt ===== 
 Studieren Sie den Code der Klasse ''Reader'' Studieren Sie den Code der Klasse ''Reader''
    * Was fällt Ihnen auf?     * Was fällt Ihnen auf? 
    * Was bewirkt eine Klasse, die als **Singleton** deklariert ist? Studieren Sie dazu das WEB. Wir haben das Thema **Singleton** auch schon einmal kurz angesprochen.    * Was bewirkt eine Klasse, die als **Singleton** deklariert ist? Studieren Sie dazu das WEB. Wir haben das Thema **Singleton** auch schon einmal kurz angesprochen.
-Besprechen Sie Ihre Erkenntnisse mit der Lehrperson.\\ + 
-\\ +===== Schritt ===== 
-**Aufgabe 3**\\ +Implementieren Sie die beiden Exception-Klassen (in der Datei ''exceptions.py'').  
-Implementieren Sie die beiden Exception-Klassen (in der Datei ''exceptions.py''). Sie erben von der Klasse ''Exception'' aus der Python Bibliothek.\\+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.    * ''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.\\ +   * ''NumberFormatException'' gibt folgenden Hinweis aus: "ERROR: //VALUE// ist ein ungültiger Zahlenwert". Hier steht //VALUE// als Platzhalter für den konkret falsch eingegebenen Text.\\ 
-\\  + 
-**Aufgabe 4**\\ +===== Schritt ===== 
-Implementieren Sie die abstrakte Klasse ''MathOp'' (in der Datei ''math_operations.py'') gemäss der Theorie in LU07+ 
 +Implementieren Sie die abstrakte Klasse ''MathOp'' (in der Datei ''math_operations.py'') gemäss den Beispielen in der Theorie. 
    * Halten Sie sich an das Klassendiagramm. Es zeigt ihnen - durch //kursive// Nennung - die abstrakte Methode.    * Halten Sie sich an das Klassendiagramm. Es zeigt ihnen - durch //kursive// Nennung - die abstrakte Methode.
    * Implementieren Sie die andere Methode als Property. Sie ist nicht abstrakt und muss daher einen Code enthalten.    * Implementieren Sie die andere Methode als Property. Sie ist nicht abstrakt und muss daher einen Code enthalten.
-Testen Sie diesen Schritt mit dem Testfall ''test_math_op_instantiate'' in der Datei ''test_mathop_class_instantiation.py''.\\ + 
-\\ +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.\\ +===== Schritt ===== 
-   * Erstellen Sie diese 4 Klassen auch in der Datei ''math_operations.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. 
 + 
 +   * Erstellen Sie diese 4 Klassen jeweils in einer eigenen Datei.
    * Die Funktion ''execute_op'' "weiss" jeweils, welche Operation sie mit den beiden Zahlenwerten ausführen muss.    * Die Funktion ''execute_op'' "weiss" jeweils, welche Operation sie mit den beiden Zahlenwerten ausführen muss.
-   * Beachten Sie, dass die Klasse ''Divider'' bei einer Division mit 0 die entsprechende Exception (''ZeroDivisionError'') werfen muss.\\ +   * Beachten Sie, dass die Klasse ''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''.\\ + 
-\\ +Testen Sie die Klassen mit den entsprechenden Testfällen aus der Datei ''test_math_operations.py''
-**Aufgabe 6**\\+ 
 +===== Schritt ===== 
 Implementieren Sie nun die Klasse ''Calculator'' in der Datei ''calculator.py'' Implementieren Sie nun die Klasse ''Calculator'' in der Datei ''calculator.py''
    * Halten Sie sich an die Vorgaben des Klassendiagramms und an die Hinweise in der Datei.    * Halten Sie sich an die Vorgaben des Klassendiagramms und an die Hinweise in der Datei.
-   * Wichtig ist, dass Sie hier keine Exceptions fangen und auswerten. Das geschieht dann alles in der main-Routine.\\ +   * Wichtig ist, dass Sie hier keine Exceptions fangen und auswerten. Das geschieht dann alles in der main-Routine. 
-   * Die Methoden sind entsprechend der folgenden Sequenzdiagramme zu implementieren: \\ - ''read_input'' \\ {{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_sequenz-1.png?400|}} \\ - ''create_concrete_op'' am Beispiel der Addierfunktion (Klasse ''Adder'')\\ {{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_sequenz-2.png?450|}} \\ - ''calculate'' schreibt das Ergebnis in den Stdout. \\ {{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_sequenz-3.png?450|}}+   * Die Methoden sind entsprechend der folgenden Sequenzdiagramme zu implementieren:  
 +   *  
 +==== read_input ==== 
 +  
 +{{:modul:m320_2024:learningunits:lu11:aufgaben:read_input.png?400|}} 
 + 
 +==== create_concrete_op ==== 
 + 
 +Hier am Beispiel der Addierfunktion (Klasse ''Adder''gezeigt: 
 + 
 +{{:modul:m320_2024:learningunits:lu11:aufgaben:concrete_op.png?400|}} 
 + 
 +==== calculate ==== 
 +Diese Methode schreibt das Ergebnis in den Stdout.  
 + 
 +{{:modul:m320_2024:learningunits:lu11:aufgaben:calculate.png?400|}}
  
 Testen Sie die Klasse mit den Testfällen aus der Datei ''test_calculator.py''.\\ Testen Sie die Klasse mit den Testfällen aus der Datei ''test_calculator.py''.\\
-\\ + 
-**Aufgabe 7**\\ +===== Schritt ===== 
-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. +Implementieren Sie in der Datei ''main.py'' die Hauptroutine (''main''). 
-Halten Sie sich dabei an das folgende Sequenzdiagramm. \\ {{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_sequenz-4.png?450|}}\\ +Hier werden die Exceptions gefangen und verarbeitet. 
-\\ +Das heisst, dass jeweils eine entsprechende Meldung auf den Stdout (mit ''print''-Befehl) ausgegeben wird. 
-Führen Sie das Programm aus. Sie sollten eine vergleichbare Ausagbe erhalten.\\+Halten Sie sich dabei an das folgende Sequenzdiagramm.  
 + 
 +{{:modul:m320_2024:learningunits:lu11:aufgaben:main.png?400|}} 
 + 
 +Führen Sie das Programm aus.  
 +Sie sollten eine vergleichbare Ausagbe erhalten. 
 {{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_output.png?350|}} {{:modul:m320:learningunits:lu99:aufgaben:lu07-aufg3_output.png?350|}}
  
  
-=== Abgabe === +===== Abgabe ===== 
-Die Teilaufgaben werden laufend auf github mittels push-Befehl abgelegt.\\ +Die Teilaufgaben werden laufend auf GitHub mittels ''push'' abgelegt.
-Wenn Ihr Programm erfolgreich ausgeführt werden kann, zeigen sie die Lösung der ''main''-Methode Ihrer Lehrperson.+
  
 ---- ----
-[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) René Probst+{{tag>M320-LU11}} 
 +[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] René Probst, bearbeitet durch Marcel Suter
  • modul/m320_2024/learningunits/lu11/aufgaben/calculator.1729576855.txt.gz
  • Zuletzt geändert: 2024/10/22 08:00
  • von msuter