Bruchrechner Stand: 10.05.2017 Jahrgangsstufen Lernbereich 2: Modul 2.6.2 Fach/Fächer Übergreifende Bildungsund Erziehungsziele Zeitrahmen Benötigtes Material Informationstechnologie Technische Bildung 4-5 Doppelstunden SEMIOOS (freie Software) Kompetenzerwartungen Die Schülerinnen und Schüler analysieren Aufgabenstellungen (z. B. Programm für das Rechnen mit Brüchen) und erstellen hierfür objektorientierte Modelle unter Verwendung standardisierter Notationsformen. entwickeln Lösungsansätze mithilfe von Algorithmen (z. B. für eine Methode zur Addition zweier Brüche). implementieren objektorientierte Programme mit einem geeigneten Programmierwerkzeug testen und optimieren ihre objektorientierten Programme. Aufgabe Entwickle eine Softwareanwendung für das Rechnen mit Brüchen. Beachte dabei folgende Vorgaben: Das Programm soll... eine grafische Oberfläche besitzen. zwei Brüche auf Knopfdruck addieren, subtrahieren, multiplizieren oder dividieren können. das Ergebnis wiederrum als gekürzten Bruch ausgeben. CC0, https://www.iconfinder.com/icons/107 230/app_window_icon (Stand: 01.06.2016) Seite 1 von 12
Hilfestellung (gestufte Hilfestellungen im Sinne der inneren Differenzierung) Stufe 1: Keine vorgegebene Hilfestellung Die Schülerinnen und Schüler entwickeln den Bruchrechner gemäß den Phasen der Softwareentwicklung, z. B. dem Wasserfallmodell mit Analyse, Entwurf, Implementierung und Test/Wartung. Dabei strukturieren und planen sie das Vorgehen weitgehend selbst. Stufe 2: Mittlere Hilfestellung Hier eine Checkliste für den Entwurf des Bruchrechners: Grafische Programmoberfläche Klassenkarte BRUCH (Welche Attribute sind relevant? Welche Methoden braucht man?) Wie funktioniert das Rechnen mit Brüchen (addieren, subtrahieren, multiplizieren, dividieren, kürzen)? Algorithmen für die Methoden entwickeln und notieren Wichtiger Hinweis: Entwickle deine Methoden möglichst modular, um unnötige Programmierarbeit zu vermeiden und effizient zu arbeiten. Stufe 3: Umfangreiche Hilfestellung Die Schülerinnen und Schüler bekommen folgende Vorgaben: So soll die grafische Oberfläche des Bruchrechners aussehen: Hier eine Checkliste für den Entwurf des Bruchrechners: Grafische Programmoberfläche gemäß Vorlage erstellen (Oberflächenklasse) Klasse Bruch (Klassenkarte mit relevanten Attributen, Methoden) Wie funktioniert... Seite 2 von 12
o das Kürzen von Brüchen? o das Addieren bzw. Subtrahieren zweier Brüche? o das Multiplizieren zweier Brüche? o das Dividieren zweier Brüche? o das Einlesen der Eingaben über die Programmoberfläche o die Ausgabe der Ergebnisse? Was ist bzgl. der Eingabe von Zähler und Nenner zu beachten? Algorithmus für Hilfsmethode kuerzen( ) Algorithmus für Hilfsmethode kgv(zahl_1: Ganzzahl, zahl_2: Ganzzahl) Algorithmus für Hilfsmethode ggt(zahl_1: Ganzzahl, zahl_2: Ganzzahl) Algorithmus für Methode addieren(bruch_2: BRUCH) Algorithmus für Methode subtrahieren(bruch_2: BRUCH) Algorithmus für Methode multiplizieren(bruch_2: BRUCH) Methode dividieren(bruch_2: BRUCH) Wichtiger Hinweis: Entwickle Deine Methoden möglichst modular, um unnötige Programmierarbeit zu vermeiden und effizient zu arbeiten. Hinweise zum Unterricht Vorausgesetzte Inhalte Grundlagen im Umgang mit der Software SEMIOOS: Die Schülerinnen und Schüler sollten bereits in der Lage sein, kleine Softwareanwendungen mit SEMIOOS möglichst selbstständig umzusetzen (z. B. Berechnung des BMI nach Eingabe von Größe und Gewicht). Phasen der Softwareentwicklung Standardisierte Notationsformen, z. B. Klassenkarte, Klassendiagramm, Struktogramm Prinzipien der Programmierung Vorgehensweise bei Programmtest und optimierung Videoanleitungen zu SEMIOOS In der Mediathek von https://www.mebis.bayern.de finden Sie unter dem Suchbegriff semioos Videoanleitungen zur Bedienung der Programmierumgebung. Sozialform Es bietet sich an, die Analyse und den Entwurf in Partnerarbeit oder Kleingruppen zu machen und die anschließende Implementierung und Testarbeit in Einzelarbeit umzusetzen. Seite 3 von 12
Lösungshinweise Illustrierende Aufgaben zum LehrplanPLUS Die Aufgabenlösung wird hier exemplarisch anhand der Entwicklungsumgebung SEMIOOS vorgestellt. Anhand der abgebildeten Struktogramme sollte die Implementierung aber auch in anderen Programmiersprachen bzw. Entwicklungsumgebungen gut möglich sein. Hinweise zum Ablauf der Aufgabenbearbeitung Es wird empfohlen, die Aufgabe gemäß den üblichen Phasen der Softwareentwicklung (z. B. wie hier nach dem sog. Wasserfallmodell) zu bearbeiten (siehe Abb. 1: Phasen der Softwareentwicklung). Abbildung 1: Phasen der Softwareentwicklung 1. Die Analyse Bei der Analyse ist das Vorgehen nach dem EVA-Prinzip (Eingabe - Verarbeitung - Ausgabe) eine mögliche Strategie: Was wird eingegeben? Zwei Brüche, jeweils durch Eingabe eines ganzzahligen Zählers und Nenners Was geschieht bei der Verarbeitung? Durch Drücken entsprechender Schaltflächen sollen die eingegebenen Brüche addiert, subtrahiert, multipliziert oder dividiert werden. Was wird ausgegeben? Der Ergebnis-Bruch in Form eines ganzzahligen Zählers und Nenners, in gekürzter Form Was ist sonst noch zu beachten? Die Division durch Null muss abgefangen werden, d. h. Eingabe von 0 für einen Nenner ist unzulässig! Seite 4 von 12
2. Der Entwurf 2.1 Die grafische Oberfläche Abbildung 2: Beispiel für eine mögliche Programmoberfläche des Bruchrechners Man beginnt mit der grafischen Oberfläche (GUI) des Bruchrechners. Diese kann man z. B. als Objektdiagramm (Objektbaum, siehe Abb. 3) darstellen. Viele Schüler werden diese Notationsform vielleicht schon aus Modul 1.2 (vgl. Object Draw) kennen. Der Objektbaum zeigt die Objekte, die in einer Instanz der Oberflächenklasse BRUCHRECHNER vorkommen. Alternativ könnte man auch ein UML-Klassendiagramm (siehe Abb. 4) verwenden, das die Teil-Ganzes-Beziehungen zwischen den einzelnen Klassen veranschaulicht. Abbildung 3: Objektdiagramm GUI Bruchrechner Seite 5 von 12
Abbildung 4: Klassendiagramm GUI Bruchrechner Für die Benennung der Objekte sollten zugunsten der Übersichtlichkeit gängige Konventionen eingehalten werden, wie z. B. das Präfix lbl_ für Beschriftungsfelder (Label), tf_ für Textfelder und btn_ für Befehlsschaltflächen (Button). Der Grobentwurf der Programmoberfläche kann auch mit Bleistift und Papier erfolgen. 2.2.2 Die Klasse Bruch Definition der Klasse BRUCH Relevante Attribute identifizieren und geeignete Datentypen festlegen Notwendige Methoden der Klasse BRUCH bestimmen und deren Übergabeparameter und Rückgabewerte festlegen o addieren(bruch2:bruch) o subtrahieren(bruch2:bruch) o multiplizieren(bruch2: BRUCH) o dividieren(bruch2:bruch) o kuerzen() Notwendige Hilfsmethoden o ggt(zahl1: GANZEZAHL, zahl2:ganzezahl) o KgV(zahl1: GANZEZAHL, zahl2:ganzezahl) Abbildung 5: Klassenkarte für die Klasse BRUCH Seite 6 von 12
Abbildung 6: Struktogramm für die Methode addieren(...) Abbildung 7: Struktogramm für die Methode subtrahieren(...) Abbildung 8: Struktogramm für die Methode multiplizieren(...) Seite 7 von 12
Abbildung 9: Struktogramm für die Methode dividieren(...) Abbildung 10: Struktogramm für die Methode kuerzen() Abbildung 11: Struktogramm für die Hilfsmethode ggt(...) Seite 8 von 12
Abbildung 12: Struktogramm für die Hilfsmethode kgv(...) Für die Schüler sollte erläutert werden, wieso die Methoden addieren(...) und subtrahieren(...) als Übergabeparameter nur eine Instanz der Klasse BRUCH benötigen. Grund hierfür ist, dass z. B. bei der Addition der 1. Summand der Bruch selbst ist, der die Methode aufruft. Der Übergabeparameter ist dann der 2. Summand. Für die Erstellung der Struktogramme kann man den Schülern die Algorithmen beispielsweise in Form von Pseudocode oder Funktionsformeln bereitstellen. Größter gemeinsamer Teiler (ggt): Algorithmus von Euklid (Klassische Form) Die Parameter a und b stehen für die zwei Zahlen, deren ggt berechnet werden soll. wenn a = 0 dann return b sonst solange b 0 wenn a > b dann a = a - b sonst b = b - a return a Kleinstes gemeinsames Vielfaches (kgv): Formel mit ggt Die Parameter a und b stehen für die zwei Zahlen, deren kgv berechnet werden soll kgv a, b = a b ggt(a, b) 2.2.3 Die Oberflächenklasse Bruchrechner Die Oberflächenklasse BRUCHRECHNER ist in erster Linie für das zuständig, was man von dem Programm sieht. Für jede Befehlsschaltfläche muss eine Methode definiert werden, in unserem Fall Seite 9 von 12
also für die vier Rechenoperationen. Da wir die Methoden bereits in der Klasse BRUCH definiert haben, müssen wir diese beim Klicken nur noch mit Werten versorgen und aufrufen. Abbildung 13: Die Oberflächenklasse BRUCHRECHNER Die Oberflächenklasse BRUCHRECHNER (siehe Abb. 13) ist eine Unterklasse der Klasse HAUPTFENSTER(JFrame), was aber für die Schüler eigentlich weniger von Belang und eher etwas für besonders Wissbegierige ist. Wichtig ist, dass hier alle Oberflächenelemente als Attribute vertreten sind und für die Klick-Ereignisse der Buttons jeweils eine Methode definiert ist. Die Aufgabe der Methode inputcheck() ist, die Eingaben auf Vollständigkeit und Gültigkeit (Nenner 0) zu überprüfen und ggf. eine Meldung auszugeben. Abbildung 14: Struktogramm für die Methode inputcheck() Seite 10 von 12
Abbildung 15: Struktogramm für die Methode btn_addierenklick(), die durch Klick auf die Befehlsschaltfläche "addieren" ausgeführt wird. Die anderen Methoden zum Addieren, Multiplizieren und Dividieren können analog dazu erstellt werden. 2.3 Implementierung Die Implementierung erfolgt hier exemplarisch komplett in der Programmierumgebung SEMIOOS. Die Struktogramme können 1:1 in SEMIOOS eingegeben werden. Alternativ kann man Entwurfsphase und Implementierungsphase durch die Möglichkeiten von SEMIOOS verschmelzen und die Struktogramme gleich in SEMIOOS erstellen, was gleichzeitig die Programmierung der Methoden darstellt. Nicht zu vergessen ist die Definition der Startanweisung für den Appletaufruf eine häufige Fehlerund Frustrationsquelle (siehe Abb. 16). Abbildung 16: Staranweisung definieren nicht vergessen! Um unseren Bruchrechner in SEMIOOS zu starten und zu testen, haben wir zwei Möglichkeiten: 1. Ausführen der.jar-datei Seite 11 von 12
2. Java-Applet (eingebunden in ein HTML-Gerüst) erzeugen ACHTUNG: Es kann sein, dass aufgrund eines Bugs bei der Erstellung von Java- Applet-Archiv und HTML-Gerüst folgender Fehler auftaucht: Manchmal wird bei der Erzeugung der.jar Datei ein Leerzeichen hinten an den Dateinamen angehängt (anstatt xy.jar heißt die Datei dann xy.jar ). Das Applet bzw. die HTML-Seite funktioniert dann nicht. Man kann das Problem lösen, indem man die Datei umbenennt und das Leerzeichen hinter xy.jar durch Umbenennen entfernt. Anregung zum weiteren Lernen Es bietet sich an, die Aufgabe mithilfe einer anderen Programmierumgebung wie z. B. Processing oder einer anderen Programmiersprache wie z. B. Python umzusetzen. Seite 12 von 12