Zusätzliche Unterrichtsmaterialien für Eclipse
Transcription
Zusätzliche Unterrichtsmaterialien für Eclipse
Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Zusätzliche Unterrichtsmaterialien für Eclipse OOP_100_A Objektorientierte Anwendungsentwicklung – Einführung Situation: In einem beruflichen Gymnasium läuft eine Kampagne gegen falsche Ernährung und Übergewicht. Es soll eine Software entwickelt werden, die den Body-Mass-Index ausrechnet. Mit dieser Kennziffer lässt sich feststellen, ob die betreffende Person Übergewicht hat. Sie sollen einen objektorientierten Ansatz zur Berechnung des BMI für eine Person in JAVA aufzuzeigen. Zum ersten Mal wird nun eine eigene Klasse entwickelt, die die fachlichen Anforderungen abbildet. Die zu entwickelnde Klasse wird deshalb Fachklasse (Anwendungsklasse) genannt. Aufgaben: 1. Welche Eigenschaften müssen über eine Person festgehalten werden, damit für sie der BMI ermittelt werden kann? 2. Was müssen wir für die Person ermitteln/errechnen können? 3. Tragen Sie Ihre Daten in den Fragebogen (siehe Anlage 1) ein. 4. Was haben die Fragebogenformularobjekte gemeinsam, worin unterscheiden sie sich? 5. Informieren Sie sich über die Beziehung zwischen Objekten und einer Klasse (Info-Blatt) 6. Stellen Sie die Attribute und Methoden in einem vorläufigen UML-Klassendiagramm handschriftlich dar und beschreiben Sie seinen Aufbau. 7. Starten Sie Eclipse und legen Sie ein neues Java-Projekt mit dem Namen „projektBMI_01“ und darin ein Paket mit Namen paketBMI_01an. 8. Starten Sie in Eclipse den UML-Editor Omondo und modellieren Sie eine neue Klasse Person. 9. Erläutern Sie die Bestandteile des erstellten Klassendiagramms. 10. Beim Erstellen des Klassendiagramms wurden für jedes angelegte Attribut Zugriffsmethoden generiert. Welche Bedeutung haben diese Zugriffsmethoden und wie sind sie aufgebaut? 11. Mit dem Modellieren der Klasse Person wird gleichzeitig der Quellcode in Java generiert. Beschreiben Sie den formalen Aufbau des Java-Codes für (1) die Klasse Person (2) die Zugriffsmethoden 12. Erklären sie die folgenden Begriffe: public, private, primitive Datentypen, Objekttypen, Rückgabetyp, Parameter und Variable Seite 108 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Fragebogen :person1 :person2 Name: _________________________ Name: __________________________ Geschlecht: _____________________ Geschlecht: _____________________ Alter: __________________________ Alter: __________________________ Gewicht in kg: Gewicht in kg: Koerperlaenge in cm: _____________ Koerperlaenge in cm: _____________ Anzeige: :person1 :person2 Name: _________________________ Name: __________________________ Geschlecht: _____________________ Geschlecht: _____________________ Alter: __________________________ Alter: __________________________ Gewicht in kg: Gewicht in kg: Koerperlaenge in cm: _____________ Koerperlaenge in cm: _____________ Anzeige: Seite 109 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Information: Objekt - Klasse Ausschnitte der realen Welt Erklärung Ein Objekt ist eine Abstraktion von Dingen der realen Welt mit einer - eindeutigen Bezeichnung (Namen) - Eigenschaften und einem - Verhalten Ingo Helmut Inge Abstrakte Beschreibung erfolgt in der Klasse Eine Klasse ist der Plan zum Erzeugen von Objekten Person name alter geschlecht koerperlaenge gewicht berechneBMI Eigenschaften (Attribute) Verhalten (Methoden) Alle Objekte der Klasse habe die gleichen Eigenschaften (=Attribute) und das gleiche Verhalten (=Methoden) Elemente von Klassen werden als Objekte oder als Exemplare der Klasse bezeichnet. Erzeugung - Objekte der Klasse Person person1 name=Ingo alter= 19 geschlecht = m usw Seite 110 person2 name=Helmut alter= 21 geschlecht = m usw. person3 name=Inge alter= 20 geschlecht = w usw. Der Zustand eines Objekts ist durch die Attributswerte gegeben. Mit Methoden können die Attributswerte verändert werden. Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_100_L Objektorientierte Programmierung am Beispiel einer Person Zu 1. + 2. Grundidee der objektorientierten Modellierung ist, dass Personen, Gegenstände, Sachen oder Sachverhalte mit Objekten beschrieben werden. • Die charakteristischen Eigenschaften eines Objekts werden mit Attributen erfasst. Die Attributswerte beschreiben den Zustand eines bestimmten Objekts. Jedes Objekt hat eine eigene Identität und ist von anderen Objekten eindeutig zu unterscheiden. • Das Verhalten eines Objekts wird mit Operationen/Methoden erfasst/verändert. Zu 3. + 4. Fragebogenauszug :person1 :person2 Name: I Ingo Name: Inge Geschlecht: m Geschlecht: w Alter: 20 Alter: 19 Gewicht in kg: 80 Gewicht in kg: 60 Koerperlaenge in cm: 180 Koerperlaenge in cm: 170 Anzeige Attribute 24,69 20,76 Attributswerte Attribute Attributswerte Die Objekte besitzen die gleichen Attribute mit unterschiedlichen Attributswerten Zu 6. Klassen sind die Baupläne für Objekte. Objekte werden als Exemplare (Instanzen) von Klassen bezeichnet. UML (Unified Modeling Language) ist eine grafische Sprache zur Beschreibung objektorientierter Modelle. Seite 111 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Anmerkung: Eventuell als Tafelanschrieb erstellen - zunächst nur die Attribute und die Methode zum Berechnen berücksichtigen. Das Modell wird anschließend um die Zugriffsmethoden erweitert. Attribute der Klasse Person: • Hat ein Geschlecht • Hat eine Körperlänge • Hat ein Gewicht • Hat einen Namen • Hat ein Alter Klassendiagramm Klassennamen Attribute mit Datentypen Methoden der Klasse Person: • BMI berechnen Methoden Zu 7. + 8. Siehe Handreichung Seite 14- 20. Zu 9. Es sollte folgendes Klassendiagramm erscheinen: Klassennamen Attribute mit Datentypen: • int – ganze Zahlen • double – Dezimalzahlen • String - Zeichenketten Methoden: Allgemeine Methoden • Zugriffsmethoden - set-Methoden zum Einlesen der Attributswerte in das Objekt - get-Methoden zum Auslesen der Attributswerte aus dem Objekt Seite 112 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Zu 10. (siehe HR Seite 21 und ppt-Folien) Seite 113 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Zu 11. Seite 114 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Zu 12. Klasse ist der Bauplan für die Objekte. Die Klasse legt fest, welche Attribute und Methoden die Objekte dieser Klasse "haben" sollen. Von einer Klasse können viele Objekte erzeugt werden, je nach Aufgabe/Problemstellung. Objekt Mit den von einer Klasse erzeugten Objekten können die Aufgaben des Programms gelöst/realisiert werden. Ein Objekt hat die Attribute und verfügt über die Methoden, die in "seiner" Klasse festgelegt wurden. Attribut sind die Eigenschaften/Datenfelder eines Objekts. Die Attribute haben - einen Attributsnamen, z.B. name, gewicht und - einen Attributswert, z.B. Ingo, 80 Alle Objekte einer Klasse haben die gleichen Attribute (wie die Datensätze einer Datenbank-Tabelle): - die gleiche Anzahl, - jeweils den gleichen Typ und - den gleichen Namen der Attribute. Die Attribute unterscheiden sich nur durch ihre Attributswerte! Methode tun das, was von diesem Programm erwartet wird, z.B. den BMI berechnen. Dabei ändert eine Methode (meist) die Attributswerte des Objekts. Die Methoden werden in der jeweiligen Klasse festgelegt. Folglich "haben" alle Objekte dieser Klasse die gleichen Methoden. Es kann immer nur die Methode eines Objekts aufgerufen werden. Dadurch ist sichergestellt, dass auch nur die Attributswerte dieses Objektes geändert werden. public definiert die Sichtbarkeit eines Attributs, eines Konstruktors oder einer Methode: Sie sind sowohl innerhalb der definierten Klasse sowie von anderen Klassen zugreifbar private definiert die Sichtbarkeit eines Attributs, eines Konstruktors oder einer Methode: Sie sind ausschließlich innerhalb der definierten Klasse zugreifbar primitive Datentypen werden direkt in Variablen gespeichert. byte, short, int, long, float, double, char, boolean Objekttypen wie z.B. String, werden als Referenz auf Objekte gespeichert. Sie müssen immer erst erzeugt werden, z.B.: private String artikelNr = new String(); Rückgabetyp ist der Datentyp, den eine Methode zurückgibt (liefert). Parameter sind Daten, die ein Benutzer des Programms der Methode übergibt, damit die Methode damit etwas tun kann. Der Methodenkopf gibt an, - wie viele Daten/Parameter und - jeweils von welchem Datentyp erwartet werden. Variable ist der Name für einen Platzhalter/eine Speicherstelle im RAM des Computers Datentyp legt fest, welche Art von Daten einer Methode übergeben werden sollen, z.B. - int für ganze Zahlen, - String für Text - boolean für wahr oder falsch Seite 115 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_200_Startklasse_A Nutzung der Klasse Person Information Die Fachklasse liefert lediglich die Vorlage (=Schablone) für die in der Startklasse initiierten Objekte. • Die Fachklasse ist eine statische Klasse Die Startklasse ist eine dynamische Klasse Die Klasse Startklasse dient dazu • ein oder mehrere Objekte mit Hilfe der Fachklasse anzulegen • mit Hilfe der Methoden der Fachklasse - Attributswerte zu übernehmen - Attributswerte auszugeben Ausführen von Java-Programmen Java-Quellcode (Klassen) Compiler (Übersetzer) Java-Bytecode (Zwischencode) VM (virtuelle Maschine, Interpreter) Prozessor Seite 116 Für Klassen wird der Java-Quellcode geschrieben und in der Datei .Java im Projektverzeichnis gespeichert. Ein Programm kann aus einer oder mehreren Klassen bestehen. Beim Start der Java-Anwendung wird zunächst aus dem Quellcode kompiliert (übersetzt). Dabei werden vom Compiler Schreibfehler und Widersprüche gegen JavaKonventionen erkannt. Das Zwischenergebnis ist der Java-ByteCode. Der Interpreter (virtuelle Maschine VM) sucht nach der main-Methode und führt deren Anweisungen aus. Java-Programme laufen auf allen Prozessoren(und Betriebssystemen) gleich ab. Person.Java enthält den Quellcode der Klasse Person Person.class mit dem Java-Bytecode der Klasse Person Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Aufgaben Starten Sie Eclipse mit dem bereits angelegten Projekt projektBMI_01. 1. Erstellen Sie die dynamische Klasse Startklasse, die die Klasse Person benutzen soll. 2. Warum benötigt die Startklasse die main-Methode? 3. Beschreiben Sie die Schritte, die in der main-Methode ablaufen müssen, damit nebenstehend abgebildete Konsolenanzeige erreicht wird: 4. Was passiert beim Deklarieren und Erzeugen des Objekts person_1 mit der Anweisung Person person_1 = new Person() 5. Beschreiben Sie allgemein, wie in einem Objekt eine Methode der Klasse aufgerufen wird. 6. Geben Sie den Java-Code für den unter 4. beschriebenen Ablauf an. Ergänzen Sie Ihren Code mit sinnvollen Kommentaren. 7. Exportieren Sie das Projekt projektBMI_01 in ein Sicherungsverzeichnis, beispielsweise ..\EclipseProjekte 8. Informieren Sie sich und erklären Sie folgende Begriffe im Zusammenhang mit der Programmentwicklung mit Java unter Eclipse. Begriff Erklärung Editor Quellcode Compiler Bytecode Interpreter main-Methode Standardkonstruktor Seite 117 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 200_OOP_L Lösungsvorschläge Zu 2.) Siehe Handreichung Seite 24 ff. Die Startklasse kann mit Hilfe des UML-Editors oder direkt im Paket mit der Menüanweisung File New Class erzeugt werden. Zu 3.) Mit Hilfe der main-Methode wird die Anwendung gestartet (siehe HR Seite 24) Zu 4.) • Objekt erzeugen • Attributswerte in das Objekt einlesen (übertragen) • Attributswerte aus dem Objekt auslesen und im Konsolenfenster anzeigen Siehe Powerpoint Startklasse.ppt Siehe HR Seite 25 - 28 Zu 5.) Person person_1 = new Person(); Ein Objekt mit dem Namen person_1 wird nach dem Bauplan der Klasse Person vereinbart (deklariert) und mit Hilfe des Standardkonstruktors erzeugt. Die Anweisung kann auch auf zwei Schritte verteilt werden (ist manchmal sogar zwingend): Person person_1; - Objekt deklarieren Person_1 = new Person(); - Objekt erzeugen Zu 6.) Zum Methodenaufruf wird ein Objekt benötigt. Methodenaufruf allgemein: objekt.methode() zu 7.) // Objekt person_1 deklarieren und erzeugen Person person_1 = new Person(); // Attributswerte in das Objekt übertragen person_1.setName("Ingo"); person_1.setAlter(20); person_1.setGeschlecht("m"); person_1.setGewicht(80); person_1.setKoerperlaenge(180); // Attributswerte auslesen und im Konsolenfenster anzeigen System.out.println("Name: "+person_1.getName()); System.out.println("Geschlecht: "+person_1.getGeschlecht()); System.out.println("Alter: "+person_1.getAlter()); System.out.println("Gewicht: "+person_1.getGewicht()); System.out.println("Körpergröße: Seite 118 "+person_1.getKoerperlaenge()); Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Siehe auch Powerpoint„Startklasse.ppt“ Zu 7.) Allgemeiner Methodenaufruf: objekt.methode, z. B. person_1.setAlter(…). Zum Aufruf einer Methode wird immer ein Objekt benötigt. zu 8.) Die Anwenderfreundlichkeit des entwickelten Programms ist noch mangelhaft. Besser wäre eine Maske für die Dateneingabe und eine aufwändigere Datenausgabe. Siehe später zu 9.) In der Fachklasse (auch Anwendungsklasse) werden die fachlichen Probleme abgebildet (Attribute, Methoden) Zu 10.) Begriff Erklärung Editor Einfaches Computerprogramm zum Erstellen und Bearbeiten von Daten/Text. Wird verwendet zum Eingeben des Java-Quellcodes und ist Bestandteil der gängigen Entwicklungsumgebungen Quellcode Das in einer Programmiersprache formulierte Programm nennt man Quellcode oder auch Quellprogramm. Der Quellcode ist vom Menschen lesbar Compiler ist ein Programm, das den Quellcode in die spezielle Maschinensprache eines Computers übersetzt und ihn dauerhaft als Bytecode speichert. Schreibfehler und Widersprüche gegen die Sprachkonvention sind korrigiert. Wird vom Java-Compiler erzeugt und ist noch maschinenabhängig. Bytecode Interpreter Übersetzt den prozessorabhängigen Bytecode und führt in aus. Das Übersetzungsergebnis ist nicht dauerhaft. Die Übersetzung wird beim nächsten Programmstart wiederholt. main-Methode Startet die Anwendung. Standardkonstruktor Wird benötigt um Objekte zu erzeugen. Der Standardkonstruktor reserviert den notwendigen Speicher Seite 119 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 300_OOP_A Selbsterstellte Methoden - Berechnen des BMI Teil 1 Problemstellung: Für Schülerinnen und Schüler soll der Body-Mass-Index (BMI) ermittelt und angezeigt werden. In einer ersten Entwicklungsstufe soll der BMI lediglich errechnet und angezeigt werden. Geschlecht und Alter des Schülers / der Schülerin bleiben unberücksichtigt. Der Body-Mass-Index wird mit Hilfe der Formel BMI = gewicht errechnet. Dafür wird zu(koerperllaenge / 100) 2 nächst die Anweisung gewicht /((koerperlaenge/100*koerperlaenge/100)) benutzt. Erstellen Sie eine allgemeine Methode berechneBMI(), die als Rückgabewert den BMI liefert, der aus den Attributswerten des Objekts ermittelt wird Aufgaben 1. Starten Sie Eclipse mit dem Projekt projektBMI_01. Geben Sie dem Projekt den neuen Projektnamen projektBMI_02 (Menü Refaktor Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 2. In welche Klasse muss die Methode berechneBMI() aufgenommen werden? 3. Warum muss die Methode mit der Sichtbarkeit public deklariert werden? 4. Benötigt die Methode berechneBMI() einen Übergabeparameter oder gibt sie einen Wert zurück? 5. Erstellen Sie den Java-Code für die Methode berechneBMI(). Zuerst wird die lokale Variable bmi vom Typ double deklariert. Mit Hilfe der Formel (siehe Problemstellung) wird der BMI errechnet und der Variablen bmi zugewiesen. 6. Ergänzen Sie den Code der Startklasse um die Anweisung, mit der Sie den BMI berechnen und in der Konsole mit den Daten der Person anzeigen (siehe Abbildung) 7. Erläutern Sie den Unterschied zwischen einem Attribut eines Objekts und einer Speichervariablen (lokale Variable). Wie werden Werte in Speichervariable und wie in Attribute übernommen? Gehen Sie in diesem Zusammenhang auf den Begriff der „Kapselung“ ein. 8. In der oben dargestellten Anzeige wird der errechnete BMI mit 15 Nachkommastellen ausgewiesen. Nutzen Sie Klassenbibliothek Math aus dem Package java.lang und ergänzen Sie die Zeile zum Berechnen des BMI um eine Anweisung zum Runden des BMI auf ganze Zahlen: bmi = Math.round(this.gewicht/((this.koerperlaenge/100*this.koerperlaenge/100))); 9. Welchen Vorteil haben Klassenbibliotheken und wie werden Methoden aus Klassenbibliotheken im Unterschied zu Methoden aus Fachklassen aufgerufen? 10. Wie lautet die Anweisung zum Berechnen des BMI, wenn Sie die Methode pow(x,y) aus der Klasse Math verwenden. 11. Erläutern Sie den Aufbau von "linearen Programmen" (Serienstruktur). 12. Exportieren Sie das Projekt projektBMI_02 in das Sicherungsverzeichnis (z. B. ..\EclipseProjekte) Seite 120 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 300_OOP_L Selbsterstellte Methoden - Berechnen des BMI Teil 1 Erstellen Sie eine allgemeine Methode berechneBMI(), mit der der BMI mit Hilfe der Daten Aufgaben Zu 2. berechneBMI() ist eine Methode der Fachklasse Zu 3. Die Methode wird mit Hilfe des Objekts person_1 aus der Startklasse aufgerufen, muss also in der Startklasse „sichtbar“ sein. Zu 4. Die Methode liefert eine Kommazahl als Ergebnis. Sie benötigt daher einen Rückgabetyp double Zu 5. public double berechneBMI(){ // Variable für den zu berechnenden BMI deklarieren double bmi; // bmi berechnen und Ergebnis in bmi speichern bmi = gewicht /((koerperlaenge/100*koerperlaenge/100)) ; return bmi; // Rückgabe des Ergebnisses zu 6. System.out.println("BMI: "+ person_1.berechneBMI()); Zu 7. Speichervariablen gelten temporär nur in dem Block, in dem sie deklariert wurden. Sie erhalten den Wert durch Zuweisung (mVariable = wert, hier bmi = gewicht…..). Attribute sind die Variablen des Objekts. Sie erhalten ihren Wert über den Aufruf einer Methode (=Kapselung). Ihre Sichtbarkeit wird definiert (private, public…) Zu 8 + 9.. Der eigentliche Befehlsvorrat von Java kann gering gehalten werden. Für spezielle Anforderungen können Klassenbibliotheken, die in Packages organisiert sind, importiert werden. Die Klassen des packages java.long (z. B. die Klasse Math) müssen nicht importiert werden. Sie stehen standardmäßig zur Verfügung. Methoden aus Klassenbibliotheken werden nicht mit Hilfe eines Objektes, sondern mit dem Klassennamen aufgerufen. Beispiel: Math.round(….) Zu 10. bmi = gewicht/Math.pow(koerperlaenge/100, 2); Zu 11. Die Anweisungen werden der Reihe nach (immer in der gleichen Reihenfolge) abgearbeitet. Seite 121 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 310_OOP_A Berechnen des BMI Teil 2: Auswahlstruktur Problemstellung: Die Berechnung des Body-Mass-Index (BMI) ist nicht geeignet für Schülerinnen und Schüler unter 17 Jahren. Für diese Schülerinnen und Schüler soll anstelle des errechneten BMI die Meldung "BMI-Berechnung für Personen unter 17 Jahren ist nicht sinnvoll" angezeigt werden. Für alle anderen Schülerinnen/Schüler soll der BMI berechnet und angezeigt werden. Aufgaben 1. Starten Sie Eclipse mit dem Projekt projektBMI_02. Geben Sie dem Projekt den neuen Projektnamen projektBMI_03 (Menü Refaktor Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 2. Die Entscheidung, ob eine BMI-Berechnung sinnvoll ist, soll mit Hilfe einer eigenen Methode entscheideBMI(), getroffen werden. Nur wenn die BMI - Berechnung sinnvoll ist, soll die Methode berechneBMI() aus der Methode entscheideBMI() heraus ausgeführt werden und dann das Rechenergebnis liefern. Codieren Sie die Methode entscheideBMI() in Java. Die Methode enthält lediglich die Anweisung zum Berechnen des BMI und die Rückgabe des Ergebnisses mit Hilfe der Variablen bmi. 3. Erweitern Sie die Startklasse um ein zweites Objekt person_2 mit den in der folgenden Abbildung dargestellten Attributswerten. Die Anweisung, mit der die Methode berechneBMI() aufgerufen wird ist abzuändern. Jetzt muss die Methode entscheideBMI() aufgerufen werden. 4. Erklären Sie mit Hilfe des Javacodes der Methoden entscheideBMI() und berechneBMI(), den Ablauf der Methoden. 5. Sichern Sie Projekt mit dem Menübefehl File Export File System in ein Sicherungsverzeichnis. Seite 122 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 310_OOP_L Berechnen des BMI Teil 2: Auswahlstruktur Zu 2. ublic String entscheide(){ String bmi_String = null; // Ausgabestring // Auswahlstruktur if (this.alter<17) { bmi_String ="BMI-Berechnung nicht sinnwoll"; } else { bmi_String = "BMI: " + this.berechneBMI(); } return bmi_String; (3) } (1) (2) public double berechneBMI(){ //Vorläufig ohne Alters- und Geschlechtsberücksichtigung double bmi; //Berechnung des BMI mBMI = Math.round(this.gewicht/((this.koerperlaenge/100*this.koerperlaenge/100))); return bmi; } zu 3. // Attributswerte Objkekt person_2 auslesen und im Konsolenfenster anzeigen System.out.println("Name: "+ person_2.getName()); System.out.println("Geschlecht: " + person_2.getGeschlecht()); System.out.println("Alter in Jahren: " + person_2.getAlter()); System.out.println("Gewicht in kg: "+person_2.getGewicht()); System.out.println("Körpergröße in cm: "+person_2.getKoerperlaenge()); System.out.println(person_2.entscheide()); zu 4. (1) Aus der Methode entscheideBMI() heraus wird die Methode berechneBMI() aufgerufen (2) Die Methode double berechneBMI() liefert als Ergebnis eine Zahl vom Typ double. Diese wird in die Variable bmi übernommen. Der Ausgabestring wird aus dem Text „BMI: „ und dem Wert der Variablen mBMI zusammengesetzt (3) Die Methode String entscheideBMI() liefert als Ergebnis den Wert des Ausgabestrings. Seite 123 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 320_OOP_A Berechnen des BMI Teil 3: verschachtelte Auswahlstruktur Problemstellung: Da alle Schülerinnen und Schüler der Klasse über 17 Jahre alt sind, soll die Überprüfung des Alters zunächst entfallen und der BMI sofort berechnet werden. Je nachdem, wie der berechnete BMI ausfällt, soll die Anzeige in der Konsole zusätzlich zum berechneten BMI um einen Kommentar ergänzt werden: Bedingung für BMI Kommentar kleiner als 19 Untergewicht, mehr essen! Von 19 bis 23 Normalgewicht, schön dabei bleiben! Ab 24 Übergewicht, vernünftig ernähren! Für die Ausgabe der Attributswerte im Konsolenfenster soll sich der Ausgabestring bmi_String aus dem errechneten BMI (lokale Variable bmi) und dem jeweiligen Kommentar zusammensetzen. Aufgaben 1. Starten Sie Eclipse mit dem Projekt projektBMI_03. Geben Sie dem Projekt den neuen Projektnamen projektBMI_04 (Menü Refaktor Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 2. Mit Hilfe der Methode auswertenBMI() soll der jeweils errechnete BMI mit einem Kommentar versehen werden. Das nachstehende Struktogramm veranschaulicht, wie die Methode berechneBMI() aus der Methode auswertenBMI heraus aufgerufen wird. Anschließend wird der errechnete BMI ausgewertet und der jeweilige Kommentar der Variablen kommentar zugewiesen. Codieren Sie die Methode auswertenBMI() in der Fachklasse. 3. Wie wird die Methode auswertenBMI() in der Startklasse aufgerufen? Ergänzen Sie die Startklasse um geeignete Testdaten und führen Sie die Anwendung aus. 4. Nun soll auch noch berücksichtigt werden, dass die BMI-Berechnung nur für Personen ab 17 Jahren sinnvoll ist. Welche Änderung müssen sie in der Methode entscheideBMI() (siehe Aufgabe 310_OOP_A) vornehmen, damit für Personen ab dem 17. Lebensjahr die Auswertung des BMI vorgenommen wird. Erläutern Sie, wie die Methoden verschachtelt sind und welche Änderung in der Startklasse vorzunehmen ist. 5. Sichern Sie das Projekt mit dem Menübefehl File Export File System in ein Sicherungsverzeichnis. Seite 124 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 320_OOP_L Berechnen des BMI Teil 3: verschachtelte Auswahlstruktur public double berechneBMI(){ double mBMI; //Berechnung des BMI mBMI = Math.round(this.gewicht/((this.koerperlaenge/100*this.koerperlaenge/100))); return mBMI; } Zu 2. Methode berechneBMI für das aktuelle Objekt aufrufen und das Ergebnis in die variable bmi übernehmen public String auswertenBMI() { String bmi_string, kommentar; double bmi; bmi = this.berechneBMI(); if (bmi<19) {kommentar = "Untergewicht..."; } else { if (bmi < 24) { kommentar="Normalgewicht...."; } else { kommentar="Übergewicht..."; } } bmi_string = "BMI: " + bmi + " "+ kommentar; return bmi_string; } BMI auswerten Zu 3. System.out.println( person_1.auswertenBMI()); Zu 4. In der Startklasse ist die Methode entscheideBMI() auszuführen: System.out.println(person_2.entscheideBMI()) public String entscheideBMI() Wenn das alter unter 17 Jahre beträgt, { wird die Methode auswertenBMI() String bmi_String = null; // Ausgabestring aufgerufen, die wiederum die Methode if (this.alter< 17) berechneBMI() aufruft.(siehe oben zu { 2.) bmi_String ="BMI-Berechnung für Personen unter 17 Jahren ist nicht sinnvoll"; } else { bmi_String ="BMI: " + this.auswertenBMI(); } return bmi_String; } Seite 125 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 322_OOP_A Berechnen des BMI - Erweiterung Problemstellung: Die BMI-Berechnung soll nun noch um die nach dem Geschlecht getrennte Berechnung erweitert werden. Dabei sind die in der folgenden Tabelle angegebenen Grenzen zur Auswertung des BMI zu berücksichtigen und mit den dazugehörenden Kommentaren zu versehen. Weiblich Männlich Bedingung Kommentar u_grenze = 18 u_grenze = 19 bmi < u_grenze Untergewicht, mehr essen! dazwischen dazwischen o_grenze = 23 o_grenze = 24 Normalgewicht, schön dabei bleiben! bmi >= o_grenze Übergewicht, vernünftig ernähren! Aufgaben 1. Starten Sie Eclipse mit dem Projekt projektBMI_04. Geben Sie dem Projekt den neuen Projektnamen projektBMI_05 (Menü Refaktor Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 2. Das nachstehende Struktogramm beschreibt die Methode auswertenBMI() mit den in der Problemstellung beschriebenen Bedingungen. Codieren Sie die Methode in der Fachklasse Person. 3. In der Methode entscheideBMI() soll der Ausgabestring bmi_string aus dem Rückgabewerten der Methode auswertenBMI() gebildet werden. Ergänzen Sie den Java-Code. 4. Sichern Sie das Projekt mit dem Menübefehl File Export File System in ein Sicherungsverzeichnis. Seite 126 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 322_OOP_L Berechnen des BMI - Erweiterung Zu 2. public String auswertenBMI() { // Variablen deklarieren + initialisieren String kommentar, bmi_String; double bmi; double u_grenze, o_grenze; // Grenzen festlegen if (this.geschlecht.equals("w")) { u_grenze=18; o_grenze=23; } else { u_grenze=19; o_grenze=24; } bmi = this.berechneBMI(); if (bmi < u_grenze) { kommentar="Untergewicht - mehr essen + trinken"; } else { if (bmi < o_grenze) { kommentar = "Normalgewicht - weiter so!!" ; } else { kommentar ="Übergewicht - gesünder ernähren !!"; } } bmi_String = bmi+ kommentar; return bmi_String; } Zu 3. public String entscheideBMI() { String bmi_String = null; // Ausgabestring if (alter< 17) { bmi_String ="BMI-Berechnung für Personen unter 17 Jahren ist nicht sinnvoll"; } else { bmi_String ="BMI: " + this.auswertenBMI(); } return bmi_String; } Seite 127 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 325_OOP_A Berechnen und Auswerten des BMI - Alternative Hinweis: Die Ermittlung und Auswertung des BMI kann mit Hilfe verschachtelter Methodenaufrufe (siehe Aufgaben 310_OOP_A bis 322_OOP_A mit dazugehörenden Lösungsvorschlägen) realisiert werden. Dabei errechnet die Methode berechneBMI() den jeweiligen Bodymaßindex und liefert als Rückgabewert einen Zahlenwert. Für die Entscheidung, ob eine BMI-Berechnung sinnvoll ist und wie das BMI - Ergebnis kommentiert werden soll, werden die Methoden entscheideBMI() sowie auswertenBMI() erstellt. Diese Methoden geben jeweils die Entscheidung beziehungsweise den Kommentar als Ausgabestring zurück. Alternativ zu dieser Vorgehensweise kann die Entscheidung ob die BMI-Berechnung gemacht werden soll, dessen Berechnung und Auswertung auch vollständig in der Methode berechneBMI() vorgenommen werden. Dazu wird dann jeweils eine Ausgabestring gebildet und zurück gegeben, der sich aus dem Rechenergebnis und dem Kommentar zusammensetzt. In den Aufgaben 325_OOP_A bis 327_OOP_A mit den dazugehörenden Lösungsvorschlägen wird diese Vorgehensweise, die auch in der Handreichung (Seite 32 ff.) dokumentiert ist verwendet. Problemstellung: Die Berechnung des Body-Mass-Index (BMI) ist nicht geeignet für Schülerinnen und Schüler unter 17 Jahren. Für Schülerinnen und Schüler, die noch nicht 17 Jahre alt sind, soll anstelle des errechneten BMI die Meldung "BMI-Berechnung nicht sinnvoll" erscheinen. Für alle anderen Schülerinnen/Schüler soll der BMI berechnet und angezeigt werden. Aufgaben 1. Starten Sie Eclipse mit dem Projekt projektBMI_02. Geben Sie dem Projekt den neuen Projektnamen projektBMI_03A (Menü Refaktoring Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 2. Codieren Sie die Methode berechneBMI()in der Fachklasse Person wie im Struktogramm in Java beschrieben. 3. Warum hat die Methode den Rückgabetyp String? 4. Erweitern Sie die Startklasse um ein zweites Objekt person_2 mit in der nachfolgenden Abbildung Attributswerten und führen Sie anschließend die Anwendung aus. person_1 5. 6. person_2 Wie beurteilen Sie diese Form der Erfassung der Attributswerte unter dem Blickwinkel der Anwenderfreundlichkeit? Sichern Sie Projekt mit dem Menübefehl File Export File System in ein Sicherungsverzeichnis. Seite 128 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 325_OOP_L Berechnen des BMI Teil 2 – Auswahlstruktur Zu 2. public String berechneBMI(){ // Variable für den zu berechnenden BMI deklarieren double bmi; String bmi_String=""; if (alter >= 17) { // bmi berechnen und Ergebnis in bmi speichern //bmi = gewicht /((koerperlaenge/100*koerperlaenge/100)) ; bmi = gewicht/Math.pow(koerperlaenge/100, 2); bmi_String = "BMI: " + bmi; } else { bmi_String="BMI-Berechnung ist nicht sinnvoll"; } return bmi_String; } Zu 3. // Rückgabe des Ergebnisses Der Ausgabestring kann aus dem text „BMI: „ und dem Inhalt der numerischen Variablen bmi zusammengesetzt werden. Die Typenumwandlung Double.toString(bmi); muss hier nicht thematisiert werden. Die Methode berechneBMI() liefert als Ergebnis einen String, der sich aus dem Text BMI: und der errechneten Zahl, die der Variablen bmi (Datentyp double) zugewiesen wird, zusammensetzt. Insgesamt ist der Ausdruck, der zurückgegeben wird vom Typ String. Mit der Methode toString(9der Klasse Double wird der errechnete numerische Wert für die Ausgabe im String bmi_String der umgewandelt. Zu 4. Person person_2 = new Person(); : // Attributswerte einlesen person_2.setName("Anja"); person_2.setGeschlecht("w"); person_2.setGewicht(55); person_2.setAlter(16); person_2.setKoerperlaenge(170); : // Attributswerte Objekt person_2 auslesen und im Konsolenfenster anzeigen System.out.println("Name: "+ person_2.getName()); System.out.println("Geschlecht: " + person_2.getGeschlecht()); System.out.println("Alter in Jahren: " + person_2.getAlter()); System.out.println("Gewicht in kg: "+person_2.getGewicht()); System.out.println("Körpergröße in cm: "+person_2.getKoerperlaenge()); System.out.println(person_2.berechneBMI()); Zu 5. Diese Form der Eingabe der Attributswerte in den Programmcode ist aus der Sicht der Anwenderfreundlichkeit untauglich. Besser wäre ein Eingabedialog mit Hilfe einer Maske. Diese Form der Benutzerführung wird zu einem späteren Zeitpunkt behandelt Seite 129 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 326_OOP_A Berechnen des BMI Teil 3 – verschachtelte Auswahlstruktur Problemstellung: Da alle Schülerinnen und Schüler der Klasse über 17 Jahre alt sind, soll die Überprüfung des Alters entfallen und der BMI sofort berechnet werden. Je nachdem, wie der berechnete BMI ausfällt, soll die Anzeige in der Konsole zusätzlich zum berechneten BMI um einen Kommentar ergänzt werden: Bedingung für BMI Kommentar kleiner als 19 Untergewicht, mehr essen! Von 19 bis 23 Normalgewicht, schön dabei bleiben! Ab 24 Übergewicht, vernünftig ernähren! Für die Ausgabe der Attributswerte im Konsolenfenster soll sich der Ausgabestring bmi_String aus dem errechneten BMI (Lokale Variable bmi) und dem jeweiligen Kommentar zusammensetzen. Aufgaben 1. Starten Sie Eclipse mit dem Projekt projektBMI_03A. Geben Sie dem Projekt den neuen Projektnamen projektBMI_04A (Menü Refaktoring Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 2. Erweitern Sie das Modell projektBMI_04 so, dass der BMI für drei Objekte mit der folgenden Konsolenanzeige dargestellten Werten ermittelt wird. 3. Das nachstehende Struktogramm skizziert die Methode berechneBMI(. Methode der Klasse Person: public String berechneBMI() Speichervariable deklarieren: kommentar und bmi_String vom Typ String bmi vom Typ double BMI berechnen (Formel) und das Ergebnis der Variablen bmi zuweisen bmi < 19 J kommentar ="--> Untergewicht..." J kommentar ="--> Normalgewicht..." N bmi < 24 N kommentar ="--> Übergewicht..." bmi_String bilden aus "BM'I:" +bmi + kommentar Rückgabe bmi_String Codieren Sie die Methode berechneBMI() in der Fachklasse. 4. Nun soll auch noch berücksichtigt werden, dass der BMI nur für Personen ab 17 Jahren sinnvoll ist. Erweitern Sie das Struktogramm und den Java-Code der Methode berechneBMI() und dokumentieren Sie Ihr Ergebnis. 5. Sichern Sie das Projekt mit dem Menübefehl File Export File System in ein Sicherungsverzeichnis. Seite 130 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 326_OOP_L Berechnen des BMI Teil 3 – Verschachtelte Auswahlstruktur Zu 3. Siehe auch HR Seite 30ff. public String berechneBMI(){ //Vorläufig ohne Alters- und Geschlechtsberücksichtigung double bmi; String bmi_String; String kommentar; //Berechnung des BMI bmi = Math.round(this.gewicht/(this.koerperlaenge/100*this.koerperlaenge/100)); //Alternative mit der Potenzfunktion aus der Library Math //bmi = this.gewicht/Math.pow(this.koerperlaenge/100, 2); //Kommentar erzeugen if (bmi<19) { kommentar = " --> Untergewicht, mehr essen und trinken!"; } else {if (bmi < 24) { kommentar = " --> Normalgewicht, schön dabei bleiben!"; } else { kommentar = " --> Übergewicht, vernünftig ernähren!"; } } bmi_String = "BMI: " + bmi + kommentar; return bmi_String; } Zu 4. Auswahlstruktur wird um eine Alternative erweitert. if(alter>=17) { bmi = Math.round(this.gewicht/(this.koerperlaenge/100*this.koerperlaenge/100)); //Alternative mit der Potenzfunktion aus der Library Math //bmi = this.gewicht/Math.pow(this.koerperlaenge/100, 2); //Kommentar erzeugen if (bmi<19) { kommentar = " --> Untergewicht, mehr essen und trinken!"; } else if (bmi < 24) { kommentar = " --> Normalgewicht, schön dabei bleiben!"; } Else { kommentar = " --> Übergewicht, vernünftig ernähren!"; } Aufbau der geschachtelten Auswahlstruktur (siehe HR S. 30ff bmi_String = "BMI: " + bmi + kommentar; } else { bmi_String = "BMI-Berechnung sinnlos"; } return bmi_String; } Seite 131 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 327_OOP_A Interpretieren des BMI Teil 3 – Erweiterung Auswahlstruktur Problemstellung: Bei der Interpretation des BMI verwendet man für Frauen und Männer unterschiedliche Unter- und Obergrenzen für die Diagnose. Während man bei jungen Männern bei einem BMI von unter 19 von Untergewicht, bis zu 24 von Normalgewicht und erst darüber von Übergewicht spricht, sind die Grenzen bei Frauen für Untergewicht bei 18 und für Übergewicht bei 23. Zwischen 18 und 23 liegt Normalgewicht vor. Erweitern Sie die Klasse Person so, dass eine entsprechende Differenzierung vorgenommen wird. Zunächst soll der Bodymaßindex unabhängig vom alter ermittelt werden Das nachstehende Struktogramm skizziert die Erweiterung der Methode berechneBMI(). Variablendeklaration: double u_grenze, o_grenze J Wertzuweisung: u_grenze = 18 o_grenze = 23 geschlecht = "w" N Wertzuweisung: u_grenze = 19 o_grenze = 24 Hinweis: Um einen Zeichenvergleich durchzuführen (geschlecht = „w“) muss in JAVA die aus der Klasse String stammende Methode equalsIgnoreCase() verwendet werden. Diese führt einen genauen Vergleich aller in einem String enthaltenen Zeichen durch. In diesem Fall lautet der Aufruf der Methode this.geschlecht.equals ("w"). Aufgaben Starten Sie Eclipse mit dem Projekt projektBMI_04A. Geben Sie dem Projekt den neuen Projektnamen projektBMI_05A (Menü Refaktor Rename), bevor Sie mit den weiteren Aufgaben fortfahren. 1. An welcher Stelle in der erweiterten Methode sollen die Variablen u_grenze und o_grenze Verwendung finden? Ergänzen Sie das bisherige Struktogramm der Methode berechneBMI(). 2. Codieren Sie die Ergänzung/Änderung der Methode (siehe oben stehendes Struktogramm) berechneBMI(). 3. Erweitern Sie Ihr Modell um ein männliches und ein weibliches Objekt, bei denen die Attributswerte für Gewicht (70 kg) und Körpergröße (175cm) übereinstimmen. Testen Sie die Methode berechneBMI() 4. Erweitern Sie die Methode berechneBMI() so, dass die Berechnung nur noch für Personen vorgenommen wird, die 17 Jahre oder älter sind. Seite 132 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 327_OOP_L Interpretieren des BMI Teil 3 – Erweiterung Auswahlstruktur Zu 2. Zu 3. Seite 133 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Zu 4. Seite 134 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 330_OOPA Konstruktoren - Objekte erzeugen Der Standardkonstruktor Jede Klasse benötigt zumindest einen Konstruktor zum Erzeugen ihrer Objekte. Der Konstruktor ist eine besondere Methode und trägt denselben Namen wie die Klasse. Wenn kein Konstruktor explizit vorgesehen wird, weist der Compiler der Klasse einen Standardkonstruktor zu. Der Standardkonstruktor organisiert Speicheradressen für das Objekt im Hauptspeicher. Die Attributswerte werden dann mit den Zugriffmethoden gesetzt. Standardkonstruktor in der Fachklasse Person Klassendiagramm Java-Code public Person(){ } Startklasse: Erzeugen des Objekts und Attributswert setzen person_1 = new Person(); // Objekt erzeugen : person_1.setName(„Ingo“);// Attributswert setzen Benutzerdefinierte Konstruktoren mit Werteübergabe (Parameterübergabe) An benutzerdefinierte Konstruktoren können beliebig viele Parameter übergeben werden. Um dies zu erreichen, muss die Definition des Konstruktors in der Klasse dafür vorbereitet werden. Um dem Konstruktor mitzuteilen, dass er Parameter übernehmen soll, wird für jeden neuen Parameter der Typ und eine Variable festgelegt. Es können beliebig viele Parameter übergeben werden. Diese müssen lediglich durch ein Komma voneinander getrennt werden. Im folgenden Beispiel definieren wir einen Konstruktor mit zwei Parametern, um zwei interne Variable zu initialisieren. Beim Aufruf des Konstruktors zum Erzeugen des Objekts werden dann zwei Werte erwartet. Konstruktor in der Fachklasse Person Klassendiagramm Java-Code public Person(String name, int alter){ this.name = name this.alter = alter } Startklasse: Erzeugen des Objekts mit Übergabewert // Objekt mit Werten erzeugen person_1 = new Person(„Ingo“, 20); Das Wort „this“ stellt in diesem Zusammenhang einen Verweis auf das aktuelle Objekt dar. Dies ist das gerade aktive Objekt. In der Klammer stehen die Parameter, sie sind Variable, die nach dem Aufruf des Konstruktors aus dem Hauptspeicher gelöscht werden. Sie werden in den Objekten zu Attributswerten. Aufgaben 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektBMI_05. Ändern Sie den Projektnamen in projektBMI_06 bevor Sie mit den Aufgaben fortfahren. 2. Die Initialisierung der Objekte person_1, person_2 und person_3 soll jetzt mit einem benutzerdefinierten Konstruktor, der alle Attributswerte in das Objekt übernimmt, erfolgen. a) in welcher Klasse müssen Sie den Konstruktor erstellen? b) Nehmen Sie die Änderung vor. In Eclipse können sie dazu den Menübefehl Source Generate Constructor Using fields benutzen. 3. Nehmen Sie die erforderlichen Änderungen in der Startklasse vor, so dass die Objekte mit Hilfe des benutzerdefinierten Konstruktors erzeugt werden. Worauf müssen sie achten, wenn Sie benutzerdefinierte Konstruktoren benutzen? 4. Dokumentieren Sie Ihre Ergebnisse. Und exportieren Sie das Projekt in das Sicherungsverzeichnis. Seite 135 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 330_OOPL Konstruktoren - Objekte erzeugen Lösungsvorschläge Zu 2. a) Der Konstruktor wird in der jeweiligen Fachklasse eingerichtet. Siehe Handreichung Seite 41 ff. public Person(String pName, int pAlter, double pGewicht, double pKoerperlaenge, String pGeschlecht) { name = pName; alter = pAlter; gewicht = pGewicht; koerperlaenge = pKoerperlaenge; geschlecht = pGeschlecht; b) Vorgehensweise: (1) Die Klasse markieren und dann das Menü Source (Quelle) Generate Constructor Usind fields aufrufen (2) Im Dialogfenster die Felder auswählen, für die Werte übergeben werden sollen. Hinweis: Damit die Wirkung des selbstdefinierten Konstruktors gesehen werden kann, ist es sinnvoll, den Standardkonstruktor zu löschen Zu 3. // Objekt person_1 mit Parameterübergabe Person person_1 = new Person("Ingo",20, 80,180,"m"); Person person_2 = new Person("Anja",19, 55,170,"m"); Person person_3 = new Person("Uwe",20, 85,170,"m"); Die Reihenfolge der Übergabewerte muss gleich sein, wie die Attributsfolge im Konstruktor. Seite 136 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 340_OOPA Einfacher Eingabedialog über die Konsole Problemstellung Die Vorgehensweise, dass die Attributswerte für die Berechnung des BMI einer Person im Quellcode der Startklasse übergeben werden, erfüllt nicht die Anforderungen der Anwenderfreundlichkeit. Um dies zu verbessern, soll daher die Übertragung der Attributswerte in das Objekt durch eine dialoggesteuerte Benutzerführung ersetzt werden. Die Benutzerführung ist so aufgebaut, dass vor jeder Tastatureingabe zunächst die Aufforderung an den Benutzer zur Eingabe angezeigt. Einsatz der Klasse Scanner: Mit der Klasse Scanner aus dem Package java.util können Attributswerte über die Konsole im Dialog erfasst werden. Diese Vorgehensweise wird übergangsweise bist zur Einführung der Eingabemasken angewandt. import java.util.Scanner; public class Startklasse { public static void main(String[] args) { Sobald die Scanner-Klasse im Programmcode aufgerufen wird, wird das erforderliche package importiert. Scanner tastatur = new Scanner(System.in); Neues Objekt tastatur der Klasse Scanner wird erzeugt. Das Objekt bezieht seine Daten von System.in, was der Tastatureingabe entspricht. System.out.println("Eingabeaufforderung"); Eingabeaufforderung zur „Anwenderführung“ mVariable=tastatur.next(); Wenn die Eingabetaste betätigt wird, überträgt die Methode next() des "ScannerObjekts“ tastatur die Eingabe in die Variable mVariable. : : Next() - Texteingabe nextDouble() - numerische Eingabe mit Nachkommastellen nextInt () - ganzzahlige Eingabe objekt.setMethode(mVariable) } eingegebener Wert als Attributwert in das Objekt übertragen } Seite 137 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Aufgaben 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektBMI_05. Ändern Sie den Namen Ihres Projekts projektBMI_05 mit dem Menübefehl Refactor Rename um in projektBMI_07 2. Löschen Sie den Inhalt der Klasse Startklasse bis auf die main()-Methode. 3. Erstellen Sie den Java-Code der main() - Methode in der Startklasse nach den Vorgaben des nachfolgenden Struktogramms. Ausgabebeispiel für die Konsolenanzeige: 4. Welche Mängel bestehen bei der Tastatureingabe über die Konsole weiterhin? 5. Dokumentieren Sie Ihre Ergebnisse. und sichern Sie anschließend das umbenannte Projekt mit dem Menübefehl File Export File System in ein Sicherungsverzeichnis. Seite 138 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 340_OOPL Einfacher Eingabedialog über die Konsole Zu 2. Siehe auch HR Seite 38ff.) public static void main(String[] args) { // TODO Auto-generated method stub // Variablen für die Zwischenspeicherung der Eingabedaten String mName, mGeschlecht; double mGewicht, mKoerperlaenge; int mAlter; boolean is_ja = true; // Deklaration des Objekts person_1 Person einePerson; // Objekt der Klasse Scanner deklarieren und erzeugen Scanner tastatur = new Scanner(System.in); // Eingabedialog mit Tastatureingaben System.out.println("Geben Sie Ihren Namen ein : "); mName=tastatur.next(); System.out.println("Geben Sie Ihr Geschlecht ein : " ); mGeschlecht=tastatur.next(); System.out.println("Geben Sie Ihr Alter ein : " ); mAlter=tastatur.nextInt(); System.out.println("Geben Sie Ihr Gewichte in kg ein : " ); mGewicht=tastatur.nextDouble(); System.out.println("Geben Sie Ihre Körpergröße in cm ein : " ); mKoerperlaenge=tastatur.nextDouble(); // Objekt person_1 deklarieren einePerson = new Person(); // Objekt person_1 erzeugen //Attributswerte aus Speichervariablen in das Objekt übernehmen einePerson.setName(mName); einePerson.setGeschlecht(mGeschlecht); einePerson.setGewicht(mGewicht); einePerson.setAlter(mAlter); einePerson.setKoerperlaenge(mKoerperlaenge); // Attributswerte auslesen und im Konsolenfenster anzeigen System.out.println(""); System.out.println("Ausgabe:"); System.out.println("--------"); System.out.println("Name: "+ einePerson.getName()); System.out.println("Geschlecht: " + einePerson.getGeschlecht()); System.out.println("Alter in Jahren: " + einePerson.getAlter()); System.out.println("Gewicht in kg: "+einePerson.getGewicht()); System.out.println("Körpergröße in cm: "+einePerson.getKoerperlaenge()); System.out.println(("---------------------------------")); System.out.println(einePerson.berechneBMI()); System.out.println(""); Zu 3 Es kann nur eine Person erfasst und angezeigt werden. Es gibt keine Korrekturmöglichkeit für Eingabefehler Seite 139 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 350_OOPA Einfacher Eingabedialog für mehrere Personen - Wiederholungsstruktur Problemstellung Mit dem bisherigen Eingabedialog (siehe Aufgabenblatt 340_OOP) ist es nur möglich, den BMI für eine Person zu berechnen. Der Eingabedialog soll nun erweitert werden, so dass der Anwender nach jeder BMI-Berechnung für eine Person gefragt wird, ob noch eine Person erfasst und für sie der BMI berechnet und angezeigt werden soll. Wenn die Frage mit „nein“ beantwortet wird, soll das Programm beendet werden. Bei Programmen mit Schleifen wird der Programmcode in der Schleife solange wiederholt, solange die Wiederholungsbedingung gilt, beziehungsweise bis die Abbruchbedingung erfüllt ist. Java-Code: Anweisung 1 WHILE (Bedingung) { Anweisungen } Anweisung 2 Aufgaben 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektBMI_07. Benennen Sie das Projekt um in projektBMI_08 (Menü Refaktor Umbenennen). 2. Welche Programmteile (Anweisungen) aus dem Projekt projektBMI_07 (Aufgabenblatt 340_OOP) müssen mehrmals wiederholt werden, wenn der Benutzer die Frage nach einer weiteren Eingabe mit „j“ beantwortet? 3. Ergänzen Sie den Javacode der Startklasse um die Anweisungen der Wiederholungsstruktur. 4. Welche Vergleichsoperatoren gibt es in Java? 5. Welche Werte kann die Variable mAntwort annehmen? Erklären sie, wie die Schleife beendet wird. 6. Warum wird die Variable is_ja mit dem Anfangswert true initialisiert? 7. Warum können früher bearbeitete Personen nicht wieder aufgerufen werden? Machen Sie Vorschläge, wie diese „Einschränkung“ verbessert werden könnte. Seite 140 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 350_OOPL Einfacher Eingabedialog für mehrere Personen - Wiederholungsstruktur Zu 2. Wiederholt werden müssen die Datenein- und ausgabe Zu 3. Siehe HR Seite 40ff public static void main(String[] args) { // TODO Auto-generated method stub // Variablen für die Zwischenspeicherung der Eingabedaten String mName, mGeschlecht; double mGewicht, mKoerperlaenge; int mAlter; boolean is_ja = true; // Deklaration des Objekts person_1 Person einePerson ; // Eingabedialog Scanner tastatur = new Scanner(System.in); while (is_ja) { : Dialog für die Eingabe der Attributswerte einer Person : // Dialog für die Steuerung der Wiederholungsbedingung String mAntwort; System.out.println("Wollen sie noch eine Person eingeben (j/n)? " ); mAntwort=tastatur.next(); // Auswahlstruktur zum Auswerten der Eingabe if(mAntwort.equals("j" )| mAntwort.equals("J")) { is_ja = true; } else { is_ja = false; } Bedingungen werden mit ODER (|) verknüpft } Zu 4. Vergleichsoperatoren in Java < (kleiner), <= (kleiner oder gleich), >(größer), >= (größer oder gleich), == (gleich), != (ungleich) if (mZahl1 == mZahl2) equals(String) if(mAuswahl.equals("A")) Zu 5 Die Variable mAntwort kann beliebige Werte annehmen. Wenn sie den wert „J“ oder „j“ zugewiesen erhält, erhält die „Schaltervariable“ is_ja den wert true und die Schleife wird erneut durchlaufen. Für alle anderen Eingaben für mAntwort erhält die Variable is_ja den Wert false und die Schleife wird nicht mehr durchlaufen. Zu 6. Die Schleife wird so mindesten 1x durchlaufen Zu 7. Immer nur ein Objekt (einePerson) wird im Arbeitsspeicher verwaltet. Beim nächsten Schleifendurchlauf werden die Attributswerte überschrieben. Abhilfe: - Speicherung in einer Liste im Arbeitsspeicher (ArryayList, VectorList) - Speicherung auf Datenträger Seite 141 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_400_A Die Vererbung am Beispiel „Kontoverwaltung“ Eine Bank unterbreitet für Jugendliche und Schüler ein Angebot zur Kontohaltung. Sie bietet Girokonten und Sparkonten an. Dabei gelten folgende Regelungen/Bedingungen: • • • • • • • Jedes Konto hat eine Kontonummer und einen Kontostand. Jedes Giro- und jedes Sparkonto hat ein Mindestguthaben von 10,00 €, was bei der Neuanlage eines Kontos zu beachten ist. Das Guthaben eines Sparkontos wird mit 3% pro Jahr verzinst und wird kostenlos geführt. Für ein Girokonto wird eine jährliche Gebühr von 3,- € berechnet, Guthaben werden bei Girokonten nicht verzinst. Um die Zinsberechnung zu vereinfachen, muss für Sparkonten der Methode verzinsen()die Anzahl der Tage, die verzinst werden sollen, mitgegeben werden (das Datumsformat wird so für diese Aufgabe umgangen). Jedes Konto verfügt über eine Methode einzahlen() und auszahlen(). Ein Girokonto verfügt über die Methode berechneGebuehr(). Alle Attribute sind mit set- und get-Methoden lesbar und veränderbar. Bei der Arbeitssitzung des Projektteams, das mit der Erarbeitung einer Softwarelösung beauftragt ist, stehen zwei Vorschläge zur Diskussion: Vorschlag 1: Vorschlag 2: Alle Attribute und Methoden wurden in die Klasse Kind aufgenommen (hier auszugsweise) Zwei verschiedene Klassen (Sparkonto und Girokonto) mit den jeweils notwendigen Attributen und Methoden. : Seite 142 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Aufgaben: 1. Folgende Konten sollen geführt werden: (1) Sparkonto 650 153 254, Kontostand 5000,00 EUR, Sparzinssatz 3,5 % (2) Sparkonto 650 153 256, Kontostand 2500,00 EUR, Sparzinssatz 3,25% (3) Girokonto 650 153 005, Kontostand 250,00 EUR, Girogebühr 3,00 EUR. Erfassen Sie das Sparkonto (1) in das unten abgebildete Objekt konto_1 der Klasse Konto (Vorschlag 1) und die Konten unter (2) und (3) in die Objekte sparkonto_1 und girokonto_1 (Vorschlag 2). Objekt der Klasse Kind nach Vorschlag 1 Objekte nach Vorschlag 2: 2. Beurteilen Sie die beiden Vorgehensweisen. 3. Formulieren Sie einen Verbesserungsvorschlag. Seite 143 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_400_L Die Vererbung am Beispiel „Kontoverwaltung“ Aufgabe: Zu 1) Objekt der Klasse Kind nach Vorschlag 1 Objekte nach Vorschlag 2: Zu 2) siehe Abbildung Zu 3) Siehe Handreichung ab Seite 44. Vererbungsstruktur: Oberklasse mit gemeinsamen Attribute/Methoden, Unterklassen mit spezifischen Attributen/Methoden Seite 144 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_410A Vererbungsstruktur (Klassenhierarchie) Situation Die Bewertung der beiden Vorschläge (siehe Aufgabenblatt 410AA) brachte die Erkenntnis, alle Klassen teilweise dieselben Attribute und Methoden haben. • Jedes Sparkonto ist ein Konto und hat auch deren Eigenschaften (Kontonummer, Konto • Jedes Girokonto stand) usw.) und Verhaltensweisen (Methoden). Für die Aufgabenstellung gibt es keine weitere Unterteilung der Konten. Klassendiagramm Vererbung: (1) Die Oberklasse (Basísklasse) vererbt die Eigenschaften und Methoden an die Unterklasse (abgeleitete Klasse). : (2) Die Oberklasse wird als abstrakte Klasse festgelegt, wenn sie nur zum Zwecke der Vererbung dient, also keine eigenen Objekte erzeugt werden sollen. (3) Die Unterklasse hat zusätzlich eigene Attribute und Methoden. Java-Code Abstrakte Oberklasse Konto Unterklassen am Beispiel der Unterklasse Sparkonto public abstract class Konto { : } public class Sparkonto extends Konto { : } Aufgaben: 1. Starten Sie die Entwicklungsumgebung Eclipse, legen Sie ein neues Javaprojekt projektKonto_01 an. 2. Erstellen Sie das Klassendiagramm, so dass die Klassenhierarchie (Vererbungsstrukur) wie oben dargestellt, entsteht. 3. Beschreiben Sie am Beispiel der Unterklasse Sparkonto, wie Sie die Vererbungsstruktur im UMLKlassendiagramm und am Beispiel der Unterklasse Girokonto, wie sie im Java-Code hergestellt wird 4. Erstellen die Klasse Startklasse mit der main()-Methode zum Starten der Anwendung. In der Startklasse sind zunächst ein Objekt sparkonto_1 (kontonummer=1, kontostand=10 und sparzinssatz= 3 ) sowie ein Objekt girokonto_1 (kontonummer = 2, kontostand = 1500, gebuehr = 3) zu erzeugen und die Attributswerte einzulesen. Anschließend sollen die Attributswerte in der Konsole wie in der folgenden Abbildung dargestellt angezeigt werden. Seite 145 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 5. Begründen Sie, warum die Klasse Konto als abstrakte Klasse festgelegt wird. Beschreiben Sie, wie die Klasse als abstrakte Klasse eingerichtet wird. 6. Erläutern Sie die Vorteile der Vererbungsstruktur. OOP_410L Vererbungsstruktur (Klassenhierarchie) Zu 2. Siehe Handreichung Seite 44 ff. Zu 3. Siehe Handreichung ab Seite 45 Man realisiert die Vererbung, indem man den Button „Generalisierung“ (=Vererbungspfeil) drückt. Danach klickt man auf die Klasse, die erben soll, (Unterklasse) und fährt dann mit der Maus auf die Oberklasse. Java-Code der Unterklasse Girokonto: public class Girokonto extends Konto { public Girokonto(){ } private double girogebuehr; public double getGirogebuehr() { return girogebuehr; } public void setGirogebuehr(double girogebuehr) { this.girogebuehr = girogebuehr; } } Zu 4. Die Klasse Konto benötigt keine eigenen Objekte. Alle Konten sind in den Unterklassen abgebildet, weitere Kontenarten soll es laut Aufgabenstellung nicht geben. Die Oberklasse Konto dient lediglich der Vererbung ihrer Attribute/Methoden. Siehe auch Handreichung Seite 48ff. Zu5. z. B. weniger Redundanzen, optimalere Speicherverwaltung, mehr Übersichtlichkeit Seite 146 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_420_A Vererbungsstruktur Methoden in den Unterklassen erstellen Problemstellung: Für die Verwaltung der Konten gelten folgende Regelungen/Bedingungen: • Auf Konten können Beträge eingezahlt und von Konten ausgezahlt werden. Dabei wird der Kontostand (Attribut kontostand) um den jeweiligen Betrag erhöht beziehungsweise vermindert. Dafür sind die Methoden einzahlen(betrag) und auszahlen(betrag) zu erstellen. • Auf Sparkonten wird der jeweilige Kontostand verzinst. Der Zinszeitraum muss dabei aus Gründen der Vereinfachung eingegeben werden. Die errechneten Zinsen werden gleich auf das Sparkonto eingezahlt. Mit Hilfe der Methode verzinsen(tage) sollen die Zinsen für den aktuellen Kontostand errechnet und eingezahlt werden. Mit der Methode berechneGebuehr() wird für die Girokonten die eingegebene Gebühr vom aktuellen Kontostand abgezogen und in einer lokalen Variable (guthaben) gespeichert. Dieses um die Gebühr verminderte Guthaben wird als neuer Kontostand geführt. • Aufgaben: 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektKonto_01 Benennen Sie das Projekt um in projektKonto_02 (Menü Refaktor Umbenennen). 2. In welcher Klasse nehmen Sie die Methoden einzahlen(betrag ) und auszahlen(betrag). Erstellen Sie die Methoden wie in der Problemstellung beschrieben. 3. Zu welcher Klasse gehört die Methode verzinsen(tage) und berechneGebuehr()? a) die Methode verzinsen(tage) enthält die nachfolgende Anweisung: this.einzahlen(this.getKontostand()*this.zinssatz*tage/100/360); Erläutern Sie die Anweisung und codieren Sie die Methode. b) Mit der Methode berechneGebuehr() wird für das Girokonto die Gebühr berechnet und vom Konto stand abgezogen, so dass der aktualisierte Kontostand ausgewiesen wird. Dafür wird in der Methode folgende Anweisung benutzt: this.setKontostand(this.getKontostand()-this.gebuehr); Erklären Sie, warum die obenstehende Anweisung nicht einfach durch kontostand = kontostand - gebuehr; ersetzt werden kann und codieren Sie die Methode in der richtigen Klasse. 4. Erläutern Sie den Vorteil der Vererbung beim Nutzen der Methoden 5. Ergänzen Sie die Startklasse um Kontenbewegungen für das Spar- und das Girokonto, so dass nachfolgende Konsolenanzeige entsteht: Seite 147 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 OOP_420_L Vererbungsstruktur Methoden in den Unterklassen erstellen zu 2: (siehe HR Seite 48) Die Methoden einzahlen(betrag ) und auszahlen(betrag) gehören zu der Oberklasse Konto und stehen somit in beiden Unterklassen zur Verfügung Zu 3: Die Methode verzinsen(tage) und berechneGebuehr() gehört in die jeweilige Unterklasse. 3a) this.einzahlen(this.getKontostand()*this.zinssatz*tage/100/360); auf den Wert des Attributs kontostand wird mit der Methode getKontostand zugegriffen um die Zinsen zu berechnen. Auf das Attribut der Oberklasse kann nur mit Hilfe einer Methode zugegriffen werden, da es dort mit der Sichtbarkeit private deklariert wurde (Kapselung) Die berechneten Zinsen werden mit der Methode einzahlen(betrag) auf das Konto eingezahlt. 3b) this.setKontostand(this.getKontostand()-this.gebuehr); Der Wert des Attributs kontostand wird mit der Zugriffsmethode getKontostand geholt und um den Wert des Attributs gebuehr vermindert Der so verminderte Wert des Attributs kontostand wird mit der Zugriffsmethode setKontostand übernommen. kontostand = kontostand - gebuehr Auf das Attribut kontostand der Oberklasse kann nur mit einer Methode zugegriffen werden, wenn es dort als private deklariert wurde. Zu 4: z. B. weniger Redundanzen, optimalere Speicherverwaltung, mehr Übersichtlichkeit Seite 148 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 430_OOP_A Übungsaufgabe: Kinderbetreuung – Berechnen der Grundgebühr Problemstellung Eine Stadt beschließt, ihr Engagement auf dem Gebiet der Kinderbetreuung rechnergestützt mit Hilfe einer geeigneten Software zu verwalten. In einem vorläufigen Klassendiagramm der Klasse Kind (siehe untenstehende Abbildung) wurden für die zu verwaltenden Kinder Name, Vorname, Geburtsjahr und Anzahl Geschwister sowie eine Grundgebühr, die für alle zu betreuenden Kinder gleich sein soll, berücksichtigt. Zunächst soll die Grundgebühr für den Besuch einer Betreuungseinrichtung unter Berücksichtigung der zu betreuenden Kinder ermittelt werden. Für jedes Kind wird die gleiche Grundgebühr pro Monat von 50 € in Rechnung gestellt. Wenn ein weiteres Kind untergebracht ist (Anzahl der betreuten Geschwister des Kindes ist dann 1), sind je Kind 25 €, bei zwei Geschwistern 10 € pro Kind und bei mehr als 2 Geschwistern 0 € zu entrichten. Der aufgrund der Anzahl der zu betreuenden Kinder anfallende Betrag für die Grundgebühr je Kind soll ermittelt und in der Variablen beitragGrundgebuehr gespeichert werden. Aufgaben 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektKinderbetreuung_01. 2. Skizzieren Sie mit Hilfe eines Struktogramms den Ablauf der Methode berechneGrundgebuehr() zum Berechnen der Grundgebühr. 3. Ergänzen Sie die Startklasse um Objekte mit geeigneten Testdaten und testen Sie die Anwendung 4. Warum wurde das Attribut grundgebuehr als statisches Attribut (Klassenattribut) deklariert? 5. Wie werden die Zugriffsmethoden für Klassenattribute im Gegensatz zu Objektattributen angewandt? Seite 149 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 430_OOP_L Übungsaufgabe: Kinderbetreuung – Berechnen der Grundgebühr Zu 2. Java-Code: public double berechneGrundgebuehr() { double beitragGrundgebuehr = 0; if (anzahlbetreutergeschwister==0) { beitragGrundgebuehr = grundgebuehr; } else { if (anzahlbetreutergeschwister==1) { beitragGrundgebuehr = grundgebuehr/2; } else { if (anzahlbetreutergeschwister==2) { beitragGrundgebuehr = 10; } else { beitragGrundgebuehr = 0; } } } return beitragGrundgebuehr; } Zu 4. Attributswerte von Klassenattributen gelten für alle Objekte. Zu 5. Methodenaufruf bei Methoden für Klassenattribute: Klasse.methode, zum Beispiel Kind.setGrundgebuehr(50); Seite 150 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 440_OOP_A Die Vererbung am Beispiel der Kinderbetreuung – Einführung 1 Problemstellung Das Betreuungsangebot besteht aus Einrichtungen für Kindergartenkinder (Kigakind), Kindertagesstättenkind (Kitakind) und Schulkinder (Schulkind). Neben der Grundgebühr, die für alle Kinder zu entrichten ist (siehe Aufgabe 9A) muss zusätzlich für jedes • • • Kigakind eine Kindergartengebühr von 80. Kitakind eine Kitagebühr in Höhe von 200 € . Schulkind eine Betreuungsgebühr von 150 € entrichtet werden. Ergänzende Angebote (Mittagstisch, Nachhilfe oder Sprachförderung) sollen zunächst unberücksichtigt bleiben. Bei der Arbeitssitzung des Projektteams, das mit der Erarbeitung einer Softwarelösung beauftragt ist, stehen zwei Vorschläge zur Diskussion: Vorschlag 1: Vorschlag 2: Alle Attribute und Methoden wurden in die Klasse Kind aufgenommen (hier auszugsweise) Drei verschiedene Klassen (Kikakind, Kitakind, Schulkind) mit den jeweils notwendigen Attributen und Methoden. : Seite 151 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 Aufgabe: 4. Folgende Anmeldungen zu den Betreuungsangebote sollen erfasst werden: (1)Schulkind: Köhler, Benjamin Geburtsjahr 2001,keine betreuten Geschwister, keine Nachhilfe, Klassenstufe 3 (2) Kindergartenkind: Kessler, Michael, Geburtsjahr 2005, keine betreuten Geschwister, halbtags, kein Mittagstisch (3) Kindertagesbetreuung Wagner, Lene, Geburtsjahr 2008, ein betreutes Geschwister, keine Sprachförderung Erfassen Sie die Anmeldung 1 in das Objekt der Klasse Kind (Vorschlag 1) und die Anmeldungen 2 und Anmeldung 3 in die Objekte kigakind_1 und kitakind_2 (Vorschlag 2) Objekt der Klasse Kind nach Vorschlag 1 Objekte nach Vorschlag 2: 5. Warum werden bei keinem Objekt die Kosten für die jeweilige Betreuung ausgewiesen? 6. Beurteilen Sie die beiden Vorgehensweisen. 7. Machen Sie einen Verbesserungsvorschlag. Seite 152 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 440_OOP_L Die Vererbung am Beispiel der Kinderbetreuung – Einführung 1 Aufgabe: 8. Folgende Anmeldungen zu den Betreuungsangebote sollen erfasst werden: (1)Schulkind: Köhler, Benjamin Geburtsjahr 2001,keine betreuten Geschwister, keine Nachhilfe, Klassenstufe 3 (2) Kindergartenkind: Kessler, Michael, Geburtsjahr 2005, keine betreuten Geschwister, halbtags, kein Mittagstisch (3) Kindertagesbetreuung Wagner, Lene, Geburtsjahr 2008, ein betreutes Geschwister, keine Sprachförderung Erfassen Sie die Anmeldung 1 in das Objekt der Klasse Kind (Vorschlag 1) und die Anmeldungen 2 und Anmeldung 3 in die Objekte kigakind_1 und kitakind_2 (Vorschlag 2) Objekt der Klasse Kind nach Vorschlag 1 Objekte nach Vorschlag 2: 9. Warum werden bei keinem Objekt die Kosten für die jeweilige Betreuung ausgewiesen? Die Betreuungskosten sind im Klassendiagramm als Klassenvariable deklariert und gelten somit für jedes Objekt. Klassenattribute werden im Objektdiagramm nicht angezeigt. 10. Beurteilen Sie die beiden Vorgehensweisen. siehe Abbildung 11. Verbesserungsvorschlag. Vererbungsstruktur: Oberklasse mit gemeinsamen Attribute/methoden, Unterklassen mit spezifischen Attibuten/Methoden Seite 153 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 450_OOP_A Die Vererbung am Beispiel der Kinderbetreuung – Einführung 1 Jedes Kigakind Jedes Kitakind ist ein Kind und hat auch deren Eigenschaften (Name, Vorname usw.) und Verhaltensweisen (Methoden). Für die Aufgabenstellung gibt es keine weitere Unterteilung für die Kinder Jedes Schulkind . Klassendiagramm Vererbung (1) Die Oberklasse (Basísklasse) vererbt die Eigenschaften und Methoden an die Unterklasse (abgeleitete Klasse). (2) Die Oberklasse wird als abstrakte Klasse festgelegt, wenn sie nur zum Zwecke der Vererbung dient, also keine eigenen Objekte erzeugt werden sollen. (3) Die Unterklasse hat zusätzlich eigene Attribute und Methoden. Javacode Abstrakte Oberklasse Kind public abstract class Kind { : } Unterklassen am Beispiel der Unterklasse Kigakind public class Kigakind extends Kind { : } Aufgaben: 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektKinderbetreu-ung_01 und ändern sie den Projektnamen in projektKindbetreuung_02 (Menü Refaktor Rename). 2. Löschen Sie den Inhalt der main()-Methode in der Startklasse. 3. Erweitern das Modell, so dass die Klassenhierarchie (Vererbungsstrukur) wie im obigen Klassendiagramm dargestellt entsteht. Richten Sie zunächst nur die Unterklassen ohne die zusätzlichen Attribute und Methoden ein und stellen Sie die Klassenhierarchie (Vererbungsstruktur) her. 4. Beschreiben Sie am Beispiel der Unterklasse Schulkind, wie Sie die Vererbungsstruktur im UMLKlassendiagramm und am Beispiel der Unterklasse Kigakind, wie sie im Javacode hergestellt wird. 5. Begründen Sie, warum die Klasse Kind als abstrakte Klasse festgelegt wird und geben Sie an, wie eine abstrakte Klasse eingerichtet wird. 6. Erläutern Sie die Vorteile der Vererbungsstruktur. Seite 154 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 7. Für die Betreuungsangebote sollen folgende Bedingungen gelten: • Für die Kigakinder ist eine Kindergartengebühr von 80 € zu entrichten. Sie können ganz- oder halbtagsbetreut sein, bei Halbtagsbetreuung ist die Gebühr um 50 % ermäßigt. Falls ein Kind auch an der Mittagsmahlzeit teilnimmt, ist monatlich eine Gebühr von 50 € zu entrichten. Einzelmahlzeiten gibt es nicht. • Für Kitakinder werden 200 € erhoben. In diesem Preis ist die Mittagsmahlzeit enthalten. Für Kitakinder ist nur Ganztagsbetreuung vorgesehen. Kitakinder können auch Kurse zur Sprachförderung belegen, die im Monat mit zusätzlich 20 € in Rechnung gestellt werden. • Die Schulkindbetreuung erfolgt in den Schulferien ganztags, an Schultagen komplementär zur Unterrichtszeit. Die Gebühr von 150 € schließt die Teilnahme an der Mittagsmahlzeit ein. Für Schulkinder kann ergänzend zur allgemeinen Hausaufgabenbetreuung Nachhilfeunterricht gebucht werden, der für Kinder der 1 und 2. Klassenstufe auf 50 €, für Klasse 3 und 4 auf 75 € festgelegt ist. Ergänzen Sie die Unterklassen um die Attribute und Methoden, so dass die geschilderten Bedingungen abgebildet werden können. Die Methoden zum Berechnen der jeweiligen Gebühren und Beiträge sind noch nicht zu programmieren 8. Dokumentieren Sie das fertige Klassendiagramm 9. Erzeugen Sie in der Startklasse die Objekte zum Erfassen der Anträge auf Betreuung und erzeugen Sie eine Konsolenausgabe zur Kontrolle) Folgende Anmeldungen zu den Betreuungsangeboten sollen erfasst (1) Schulkind: Köhler, Benjamin Geburtsjahr 2001,keine betreuten Geschwister, keine Nachhilfe, Klassenstufe 3 (2) Kindergartenkind: Kessler, Michael, Geburtsjahr 2005, keine betreuten Geschwister, halbtags, kein Mittagstisch (3) Kindertagesbetreuung Wagner, Lene, Geburtsjahr 2008, ein betreutes Geschwister, keine Sprachförderung Dokumentieren und kommentieren Sie anschließend den JavaCode der Startklasse 10. Erweiterungsaufgabe: Das Erzeugen der Objekte und das Erfassen der Attributswerte mit Hilfe der Standardkonstruktoren ist mühsam und umständlich. Machen Sie einen Vorschlag für eine kürzere Vorgehensweise. 11. Sichern Sie das Projekt projektKindbetreuung_02 in einem Sicherungsverzeichnis (Menü File Export file System…) Seite 155 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 450_OOP_L Die Vererbung am Beispiel der Kinderbetreuung – Einführung 1 Zu 3. Siehe Handreichung Seite 45 ff. Zu 4. Siehe Handreichung Seite 46. Man realisiert die Vererbung, indem man den Button „Generalisierung“ (=Vererbungspfeil) drückt. Danach klickt man auf die Klasse, die erben soll, (Unterklasse) und fährt dann mit der Maus auf die Oberklasse. Zu 5. Die Klasse Kind benötigt keine eigenen Objekte. Alle Kinder sind in den Unterklassen abgebildet. Die Oberklasse Kind dient lediglich der Vererbung ihrer Attribute/Methoden. Zu 6. z. B. weniger Redundanzen, optimale Speicherverwaltung, mehr Übersichtlichkeit Seite 156 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 zu 7. + 8. Zu 9. public static void main(String[] args) { Attributswerte der Klassenattribute // Werte der Klassenattribute zuweisen Kind.setGrundgebuehr(50); einlesen Schulkind.setBetreuungsgebuehr(150); Kigakind.setKigagebuehr(80); Kitakind.setKitagebuehr(200); // Objekte deklarieren und erzeugen Objekte der Unterklassen deklarieren Schulkind schulkind_1 = new Schulkind(); Kigakind kigakind_1 = new Kigakind(); und erzeugen Kitakind kitakind_1 = new Kitakind(); // attributswerte einlesen schulkind_1.setName("Köhler"); schulkind_1.setVorname("Benjamin"); schulkind_1.setGeburtsjahr(2001); schulkind_1.setAnzahlbetreutergeschwister(0); schulkind_1.setNachhilfe(false); schulkind_1.setKlassenstufe(3); // kigakind_1.setName("Kessler"); Attributswerte in die Objekte übernehkigakind_1.setVorname("Michael"); kigakind_1.setGeburtsjahr(2005); men. Jedes Objekt hat Zugriff auf die kigakind_1.setAnzahlbetreutergeschwister(0); Attribute/Methoden der Oberklasse kigakind_1.setGanztags(false); kigakind_1.setMittagsmahlzeit(false); // kitakind_1.setName("Wagner"); kitakind_1.setVorname("Lene"); kitakind_1.setGeburtsjahr(2008); kitakind_1.setAnzahlbetreutergeschwister(1); kitakind_1.setSprachfoerderung(false); // Konsolenanzeige System.out.println("Schulkind 1:"); System.out.println("------------"); System.out.println("Name: " + schulkind_1.getName()); System.out.println("Vorn: " + schulkind_1.getVorname()); System.out.println("Geburtsjahr: " + schulkind_1.getGeburtsjahr()); System.out.println("Betr. Geschw: " + schulkind_1.getAnzahlbetreutergeschwister()); System.out.println("Klassenstufe: " + schulkind_1.getKlassenstufe()); System.out.println("Grundgebühr: " + schulkind_1.berechneGrundgebuehr()); System.out.println("Betreuungsgeb.: " + Schulkind.getBetreuungsgebuehr()); System.out.println("");; Seite 157 Informatik an beruflichen Gymnasien - Jahrgangstufe 1 System.out.println("Kigakind_1:"); System.out.println("------------"); System.out.println("Name: " + kigakind_1.getName()); System.out.println("Vorn: " + kigakind_1.getVorname()); System.out.println("Geburtsjahr: " + kigakind_1.getGeburtsjahr()); System.out.println("Betr. Geschw: " + kigakind_1.getAnzahlbetreutergeschwister()); System.out.println("Grundgebühr: " + kigakind_1.berechneGrundgebuehr()); System.out.println("Ganztagesesbet: " + kigakind_1.isGanztags()); System.out.println("Mittagstisch: " + kigakind_1.isMittagsmahlzeit()); System.out.println("KigaGebühr: " + Kigakind.getKigagebuehr()); System.out.println("Kitakind_1:"); System.out.println("------------"); System.out.println("Name: " + kitakind_1.getName()); System.out.println("Vorn: " + kitakind_1.getVorname()); System.out.println("Geburtsjahr: " + kitakind_1.getGeburtsjahr()); System.out.println("Betr. Geschw: " + kitakind_1.getAnzahlbetreutergeschwister()); System.out.println("Grundgebühr: " + kitakind_1.berechneGrundgebuehr()); System.out.println("Sprachförd. : " + kitakind_1.isSprachfoerderung()); System.out.println("KigaGebühr: " + Kitakind.getKitagebuehr()); } Zu 10. In den Fachklassen müssen Konstruktoren mit Übergabeparametern eingerichtet werden. Beispiel für die Unterklasse Kigakind siehe Handreichung Seite 51 public Kigakind(String name, String vorname, int geburtsjahr, Übergabeparameter int anzahlbetreutergeschwister, boolean mittagsmahlzeit, boolean ganztags) { Attribute der super(name, vorname, geburtsjahr, anzahlbetreutergeschwister); • Oberklasse this.ganztags = ganztags; mittagsmahlzeit = mittagsmahlzeit; • Unterklasse } mit Datenüber- Objekt kigakind_1 in der Startklasse mit Übergabewerten erzeugen: // Objekt der Klasse Kigakind deklarieren Kigakind kigakind_1; // Objekt kigakind_1 der Klasse Kigakind mit Übergabewerten erzeugen kigakind_1 = new Kigakind("Kessler","Michael",2005,0,false,false); Für die anderen Unterklassen und deren Objekte wird gleich verfahren. Seite 158 nahme Informatik an beruflichen Gymnasien - Jahrgangstufe 1 455_OOP_A Vererbungsstruktur Methoden in den Unterklassen erstellen Problemstellung Laut Beschluss des Trägers der Betreuungseinrichtung ist die Betreuung wie folgt geregelt: • Kindergartenkinder Für die Kigakinder ist eine Kindergartengebühr von 80 € zu entrichten. Sie können ganz- oder halbtagsbetreut sein, bei Halbtagsbetreuung ist die Gebühr um 50 % ermäßigt. Falls ein Kind auch an der Mittagsmahlzeit teilnimmt, ist monatlich eine Gebühr von 50 € zu entrichten. EinzelMahlzeiten gibt es nicht. • Kitakinder Für Kitakinder werden 200 € erhoben. In diesem Preis ist die Mittagsmahlzeit enthalten. Für Kitakinder ist nur Ganztagsbetreuung vorgesehen. Kitakinder können auch Kurse zur Spachförderung belegen, die im Monat mit zusätzlich 20 € in Rechnung gestellt werden. • Schulkinder Die Schulkindbetreuung erfolgt in den Schulferien ganztags, an Schultagen komplementär zur Unterrichtszeit. Die Gebühr von 150 € schließt die Teilnahme an der Mittagsmahlzeit ein. Für Schulkinder kann ergänzend zur allgemeinen Hausaufgabenbetreuung Nachhilfeunterricht gebucht werden, der für Kinder der 1 und 2. Klassenstufe auf 50 €, für Klasse 3 und 4 auf 75 € festgelegt ist. Situation: a) Für die Kindergartenbetreuung liegen folgende Anmeldungen vor: • • Nebel, Maren, Geburtsjahr 2004, keine betreuten Geschwister, ganztägig, Mittagstisch Wagner, Luise, Geburtsjahr 2005,ein betreutes Geschwister, ganztägig, Mittagstisch b) Für die Kindertagesbetreuung liegen folgende Anmeldungen vor: • Knobel, Mareike, Geburtsjahr 2004, keine betreuten Geschwister, mit Sprachförderung c) Für die Schulbetreuung liegen folgende Anmeldungen vor: • Massel, Uwe, Geburtsjahr 2002, keine betreuten Geschwister, Nachhilfe, Klassenstufe 2 Das Projektteam für die Entwicklung der Verwaltungssoftware zur Kinderbetreuung erhält den Auftrag, die vorgegebenen Regelungen umzusetzen, so dass die Anmeldungen bearbeitet werden können. Für jede Anmeldung sollen die Anmeldedaten, die Grundgebühr, die jeweilige Betreuungsgebühr und der Gesamtbeitrag ausgewiesen werden Aufgaben: 1. Starten Sie die Entwicklungsumgebung Eclipse mit dem Projekt projektKinderbetreuung_03 2. Entwerfen Sie jeweils ein Struktogramm zu der Methode berechneGebuehr(), mit der die jeweilige Betreuungsgebühr unter Beachtung der oben angegebenen Bedingungen zu ermitteln und als beitragKiga, beitragKita oder als beitragSchulkind zu liefern. Anschließend muss jeweils noch mit der Methode berechneGesamtbeitrag() der Gesamtbetrag aus Grundgebühr und dem jeweiligen Betreuungsbeitrag ermittelt und als Ergebnis in der Variablen gesamt zurück gegeben werden. 3. Codieren Sie die Methoden berechneGebuehr() und berechneGesamtbeitrag() Lösung siehe Handreichung ab Seite 64 Seite 159