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
11. Vorlesung WS 2001/2002
Übersicht
• Besprechung der Übungsaufgabe
• Ausnahmebehandlung
– Modellierung von Ausnahmezuständen
– Die try-catch-Anweisung
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
2
Übungsaufgabe vom 16. 1.
• Implementieren Sie die Klassen Figur, Dreieck,
Ellipse und Trapez aus dem Beispiel auf Folie 9. Figur
soll eine abstrakte Klasse sein.
• Erweitern Sie jede der vier Klassen um die Methode
umfang(). Diese ist bei Figur abstrakt.
• Erzeugen Sie ein Array, das Dreiecke, Ellipsen und
Trapeze enthält.
• Berechnen Sie die Summe der Umfänge aller
geometrischen Figuren im Array.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
3
1. Lösungsschritt: Implementierung
Figur
fläche()
ausgeben()
Dreieck
seite1 : float
seite2 : float
seite3 : float
fläche()
ausgeben()
Ellipse
radius1 : float
radius2 : float
fläche()
ausgeben()
Kreis
radius : float
fläche()
ausgeben()
Rechteck
breite : float
höhe : float
fläche()
ausgeben()
Trapez
grundlinie1 : float
grundlinie2 : float
höhe : float
fläche()
ausgeben()
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
4
2. Lösungsschritt: Erweiterung um Umfang
• Erweiterung der Klasse Figur.java trivial
• Umfang eines Dreiecks, das durch seine drei Seitenlängen
spezifiziert ist:
– trivial (Addition der Seitenlängen)
• Umfang eines Trapezes, das durch die vier Seitenlängen
gegeben ist:
– trivial (Addition der Seitenlängen)
• Umfang einer Ellipse:
– schwierig: wird durch ein elliptisches Integral berechnet, das durch
keine elementare Formel berechnet werden kann.
– Lösung: Näherungsformel (z.B. aus Bronstein et. al. 1996:
Taschenbuch der Mathematik):

U   1,5(r1  r2 )  r1r2

T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
5
Ergänzung zum 2. Lösungsschritt
• Heutzutage reicht oftmals bereits ein Blick ins Internet, um
bestimmte Fachfragen zu beantworten
• Beispiel:
Suchmaschine http://www.google.de
Eingabe: Umfang Ellipse
• 1. Treffer zeigt auf:
http://www.mathematik-online.de/F57.htm
(dort wird sogar die Herleitung der Näherungslösung aus dem
Integral erläutert)
• Aber: Kein Treffer bedeutet nicht, dass es keine Lösung gibt!!!
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
6
3. Lösungsschritt: Array mit Figuren
• Für das Hauptprogramm, das das Array mit den Figuren
erzeugt, sollte eine eigene Klasse z.B. namens FigurenArray
angelegt werden.
– Man könnte die Methode main() zwar in eine der Klassen Trapez,
Dreieck oder Ellipse hineinsetzen, jedoch sind alle drei Klassen von
der Modellierung her gleichberechtigt und stellen im Prinzip nur
einfache „Komponenten“ dar.
• ein fremder / neuer Benutzer der Klassen müsste raten, von
welcher Klasse er main() starten soll
– Wenn Trapez, Dreieck oder Ellipse ein Hauptprogramm (Methode
main()) enthalten, sollte es ausschließlich zur
Funktionsüberprüfung der jeweiligen Klasse dienen.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
7
Ausnahmesituationen in Java
Eine Ausnahme (engl. Exception) ist ein Ereignis, das
während der Ausführung des Programms auftritt, und
den normalen Fluss der Befehle unterbricht.
Beispiele für Ausnahmesituationen:
•
•
•
•
bei Berechnungen Division durch Null
Mangel an Speicherplatz
Zugriff auf Array-Elemente über die Obergrenze hinaus
Schreib-/Lesefehler bei Ein- und Ausgabeoperationen
–
–
–
–
Diskette defekt
Netzwerkverbindung zusammengebrochen
Festplatte voll
zu öffnende Datei nicht vorhanden usw.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
8
Ausnahmebehandlung in Java (I)
• Java unterstützt explizite Ausnahmebehandlung:
– systematische und übersichtliche Trennung von normalem und
fehlerbehandelndem Code
• Methoden können angeben, ob sie bzw. der in ihnen enthaltene
Programmcode Ausnahmesituationen feststellen bzw. auslösen
können.
• Im Falle einer Ausnahme wird ein sog. Exception-Objekt erzeugt
und an den Aufrufer der Methode übergeben
• Eine Exception kann als ein durch eine Datenstruktur
repräsentiertes Ereignis angesehen werden
– Im Falle einer Ausnahmesituation wird diese mit Hilfe der Datenstruktur
der Exception gemeldet.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
9
Java-Exceptions
• Exceptions sind in Java als Klasse realisiert und zwar
als Unterklasse der Klasse Throwable.
Throwable
(from lang)
Exception
(from lang)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
10
Java-Exceptions: Spezialisierungen
• Ausschnitt aus der Klassenhierarchie unterhalb der
Klasse Exception:
Exception
(from lang)
ArrayIndexOutOfBoundsException
IOException
ArithmeticException
(from lang)
(from io)
(from lang)
FileNotFoundException
(from io)
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
11
Ausnahmebehandlung in Java (II)
• Ausnahmebehandlung wird in Java über die try-Anweisung
realisiert, die aus einem try-Block, einem oder mehreren catchKonstrukten und optional einem finally-Konstrukt bestehen muss.
• Syntax:
try {
... }
Hier steht der
Programmcode, in dem
Fehler auftreten können
catch (Exceptiontyp1 name1) {
... }
catch (Exceptiontyp2 name2) {
... }
finally {
... }
Wird durchlaufen, egal
ob ein Fehler auftrat
oder nicht.
Hier werden
Fehler der Art
Exceptiontyp1
abgefangen
Hier werden
Fehler der Art
Exceptiontyp2
abgefangen
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
12
Übung im GIS-Labor
• Machen Sie folgendes Programm mittels
try {...} catch (Exception e) {...} absturzsicher!
class Ereignis1 {
public static void main (String args[]) {
int a;
int b = 0;
a = 10/b;
System.out.println("Programmende wurde erreicht!");
}
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
13
Ausnahmebehandlung in Java (III)
• Eine Methode muss Exceptions, die sie auslöst, nicht selber
abfangen; dies kann auch in einer sie aufrufenden Methode
erfolgen.
– Exceptions werden auf diese Weise durch die Methoden-Aufrufkette
quasi „nach oben“ propagiert.
– Fängt eine Methode Exceptions nicht selbst ab, sondern leitet sie
weiter, so muss die Exception bei der Definition der Methode
angegeben werden. Anderenfalls resultiert ein Kompilierfehler.
– Beispiel:
Rückgabetyp Methodenname (Parameter) throws Exceptionklasse {
...
}
– wird eine Exception auf oberster Ebene weitergereicht, bricht das
Programm mit einer sog. Runtime-Exception ab
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
14
Vorteile durch Einsatz von Java-Exceptions
• Trennung des Fehlerbehandlungscodes vom
normalen Programm.
• Höhere Absturzsicherheit von Programmen dadurch,
dass Methoden erzwingen können, dass Aufrufer
eine Fehlerbehandlung vorsehen müssen
• auf Grund der Exception-Klassenhierarchie können
Fehler entweder gruppiert oder auch differenziert
behandelt werden
• Weiterreichen von Fehlern über verschachtelte
Methodenaufrufe hinweg
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
15
Beispiel zur getrennten Fehlerbehandlung
• ohne Exceptions
void dateilesen() {
öffnen();
if(öffnenok) {
dateiInhaltlesen();
if (ok){
interpretieren;
...
} else fehler;
} else fehler;
}
• mit Exceptions
try{
öffnen();
dateiInhaltlesen();
interpretieren();
} catch (Exception e) {
fehlerbehandlung;
}
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
16
Übungsaufgabe
• Schreiben Sie ein Programm, das ein Integer-Array mit 500
Elementen erzeugt.
• Füllen Sie das Array mit Zufallszahlen, die im Bereich von 0 bis
99 liegen sollen.
• Anschliessend soll eine Schleife 10000 mal
1. Eine Integer-Zufallszahl von 0 bis 510 erzeugen,
2. welche als Index in das Array verwendet wird und den an der
entsprechenden Stelle befindlichen Wert x=a[zufallsindex] ausliest.
3. Dieser Wert x soll als Divisor für eine beliebige Division verwendet
werden, z.B.: b = 10 / x
• Welche Fehler treten bei der Programmausführung auf?
• Ergänzen Sie das Programm um eine differenzierte
Fehlerbehandlung, so dass es nicht mehr abbricht.
T. H. Kolbe - Einführung in die Programmierung mit Java - 1. Semester - WS 01/02
17
Herunterladen