Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe
Einführung in die
Programmierung mit Java
5. Vorlesung WS 2001/2002
Übersicht
• Besprechung der Übungsaufgabe
• Grundbegriffe der objektorientierten Modellierung
• Klassen und Objekte
– Klassendefinition
– Objektattribute (Instanzvariablen)
– Methoden (Parameterübergabe, Rückgabewert)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
2
Übungsaufgabe vom 24. 11.
Schreiben Sie ein Programm, das den Wert einer
ganzzahligen Variablen w (0 bis 999) so als Text ausgibt,
wie er ausgesprochen wird.
Beispiele:
w = 285
Ausgabe: "zweihundertfünfundachtzig"
w = 513
Ausgabe: "fünfhundertdreizehn"
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
3
Wdh.:Software-Entwicklung: Problemanalyse
Was sind die
Eingangsdaten?
Was soll
ausgegeben
werden?
Ein- und Ausgabe
Wie werden aus
den Eingabedaten
die Ausgabedaten
hergeleitet?
Zerlegung in
Teilprobleme
Problemanalyse
Formalisierung
Randbedingungen
Komplexität
Software-Entwicklung
für einfache Probleme
0  Wert  999
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
4
Übungsaufgabe vom 24. 11.
Schreiben Sie ein Programm, das den Wert einer
ganzzahligen Variablen w (0 bis 999) so als Text ausgibt,
wie er ausgesprochen wird.
Beispiele:
w = 285
Ausgabe: "zweihundertfünfundachtzig"
w = 513
Ausgabe: "fünfhundertdreizehn"
Lösungsansatz: die 100er, 10er und 1er getrennt betrachten. Sonderfälle: die Zahlen von 0 bis 19 müssen
zusammen betrachtet werden und die Zahl 0 muss auch
gesondert berücksichtigt werden.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
5
Software-Entwicklung: Programmentwurf
Zerlegung in
Einzelschritte
Problem
Notation
Projekt Zahlenausgabe: einfaches
• Keine komplexen Datenstrukturen
• Keine besonderen Algorithmen
• Nur Hauptprogramm
Programmentwurf
• Notation direkt in Java
Auswahl
geeigneter
• Benötigte Kontrollstrukturen:
if-then-else und switch
Software-Entwicklung
für einfache Probleme
in Pseudo-Code
als Ablaufdiagramm
direkt in der
Zielprogrammiersprache
Datenstrukturen
Algorithmen
Roter Faden
=
Hauptprogramm
für viele Teilprobleme
gibt es bereits fertige
Alg. + DS
(siehe Vorlesung
Diskrete Mathe)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
6
Lösung zur Aufgabe Teil 1/3
class Zahlenausgabe {
public static void main (String args[]) {
int wert, einer, zehner, hunderter;
wert=157;
// dies ist der auszugebende Wert
einer = wert % 10;
wert = wert / 10;
zehner = wert % 10;
wert = wert / 10;
hunderter=wert;
// Ziffer der 1er-Stelle berechnen
// Ziffer der 10er-Stelle berechnen
// Ziffer der 100er-Stelle berechnen
switch(hunderter) {
case 1: { System.out.print("einhundert"); break; }
case 2: { System.out.print("zweihundert"); break; }
case 3: { System.out.print("dreihundert"); break; }
case 4: { System.out.print("vierhundert"); break; }
case 5: { System.out.print("fünfhundert"); break; }
case 6: { System.out.print("sechshundert"); break; }
case 7: { System.out.print("siebenhundert"); break; }
case 8: { System.out.print("achthundert"); break; }
case 9: { System.out.print("neunhundert"); break; }
// bei 0 wird nichts ausgegeben
}
... Fortsetzung auf der nächsten Seite
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
7
Lösung zur Aufgabe Teil 2/3
if (zehner<2)
// ist die Zehnerstelle 0 oder 1 ?
switch(zehner*10+einer) {
// ja: Zahlen von 0 bis 19 besonders behandeln
case 0: { if (hunderter==0) // wenn auch die 100er Stelle
System.out.print("null"); // 0 ist, dann „null“ ausgeben
break; }
case 1: { System.out.print("eins"); break; }
case 2: { System.out.print("zwei"); break; }
case 3: { System.out.print("drei"); break; }
case 4: { System.out.print("vier"); break; }
case 5: { System.out.print("fünf"); break; }
case 6: { System.out.print("sechs"); break; }
case 7: { System.out.print("sieben"); break; }
case 8: { System.out.print("acht"); break; }
case 9: { System.out.print("neun"); break; }
case 10: { System.out.print("zehn"); break; }
case 11: { System.out.print("elf"); break; }
case 12: { System.out.print("zwölf"); break; }
case 13: { System.out.print("dreizehn"); break; }
case 14: { System.out.print("vierzehn"); break; }
case 15: { System.out.print("fünfzehn"); break; }
case 16: { System.out.print("sechzehn"); break; }
case 17: { System.out.print("siebzehn"); break; }
case 18: { System.out.print("achtzehn"); break; }
case 19: { System.out.print("neunzehn"); break; }
}
... Fortsetzung auf der nächsten Seite
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
8
Lösung zur Aufgabe Teil 3/3
else {
}
}
}
// zehner sind größer als 2
switch(einer) {
case 0: break;
case 1: { System.out.print("einund"); break; }
case 2: { System.out.print("zweiund"); break; }
case 3: { System.out.print("dreiund"); break; }
case 4: { System.out.print("vierund"); break; }
case 5: { System.out.print("fünfund"); break; }
case 6: { System.out.print("sechsund"); break; }
case 7: { System.out.print("siebenund"); break; }
case 8: { System.out.print("achtund"); break; }
case 9: { System.out.print("neunund"); break; }
}
switch(zehner) {
case 2: { System.out.print("zwanzig"); break; }
case 3: { System.out.print("dreißig"); break; }
case 4: { System.out.print("vierzig"); break; }
case 5: { System.out.print("fünfzig"); break; }
case 6: { System.out.print("sechzig"); break; }
case 7: { System.out.print("siebzig"); break; }
case 8: { System.out.print("achtzig"); break; }
case 9: { System.out.print("neunzig"); break; }
}
// Ende des Else-Teils
// Ende der Methode main
// Ende der Klasse Zahlenausgabe
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
9
Software-Entwicklung: Implementierung
Implementierung Zahlenausgabe: trivial
Software-Entwicklung
• Entwurf liegt
bereits in Java-Syntax vor
für einfache Probleme
Realisierung
• Nur integer-Variablen
in einer konkreten
Programmiersprache
• Keine besonderen Funktionen aus
Auswahl geeigneter
Bibliotheken benötigt
Datentypen
Implementierung
Berücksichtigung
vorhandener
Funktionsbibliotheken
Schrittweise Umsetzung
des Pseudo-Codes
in der Ziel-Programmiersprache
Dokumentation des
Quelltextes nicht vergessen!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
10
Software-Entwicklung: Testen
Korrektheit
Terminierung
Falsche
Ergebnisse
Absturz (z.B.
Durch Fehleingaben)
Endlossschleifen
Test: mindestens fünfSoftware-Entwicklung
Fälle
• Zahlen größer 99 für einfache Probleme
Sicherung
der die in der Aufgabenstellung
u.a.
Programmgeforderten 285 und 513
eigenschaften
• Zahlen kleiner 100
• Zahlen mit Zehnerstelle 0 oder 1
typische
• Fehler
Zahlen mit Zehnerstelle 2-9
Testen
• Die Zahl
0
Testszenarien
definieren
Programm mit repräsentativen
Eingabedaten starten und
Ergebnisse überprüfen
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
11
Objektorientierte Modellierung & Programmierung
• Hinter OO stehende Prinzipien
– Abstraktion
– Kapselung
– Objekt
– Kommunikation über Botschaften
• Klassenbildung
– Objekte als Instanzen von Klassen
• Vererbung
• Polymorphismus
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
12
Abstraktion
• ist eine Repräsentation der für die beabsichtigten
Anwendungen / Programme wesentlichen
Eigenschaften
Abstraktion ermöglicht
• in frühen Entwicklungsstadien die Erfassung des
Problemraumes
• Generalisierung von Details
– bei wichtigen Details wird in mehreren Ebenen abstrahiert
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
13
Kapselung (engl.: Information hiding)
• Ergebnis der Kapselung ist eine Entität (Objekt) mit
einer scharfen Abgrenzung von seiner Umgebung,
einer wohldefinierten Schnittstelle und einer
verborgenen internen Repräsentation.
Wohldefinierte Schnittstelle
• Austauschbarkeit der Realisierung
• Objekte sind gut wartbar (z.B. Einbettung in Testumgebung)
Verbergen
• Schutz vor Fehlern, die aufgrund von Annahmen über interne
Realisierung entstehen
• Zugriff auf Attribute idealerweise nur über die Schnittstelle
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
14
Objektkommunikation mittels Botschaften
• Eine Botschaft ist eine u.U. parametrisierte
Nachricht, die der Kommunikation zwischen Objekten
dient.
• Botschaften lösen in der Regel beim
Empfängerobjekt (Re-)Aktionen aus.
• Die Parameterbelegung einer Botschaft kann die Art
der Reaktion beeinflussen.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
15
Objekt
• ist eine gekapselte, der Anwendung entsprechend
abstrahierte Entität.
Jedes Objekt besitzt
• eine eindeutige Objektidentität
• einen Zustand, der durch eine Menge von Attributen
beschrieben wird
• Verfahren, die auf eine definierte Menge von
Botschaften entsprechend reagieren
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
16
Klassenbildung
• Gleichartige Objekte werden durch eine Klasse
repräsentiert.
– Objekte sind Instanzen von Klassen
– Alle Objekte einer Klasse haben die gleichen Attribute
(aber i.d.R. mit unterschiedlichen Werten) und verstehen
Botschaften auf dieselbe Art.
Zu einer Klassendefinition gehören
• Klassenname
• Liste der Attribute (in Java: Instanz- und Klassenvariablen)
• Liste der Botschaften, die Objekte dieser Klasse verstehen
können (in Java: Methoden)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
17
Klassenbezeichner
Klassendefinition in Java
Deklaration der Instanzvariablen:
jede Instanz (Objekt) der Klasse
hat gleichnamige Variablen; die
Werte können aber für jedes Objekt
individuell zugewiesen werden.
class Klassenname {
Typ1 Variablenname1;
Typ2 Variablenname2;
...
Rückgabewerttyp1 Methode1 (Parameterliste) {
// Methodendefinition der 1. Methode
}
Methodenbezeichner
Rückgabewerttyp2 Methode2 (Parameterliste) {
// Methodendefinition der 2. Methode
}
...
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
18
Beispiel zur Klassendefinition
class Rechteck {
double breite, höhe;
// Instanzvariablen (jedes Objekt der Klasse
// Rechteck hat jeweils eigene Variablen)
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
19
Beispiel zur Klassendefinition
class Rechteck {
double breite, höhe;
// Instanzvariablen (jedes Objekt der Klasse
// Rechteck hat jeweils eigene Variablen)
// Methode zur Berechnung des Flächeninhalts
double fläche () {
// keine Parameter; Rückgabewert vom Typ double
double flächeninhalt; // lokale Variable (ex. nur in der Methode)
flächeninhalt=breite*höhe; // Berechnung anhand der Instanzvariablen
return flächeninhalt;
// Rückgabe des berechneten Wertes
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
20
Beispiel zur Klassendefinition
class Rechteck {
double breite, höhe;
// Instanzvariablen (jedes Objekt der Klasse
// Rechteck hat jeweils eigene Variablen)
// Methode zur Berechnung des Flächeninhalts
double fläche () {
// keine Parameter; Rückgabewert vom Typ double
double flächeninhalt; // lokale Variable (ex. nur in der Methode)
flächeninhalt=breite*höhe; // Berechnung anhand der Instanzvariablen
return flächeninhalt;
// Rückgabe des berechneten Wertes
}
// Methode zur Ausgabe des Objekts (als Text)
void ausgeben() {
// keine Parameter; kein Rückgabewert
System.out.println("Dieses Rechteck hat folgende Eigenschaften:");
System.out.print("Breite: ");
System.out.println(breite);
System.out.print("Höhe:
");
System.out.println(höhe);
System.out.print("Fläche: ");
System.out.println(fläche());
// hier steckt ein Methodenaufruf!
}
“void“ bedeutet, dass die
Methode keinen Wert
an den Aufrufer
zurückliefert
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
21
Erzeugen von Objekten
Das Erzeugen eines Objekts wird auch als Instantiierung
bezeichnet.
Syntax:
...
Klassenname Objektvariable;
// Deklaration
...
Objektvariable = new Klassenname (); // Instantiierung
Beispiel:
Rechteck my_rechteck1, my_rechteck2;
my_rechteck1 = new Rechteck();
my_rechteck2 = new Rechteck();
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
22
Aufruf von Methoden
Syntax:
// Methode ohne Rückgabewert (void)
Objektvariable.Methode1(Parameterliste);
...
// Methode mit Rückgabewert
Variable = Objektvariable.Methode2(Parameterliste);
Beispiel:
my_rechteck.ausgeben();
double flächeninhalt;
flächeninhalt=my_rechteck.fläche();
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
23
Zugriff auf Instanzvariablen
Syntax:
...
Objektvariable.Instanzvariable = Wert ;
...
Beispiel:
my_rechteck = new Rechteck;
my_rechteck.breite = 10.0;
System.out.println(my_rechteck.breite);
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
24
Beispiel zu Instantiierung, Variablenzugriff und
Methodenaufruf
class Rechteck {
...
// hier Variablendeklaration & Methodendefinition aus vorigem Beispiel
// einfügen
...
public static void main (String args[])
Rechteck my_rechteck1;
//
my_rechteck1 = new Rechteck();
//
my_rechteck1.breite = 10.0;
//
my_rechteck1.höhe = 5.0;
//
my_rechteck1.ausgeben();
{ // Hauptprogramm
Deklaration einer Objektvariablen
Instantiierung eines Objekts
Zugriff auf Variablen der
Instanz (Zuweisung eines Werts)
Rechteck my_rechteck2 = new Rechteck(); // 2. Objekt dekl. & instant.
my_rechteck2.breite = my_rechteck1.breite - 2.0;
my_rechteck2.höhe = 7.5;
my_rechteck2.ausgeben();
// Die beiden Objekte der Klasse Rechteck haben jeweils einen
// eigenen Zustand, der durch die Wertebelegung der Instanzvariablen
// breite und höhe gegeben ist ((b=10.0,h=5.0) und (b=8.0,h=7.5)).
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
25
Übungsaufgaben
1. Entwerfen und Implementieren Sie analog zur Definition von
Rechtecken die Klassendefinitionen für Dreiecke, Kreise, Ellipsen
und Trapeze. Als Methoden sollten mindestens die
Flächenberechnung und die textuelle Ausgabe der
Variableninhalte zur Verfügung gestellt werden.
2. Entwerfen Sie die Klasse Student, die alle zur Verwaltung eines
Studentenregisters wesentlichen Informationen beinhaltet.
a) Welche Methoden können Sie sich dazu vorstellen?
b) Welche Informationen (Variablen & Methoden) sind auch auf
Dozenten oder Verwaltungsangestellte anwendbar?
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
26
Herunterladen