Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Zusammenfassung der Vorwoche
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
IF-ELSE-IF-Ketten Weiter mit PP..
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Exceptions. import java.sql.*; public class MyException{ boolean b; Statement stat; public MyException(){ b = stat.execute("xyz"); } Beim Übersetzen dieses.
DO...WHILE Anweisung.
Java-AG Ausnahmebehandlung Gerhard Gröger.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Klassen und Objekte
Datenströme DVG Datenströme.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Socket-Programmierung
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 1 2 Dr. Christian Herzog Technische.
Grundlagen der Programmierung
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 16: Ausnahmebehandlung.
Java für Fortgeschrittene
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Copyright 2004 Bernd Brügge Einführung in die Informatik II TUM Sommersemester Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität.
Optimale Ursprungsgerade
Programmierpraktikum Java SS 2005
Algorithmen und Datenstrukturen SS 2005
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Algorithmen und Datenstrukturen Übungsmodul 2 Dr. W. Narzt u. Dr. A. Stritzinger.
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Robuste Programme durch Ausnahmebehandlung
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Ein-/ Ausgabe in Java ein Überblick. © eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println()
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
 Präsentation transkript:

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2 Themenbereiche Fehlerbehandlung (Exceptions) Streams, Files Übersicht

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3 Welche Fehler können auftreten, während ein Java Programm läuft Falsche Benutzereingabe (User input errors) Gerätefehler (Device Errors) Überschreiten von Begrenzungen (Physical limitations) Programmierfehler (Code errors) Fehlerbehandlung

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4 –1 oder null Die Aufgerufene Methode gibt einen Fehlercode zurück, den der Aufrufer analysiert In vielen Fällen zweckmäßig und sinnvoll Traditionelle Methoden Rückgabe eines Fehlercodes Beispiel public void foo() { int i; do { i = readIntegerFromFile("Nums.txt"); // do something } while (i != -1); }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5 Traditionelle Methoden 2 i == -1 könnte bedeuten: Datei ist zu Ende Wert ist vorhanden, konnte aber nicht gelesen werden Datei konnte nicht geöffnet, gefunden, gelesen werden anderer Fehler Es gibt noch kaum eine Möglichkeit zu entscheiden, ob nun einfach das File zu Ende war, oder tatsächlich – eine Ausnahmesituation eingetreten ist.

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6 Fehlerbehandlung in Java Exception handling mechanism - Ausnahmebehandlung In Java wird im Falle einer Ausnahmesituation ein Exception-Objekt erzeugt und "geworfen" (thrown) public void foo() { int i; try { do { i = readIntegerFromFile("Nums.txt"); // do something } while (i != -1); } catch (IOException e) { //print e?, notify user... }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7 Fehlerbehandlung in Java 2 Verschiedene Exception Klassen Hierarchie aufgrund von Vererbung möglich Exceptions können weitergeworfen werden Neue Exception Klassen können durch Ableiten (Subclassing) erzeugt werden Die Java Klassenbibliothek verwendet Exceptions (zB bei Streams, Datenbankzugriff, Array-Zugriff, et.c.)

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 8 Hierarchie von Exceptions Die grundlegende Hierachie in Java ErrorException IOExceptionRuntimeException Throwable e.g bad cast out-of-bounds null pointer access illegal argument e.g. read past end of file

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 9 Hierarchie von Exceptions 2 Bedeutung und zweckmäßige Reaktion Error (z.b. MemFullError) wird bei internen Fehlern oder Memory full, et.c. geworfen kaum möglich, ev. Benutzer verständigen, selten Exception (z.b. IOException) Bei Fehlern in der Ein/Ausgabe von Daten Benutzer verständigen, Logfile, situationsbedingte Maßnahmen Andere von Exception abgeleitete Exceptions RuntimeException (z.b. Nullpointerexception) Meist bei Fehlern in der Programmierung (z.B. Array, null) sollten durch geeignete Programmierung vermieden werden

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 10 Programmieren mit Exceptions Übersicht Deklaration von Exceptions "Fangen" von Exceptions Erzeugen von eigenen Exception-Klassen

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 11 Programmieren mit Exceptions 2 Deklaration von Exceptions public void readIntegerFromFile(String s) throws IOException {... } Methoden, die Exceptions werfen, müssen diese (meist) deklarieren Dadurch weiß der Anwender der Methode, welche Ausnahmen er behandeln muß Der aufrufende Code muß (!) eine try/catch clause beinhalten oder selbst die Exception deklarieren In der Klassenbibliothek gibt es viele Methoden, die Exceptions werfen und deshalb eine try/catch clause fordern Nicht alle Exceptions erfordern try/catch clauses (null, Array)

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 12 Programmieren mit Exceptions 3 Implementierungsbeispiel Route public void printDistanceTo(String locationName) throws LocationUnknownException{ if (containsLocationByName(locationName)) { //ok } else { throw new LocationUnknownException() }... }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 13 Programmieren mit Exceptions 4 Fangen von geworfenen Exception-Objekten public void bah() { String locName; locName = reader.getLocationName(); try { rout.printDistanceTo(locName); // do something with x } catch (LocationUnknownException e) { //notify user... }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 14 Programmieren mit Exceptions 5 Erzeugen von eigenen Exception Klassen public class LocationUnknownException extends Exception { }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 15 Programmieren mit Exceptions 6 Welche Exceptions muß man deklarieren und fangen? ErrorException IOExceptionRuntimeException Throwable e.g bad cast out-of-bounds null pointer access illegal argument e.g. read past end of file Errors und RuntimeExceptions sollten nie, können aber praktisch an jeder Stelle im Code auftreten. Deshalb müssen Sie weder deklariert noch gefangen werden.

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 16 Weiterführende Themen Deklaration von mehreren Exceptions throws ExceptionA, ExceptionB Fangen mehrerer Exceptions catch (ExceptionA a) {} catch (ExceptionB b) {} Weiterwerfen von Exceptions catch (ExceptionA a) { //do something throw a; }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 17 Hinweise Im Praktikum werden wir vorwiegend Exceptions fangen (try/catch) Dies gilt insbesondere für die Anwendung der Klassenbibliothek (Streams) Wichtig ist zu verstehen, welcher Code tatsächlich zur Ausführung kommt public void foo() { int i; try { do { i = readIntegerFromFile("Nums.txt"); // do something } while (i != -1); } catch (IOException e) { //print e?, notify user... }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 18 Streams Einleitung Input/Output Technik Streams sind ein einheitliches Konzept zur Eingabe von einer Quelle (Source) Ausgabe auf ein Ziel (Destination) Daten werden sequentiell gelesen und geschrieben Häufig wird von Files gelesen/auf Files geschrieben auch: Netzwerkverbindungen, Konsole oder Blöcke im Speicher (Array) Die Handhabung erfolgt letztlich auf die gleiche Art Alle Klassen im java.io package der Klassenbibliothek

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 19 Streams Einleitung 2 In Java ist jeder Eingabestrom (Bytes) von der abstrakten Klasse InputStream abgeleitet Jeder Ausgabestrom (Bytes) ist von der Klasse OutputStream abgeleitet. Da in Java Unicode für Characters verwendet wird, gibt es neben InputStreams und Outputstreams die abstrakten Klassen Reader und Writer Bytes -> InputStream, OutputStream Characters, Strings -> Reader, Writer

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 20 Streams Einleitung 3 Die Anwendung eines Readers unterscheidet sich kaum von der Anwendung eines Inputstreams (bzw. Writer/OutputStream) Die Java Klassenbibliothek unterstützt eine Vielzahl von Klassen die von den abstrakten Klassen InputStreams, Outputstreams, Readers und Writers ableiten und somit zur Anwendung für uns geeignet sind Wir werden nur einige wenige behandeln

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 21 Lesen und Schreiben von Bytes InputStream Die Klasse InputStream hat eine abstrakte Methode public abstract int read() throws IOException Diese Methode liest ein byte (keinen Character) Falls das Ende des Stroms erreicht wurde, wird –1 zurückgegeben Alle konkreten Klassen (abgeleitet) überschreiben diese Methode mit zweckmäßiger Funktionalität (z.B. FileInputStream) lesen mehrerer Bytes auf einmal: int read(byte[] b) int read(byte[] b, int off, int len) //returns actual number or -1

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 22 Lesen und Schreiben von Bytes OutputStream Die Klasse OutputStream hat eine abstrakte Methode public abstract void write(int b) throws IOException Diese Methode schreibt ein byte (keinen Character) Alle konkreten Klassen (abgeleitet) überschreiben diese Methode mit zweckmäßiger Funktionalität (z.B. FileOutputStream) Nachdem man das letzte byte geschrieben hat, muß close() aufgerufen werden, um Systemressourcen freizugeben (auch Input) Die Methode flush() kann aufgerufen werden, um die Daten aus einem eventuellen Buffer sofort auf das Ziel zu schreiben.

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 23 Lesen und Schreiben von Bytes Beispiel int b; try { FileInputStream fin = new FileInputStream("C:\\somedata.dat"); do { b = fin.read(); if (b!= -1) { // do something } } while (b != -1); fin.close(); } catch (IOException e) { //print e?, notify user... }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 24 Input and Output Streams FileInputStream BufferedInput Stream ZipInputStream InputStream Für uns relevante InputStreams FilterInputStream InflatorInput Stream ObjectInputStream LineNumber InputStream

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 25 Input and Output Streams FileOutputStream BufferedOutput Stream ZipOutputStream OutputStream Für uns relevante OutputStreams FilterOutputStream InflatorOutput Stream ObjectOutputStream LineNumber OutputStream

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 26 Zusammenfassung InputStreams und OutputStreams InputStreams und OutputStreams sind zur Ein/Ausgabe von bytes geeignet Sie eignen sich schlecht zum Lesen und Schreiben von Text, da in Java Unicode verwendet wird (2 Bytes) Man kann Daten, wie ints, Doubles, et.c. zwar mit Streams schreiben; allerdings sind die erstellten Dateien nicht von Menschen lesbar 1234 im binärformat: D2 (4 Bytes)

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 27 Readers and Writers Einleitung: Unicode Plattform: 1 Zeichen = 1 Byte Norm ASCII, allerdings nur (z.B. keine Umlaute) Für die Werte gibt es sog. "Codepages" (Länderspezifsch und/oder Plattformspezifisch) Ein "ö" unter Dos kann unter Windows und auf dem MAC anders interpretiert werden. Java verwendet Unicode: 1 Zeichen = 2 Bytes, weltweiter Standard stellt sicher, daß ein Unicode Zeichen überall gleich interpretiert wird

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 28 Readers and Writers Einleitung: Unicode (2) Problem: Files und ConsoleIO ist plattformspezifisch (Codepage) Bei der Eingabe müssen die plattformspezifischen Zeichen in Unicode übersetzt werden Umgekehrt müssen bei der Erstellung von Dateien die Unicode-Zeichen in plattformspezifische Zeichen übersetzt werden. Bei der direkten Verwendung von Streams müßte dies von Hand geschehen Readers und Writers übernehmen diese Aufgabe

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 29 Readers and Writers Einleitung: Unicode (3) Windows Verwendetes Encoding: 8859_1 Andere Bezeichnungen: ISO Latin-1 oder ANSI

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 30 Readers and Writers Anwendung Beim Erzeugen eines Readers oder Writers kann die Kodierung angegeben werden InputStreamReader inr = new InputStreamReader(new FileInputStream("D:\\localtext.txt")); //plattform Unterbleibt dies, wird automatisch die Kodierung der Plattform verwendet Auf Windows in USA "8859_1" ISO_Latin 1; bei uns "cp1252" InputStreamReader inr = new InputStreamReader(new FileInputStream("D:\\localtext.txt", "cp1255")); //Hebrew Von den erzeugten Readern kann dann unbesorgt gelesen werden, die nötige Übersetzung übernimmt die Implementierung des Readers

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 31 Writer try { OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("C:\\test.txt")); out.write("This is a Text ö ü ä ß ? + #"); //file will be readable with plattform dependent editors out.close(); } catch (IOException e) { // } Textausgabe Verkettung von Streams

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 32 Writer void write(char[] buf) void write(int c) void write(String str) void write(String str, int off, int len) abstract void close() abstract void flush() Die abstrakte Klasse Writer Keine Methoden zur Ausgabe von int, double, et.c. sehr ähnlich zu OutputStream

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 33 Writer Relevante Klassen BufferedWriter Writer OutputStreamWriterPrintWriter effizient newLine() - Methode minimal, kann auf OutputStream schreiben print(..) und println(...) Methoden für verschiedene Typen !!

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 34 PrintWriter Anwendung try { PrintWriter pw = new PrintWriter(new FileOutputStream("D:\\localtest.txt")); for (int i = 1; i < 100; i ++) { pw.print("Testzähler: "); pw.print(i); pw.print(';'); pw.println(1.0/i); } pw.close(); } catch (IOException e) { System.err.println("Error" + e); }

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 35 Ausblick Kommende Woche Readers Parsing von int, double,... File – Klasse (Zugriff auf Verzeichnisse) I/O mit der Konsole (TextIO-Klasse wird wegfallen) Verkettung von Streams