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