einführung in die programmierung mit java

26
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

Upload: colleen-bell

Post on 02-Jan-2016

33 views

Category:

Documents


1 download

DESCRIPTION

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). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Einführung in die Programmierung mit Java

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer, Dr. Thomas H. Kolbe

Einführung in die Programmierung mit Java

5. Vorlesung WS 2001/2002

Page 2: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

2 2

Übersicht

• Besprechung der Übungsaufgabe

• Grundbegriffe der objektorientierten Modellierung

• Klassen und Objekte

– Klassendefinition

– Objektattribute (Instanzvariablen)

– Methoden (Parameterübergabe, Rückgabewert)

Page 3: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

3 3

Ü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"

Page 4: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

4 4

Wdh.:Software-Entwicklung: Problemanalyse

Problemanalyse

Software-Entwicklung

für einfache Probleme

Ein- und Ausgabe

Was sind dieEingangsdaten?

Was soll ausgegebenwerden?

Zerlegung in Teilprobleme

Formalisierung

Randbedingungen

Komplexität

Wie werden ausden Eingabedatendie Ausgabedatenhergeleitet?

999Wert0

Page 5: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

5 5

Ü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 be-trachten. Sonderfälle: die Zahlen von 0 bis 19 müssen zusammen betrachtet werden und die Zahl 0 muss auch gesondert berücksichtigt werden.

Page 6: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

6 6

Software-Entwicklung: Programmentwurf

Programmentwurf

Software-Entwicklung

für einfache Probleme

Zerlegung inEinzelschritte

Notation

in Pseudo-Code

als Ablaufdiagramm

direkt in derZielprogrammiersprache

Auswahl geeigneter

Datenstrukturen

Algorithmen

für viele Teilproblemegibt es bereits fertigeAlg. + DS(siehe VorlesungDiskrete Mathe)Roter Faden

=Hauptprogramm

Projekt Zahlenausgabe: einfaches Problem• Keine komplexen Datenstrukturen• Keine besonderen Algorithmen• Nur Hauptprogramm• Notation direkt in Java• Benötigte Kontrollstrukturen:if-then-else und switch

Projekt Zahlenausgabe: einfaches Problem• Keine komplexen Datenstrukturen• Keine besonderen Algorithmen• Nur Hauptprogramm• Notation direkt in Java• Benötigte Kontrollstrukturen:if-then-else und switch

Page 7: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

7 7

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; // Ziffer der 1er-Stelle berechnenwert = wert / 10;zehner = wert % 10; // Ziffer der 10er-Stelle berechnenwert = wert / 10;hunderter=wert; // 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

Page 8: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

8 8

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

Page 9: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

9 9

Lösung zur Aufgabe Teil 3/3

else { // zehner sind größer als 2switch(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

Page 10: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

10 10

Software-Entwicklung: Implementierung

Implementierung

Software-Entwicklung

für einfache Probleme Realisierungin einer konkretenProgrammiersprache

Auswahl geeigneterDatentypen

BerücksichtigungvorhandenerFunktionsbibliotheken

Schrittweise Umsetzungdes Pseudo-Codesin der Ziel-Programmiersprache

Dokumentation desQuelltextes nicht vergessen!

Implementierung Zahlenausgabe: trivial• Entwurf liegt bereits in Java-Syntax vor• Nur integer-Variablen• Keine besonderen Funktionen aus

Bibliotheken benötigt

Implementierung Zahlenausgabe: trivial• Entwurf liegt bereits in Java-Syntax vor• Nur integer-Variablen• Keine besonderen Funktionen aus

Bibliotheken benötigt

Page 11: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

11 11

Software-Entwicklung: Testen

Testen

Software-Entwicklung

für einfache Probleme

Sicherung derProgramm-eigenschaften Korrektheit

Terminierung

typische Fehler

FalscheErgebnisse

Absturz (z.B. Durch Fehleingaben)

EndlossschleifenTestszenariendefinieren

Programm mit repräsentativenEingabedaten starten undErgebnisse überprüfen

Test: mindestens fünf Fälle• Zahlen größer 99

u.a. die in der Aufgabenstellunggeforderten 285 und 513

• Zahlen kleiner 100• Zahlen mit Zehnerstelle 0 oder 1• Zahlen mit Zehnerstelle 2-9 • Die Zahl 0

Test: mindestens fünf Fälle• Zahlen größer 99

u.a. die in der Aufgabenstellunggeforderten 285 und 513

• Zahlen kleiner 100• Zahlen mit Zehnerstelle 0 oder 1• Zahlen mit Zehnerstelle 2-9 • Die Zahl 0

Page 12: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

12 12

Objektorientierte Modellierung & Programmierung

• Hinter OO stehende Prinzipien

– Abstraktion

– Kapselung

– Objekt

– Kommunikation über Botschaften

• Klassenbildung

– Objekte als Instanzen von Klassen

• Vererbung

• Polymorphismus

Page 13: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

13 13

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

Page 14: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

14 14

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

Page 15: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

15 15

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.

Page 16: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

16 16

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

Page 17: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

17 17

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)

Page 18: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

18 18

Klassendefinition in Java

class Klassenname {Typ1 Variablenname1;Typ2 Variablenname2;. . .Rückgabewerttyp1 Methode1 (Parameterliste) {// Methodendefinition der 1. Methode}Rückgabewerttyp2 Methode2 (Parameterliste) {// Methodendefinition der 2. Methode}. . .

}

KlassenbezeichnerKlassenbezeichner

Deklaration der Instanzvariablen:jede Instanz (Objekt) der Klassehat gleichnamige Variablen; die Werte können aber für jedes Objektindividuell zugewiesen werden.

Deklaration der Instanzvariablen:jede Instanz (Objekt) der Klassehat gleichnamige Variablen; die Werte können aber für jedes Objektindividuell zugewiesen werden.

MethodenbezeichnerMethodenbezeichner

Page 19: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

19 19

Beispiel zur Klassendefinition

class Rechteck {double breite, höhe; // Instanzvariablen (jedes Objekt der Klasse

// Rechteck hat jeweils eigene Variablen)

}

Page 20: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

20 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ächeninhaltsdouble 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 Instanzvariablenreturn flächeninhalt; // Rückgabe des berechneten Wertes

}

}

Page 21: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

21 21

Beispiel zur Klassendefinition

class Rechteck {double breite, höhe; // Instanzvariablen (jedes Objekt der Klasse

// Rechteck hat jeweils eigene Variablen)

// Methode zur Berechnung des Flächeninhaltsdouble 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 Instanzvariablenreturn 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 dieMethode keinen Wert an den Aufrufer zurückliefert

“void“ bedeutet, dass dieMethode keinen Wert an den Aufrufer zurückliefert

Page 22: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

22 22

Erzeugen von Objekten

Das Erzeugen eines Objekts wird auch als Instantiierungbezeichnet.

Syntax:. . .

Klassenname Objektvariable; // Deklaration. . .

Objektvariable = new Klassenname (); // Instantiierung

Beispiel:

Rechteck my_rechteck1, my_rechteck2;

my_rechteck1 = new Rechteck();

my_rechteck2 = new Rechteck();

Page 23: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

23 23

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();

Page 24: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

24 24

Zugriff auf Instanzvariablen

Syntax:

. . .

Objektvariable.Instanzvariable = Wert ;. . .

Beispiel:

my_rechteck = new Rechteck;

my_rechteck.breite = 10.0;

System.out.println(my_rechteck.breite);

Page 25: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

25 25

Beispiel zu Instantiierung, Variablenzugriff und Methodenaufruf

class Rechteck {...// hier Variablendeklaration & Methodendefinition aus vorigem Beispiel// einfügen...

public static void main (String args[]) { // HauptprogrammRechteck my_rechteck1; // Deklaration einer Objektvariablenmy_rechteck1 = new Rechteck(); // Instantiierung eines Objektsmy_rechteck1.breite = 10.0; // Zugriff auf Variablen dermy_rechteck1.höhe = 5.0; // Instanz (Zuweisung eines Werts)my_rechteck1.ausgeben();

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)).

}}

Page 26: Einführung in die Programmierung mit Java

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02 T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02

26 26

Ü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?