Teil 2 -

Werbung
Teil 2
4. Vorlesung
Modul: Programmierung B-PRG
Grundlagen der Programmierung II
Professur für Datenbanken und Informationssysteme
Dr. Karsten Tolle
[email protected]
1
public ArrayList <String> methode(ArrayList <String> al) {
al.add("Hallo Welt!");
return al;
}
Aufruf mit methode(null) führt zu einer:
java.lang.NullPointerException
2
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions (API)
Throwable
Exception
IOException
3
Error
RuntimeException
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - Grundlagen
Es gibt außergewöhnliche Bedingungen, die es
nicht gestatten im Code normal fortzufahren,
z.B. wenn man auf eine Datei zugreifen möchte,
die nicht existiert.
Ausnahmen (Exceptions) unter Java bieten
einen Mechanismus zur strukturierten, flexiblen
Behandlung von Fehlern, die während der
Laufzeit eines Programmes auftreten können.
4
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - Fehlerarten
mögliche Fehlerarten zur Laufzeit:
• Eingabefehler (durch Benutzer)
• Gerätefehler
• physikalische Grenzen
• Codefehler (z.B. ArrayIndex)
5
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - Ablauf
Eine Exception wurde erzeugt (vom System oder vom
Entwickler) .
Entweder Behandlung durch den Programmteil, in dem sie
erzeugt wurde oder weitergeben. Beim Weitergeben hat
nun der Empfänger die Möglichkeit sie zu behandeln oder
ebenfalls weiterzugeben.
Wird die Exception von keinem Programmteil behandelt,
führt dies zum Abbruch des Programms (mit
entsprechender Fehlermeldung)!
6
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - throwing
In manchen Fällen sind die Ausnahmen bereits
vorgesehen. Die entsprechenden Methoden enthalten
dann eine throws-Klausel.
throwing = Auslösen der Ausnahme (werfen, schmeißen).
Beispiel:
void read() throws IOException {
…
throw new IOException(“Datei nicht gefunden!”);
…
}
7
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - catching
Will man solche Methoden (die Exceptions werfen) verwenden,
muss die eventuelle Ausnahme abgefangen und die Behandlung
implementiert werden. Alternativ kann die Exception einfach weiter
gereicht werden mit throws.
catching = Behandeln der Ausnahme (Abfangen und Reaktion).
Beispiel:
...
try {
read();
} catch (IOException e) {
…
// im Falle einer Ausnahme
}
...
8
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - catching
In Java übernimmt der try-catch-Block die
Fehlerbehandlung. Er umgibt den Bereich, in dem der
Fehler auftreten könnte.
Tritt im try-Block ein Fehler auf, wird dieser sofort
verlassen (alle weiteren Anweisung werden nicht
ausgeführt!) und es wird in den ersten catch-Block
gesprungen.
Falls dieser die Exception nicht abfängt, wird weiter in den
nächsten catch-Block gesprungen, usw...
9
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - catching
Beispiel: Mehrere catch-Blöcke (Reihenfolge beachten)
try {
Anweisung1;
}
catch (Ausnahmetyp1 ex1) {
Anweisung2;
}
catch (Ausnahmetyp2 ex2) {
Anweisung3;
Ausnahmetyp1 darf nicht
Oberklasse von
Ausnahemtyp2 sein!
}
10
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - catching
der finally-Block ist optional, folgt nach dem letzten
catch-Block und wird immer ausgeführt !!!
Insbesondere:
• wenn das normale Ende des try-Blocks erreicht
wurde (ohne Fehler),
• wenn eine Exception aufgetreten ist, egal ob sie
durch einen catch-Block behandelt wurde oder nicht,
• wenn der try-Block durch break, continue oder
return verlassen wurde.
11
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - catching
Beispiel: try-catch mit finally-Block
try {
…
} catch (Ausnahmetyp ex) {
…
} finally {
…
}
12
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions - catching
Der finally-Block kann verwendet werden, um
Aufräumarbeiten durchzuführen!
Zum Beispiel um Dateien zu schließen oder
andere Ressourcen freizugeben.
13
Grundlagen der Programmierung II
DBIS - SS2010
Exception Weitergabe
Statt eine Exception zu behandeln, kann man sie an die
aufrufende Methode weitergeben:
• einfach die try-catch-Klausel weggelassen und
• an den Methodenkopf die Exceptions mit throws
anhängen (durch Komma getrennt), die
weitergegeben werden können.
14
Grundlagen der Programmierung II
DBIS - SS2010
Exception Weitergabe
Beispiel:
...
public void dbAusgabe() throws SQLException
{
...
ResultSet ergebnis =
stat.executeQuery("SELECT * FROM kunden
WHERE nachname='Schmidt'");
...
}
15
Grundlagen der Programmierung II
DBIS - SS2010
Exception Behandlung
… und dann kann die aufrufende Methode die
Exception z.B. behandeln.
Beispiel von vorheriger Folie:
...
try {
dbAusgabe();
// Ausführung von SELECT
}
catch (SQLException ex) {
System.out.println("DB-Fehler beim Lesen!");
}
...
16
Grundlagen der Programmierung II
DBIS - SS2010
Exception Klassen (API)
einige wichtige Ausnahmetypen
RuntimeException:
• ArithmeticException (Division durch 0)
• ArrayIndexOutOfBoundsException
• NullPointerException
IOException:
• FileNotFoundException
Error:
• VirtualMachineError
Exception:
• ClassNotFoundException
17
Grundlagen der Programmierung II
DBIS - SS2010
Exception Klassen (API)
Für die Standard-Java-Klassen kann man in der
API nachlesen, ob für eine bestimmte Methode
eine Exception behandelt werden muss.
Der Compiler gibt eine Fehlermeldung aus, falls
eine Exception nicht behandelt wird
(catch-or-throw).
18
Grundlagen der Programmierung II
DBIS - SS2010
Exception Klassen (API)
Ausnahmen von der catch-or-throw-Regel
sind alle Klassen, die von RuntimeException
erben bzw. RuntimeException selbst.
Beispiel:
• Gleitkommadivision durch Null
• Überlauf
• Mathematische Fehler
Diese Exceptions können, müssen aber nicht
behandelt werden! Fehler-Handling würde sonst
zu umfangreich werden.
19
Grundlagen der Programmierung II
DBIS - SS2010
Exception Beispiel
Beispiel: Diese Methode testet, ob ein String in einen Integer
umwandelbar ist.
public boolean isInteger(String s){
if ( (s == null) || (s.equals("")) ) {
return false;
}
else {
try {
Integer test = new Integer(s); }
catch (NumberFormatException ex) {
return false;}
return true; }
}
20
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions Besonderheiten
Mathematische Fehler
Exceptions werden nur
bei ganzzahligen Typen geworfen.
System.out.println("Erg: " + 2.0 / 0);
// Ergebnis: Infinity
// vergleiche java.lang.Float.POSITIVE_INFINITY
System.out.println("Erg: " + 2 / 0);
// Laufzeitfehler: ArithmeticException: by zero
21
Grundlagen der Programmierung II
DBIS - SS2010
Eigene Exceptions
Es ist möglich, eigene Fehlerklassen aus den vorhandenen
abzuleiten.
public class MyException extends
IllegalArgumentException {
public MyException() { super(); }
public MyException(String s) { super(s); }
public String getMessage() {
return "Meine feste Fehlermeldung!";}
}
22
Grundlagen der Programmierung II
DBIS - SS2010
Exceptions– Ablauf (noch mal)
Wenn eine Exception auftritt, sucht das
Laufzeitsystem erst in der unmittelbaren trycatch-Anweisung, die diesen Fehler behandelt.
Wird diese nicht gefunden, wird die Suche in den
weiteren umgebenden Blöcken fortgesetzt.
Wird auch hier nichts gefunden, wird die
Exception an den Aufrufer weitergereicht
falls keine Behandlung der Exception erfolgt,
bricht das Programm ab.
23
Grundlagen der Programmierung II
DBIS - SS2010
24
Grundlagen der Programmierung II
DBIS - SS2010
Serialisieren von Objekten in Java
Objekte werden von Java in einer Datei
gespeichert und können wieder geladen werden.
Alle relevanten Objekte müssen das Interface
“java.io.Serializable” implementieren.
25
Grundlagen der Programmierung II
DBIS - SS2010
Serialize - Deserialize
Referenzierende Objekte werden automatisch mit
gespeichert (serialize) und auch mit geleaden
(deserialize).
A
B
class A implements Serializable {
private B b;
public A() {
b = new B();
}
}
26
Grundlagen der Programmierung II
DBIS - SS2010
Beispiel: Java Serialize
public class Person implements Serializable {
String name;
ArrayList nummern = new ArrayList();
…
}
class PersTest {
public static void main(String[] args) {
…
Person a = new Person(“Fred”);
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream(“filename”);
os.writeObject(a);
os.close;
…
ObjectInputStream is = new ObjectInputStream(new FileInputStream(“filename”);
Person b = (Person)is.readObject();
is.close();
…
}
}
27
Grundlagen der Programmierung II
DBIS - SS2010
CSV – Comma-Separated Values
Stunde;Montag;Dienstag;Mittwoch;Donnerstag;Freitag
1;Mathe;Deutsch;Englisch;Mathe;Kunst
2;Sport;Französisch;Geschichte;Sport;Geschichte
3;Sport;"Religion ev;kath";Kunst;Deutsch;Kunst
28
Grundlagen der Programmierung II
DBIS - SS2010
Strings
Zeichenketten (String)
• Folgen von Zeichen
String s = "Hallo";
// char
'J' , String "J"
String b = "Du";
System.out.println(s + b + "!!!");
// Ausgabe c:\>HalloDu!!!
29
Grundlagen der Programmierung II
DBIS - SS2010
String Vergleich
int a=1, b=1;
String x=“abc“, y=“abc“;
if(a==b) …
if(x==y) …
if(x.equals(y)) …
30
Sollte false sein, ist
aber nicht immer sicher!
Grundlagen der Programmierung II
DBIS - SS2010
Strings - StringTokenizer
Um eine Zeichenkette zu analysieren kann die Klasse
StringTokenizer verwendet werden.
Constructor Summary
StringTokenizer(String str)
Constructs a string tokenizer for the specified string.
StringTokenizer(String str, String delim)
Constructs a string tokenizer for the specified string.
StringTokenizer(String str, String delim, boolean returnDelims)
Constructs a string tokenizer for the specified string.
31
Grundlagen der Programmierung II
DBIS - SS2010
Strings - StringTokenizer
Beispiel
String str ="Dies ist; ein String!";
StringTokenizer stkn;
stkn = new StringTokenizer(str, ";“);
while (stkn.hasMoreTokens())
{
System.out.println(stkn.nextToken());
}
32
Grundlagen der Programmierung II
DBIS - SS2010
Streams und Dateien
Um Daten zwischen zwei oder mehreren Rechnern
auszutauschen bedient man sich der Streams.
Streams (Ströme) sind vergleichbar mit einem
Datentunnel zwischen zwei Rechnern.
„Wenn man an einem Ende etwas eingießt, kommt es am
anderem Ende wieder raus (Gartenschlauch nur in eine
Richtung benutzbar).“
33
Grundlagen der Programmierung II
DBIS - SS2010
Streams und Dateien
Rechner A
34
Rechner B
Eingang
Eingang
Ausgang
Ausgang
Grundlagen der Programmierung II
DBIS - SS2010
Streams und Dateien
Die obersten Streamklassen sind die abstrakten Klassen
InputStream und OutputStream.
Diese Klassen bieten Methoden zum Lesen bzw.
Schreiben von einzelnen Bytes oder Byte Feldern.
Um die Funktionalität zu erweitern, müssen die oberen
Klassen erweitern werden.
35
Grundlagen der Programmierung II
DBIS - SS2010
Streams und Dateien
Auch Klassen zum Zugriff auf Dateien sind
vorhanden:
Beispiel:
DataInputStream / DataOutputStream
FileInputStream / FileOutputStream
FileWriter / FileReader
zum Lesen oder Schreiben von Textdateien
36
Grundlagen der Programmierung II
DBIS - SS2010
Streams und Dateien – Bsp.
…
File file = new File("test.txt");
try {
FileWriter fw = new FileWriter(file);
fw.write("Hallo Welt");
fw.flush();
} catch (Exception ex) {
ex.printStackTrace();
}
…
37
Grundlagen der Programmierung II
DBIS - SS2010
Kompaktes Lesen (seit Java 5)
java.util.Scanner
public void readFile(String filename) {
try {
Scanner scanner = new Scanner(new File(filename));
while (scanner.hasNextLine()){
String str = scanner.nextLine();
..
}
} catch (Exception e) {
e.printStackTrace();
}
}
38
Grundlagen der Programmierung II
DBIS - SS2010
Tabellenkalkulationsprogramme
• einfache Datenlisten (Tabellen)
• man kann einfach Diagramme erstellen,
• zum Austausch von Daten (CSV),
• um automatische Kalkulationen durchzuführen,
• …
DBIS - SS2010
DBS / DBMS / DB
Was ist das?
Wann braucht man so etwas?
40
Grundlagen der Programmierung II
DBIS - SS2010
41
Grundlagen der Programmierung II
DBIS - SS2010
Vorteile DBS
Redundanz und Inkonsistenz
Werden durch die zentrale
Datenverwaltung und Datenhaltung
vermieden.
Beschränkung der Zugriffsmöglichkeiten
Durch verschiedene Konzepte können
Informationen miteinander verknüpft
werden (z.B. relationales Modell).
Eingeschränkter Mehrbenutzerbetrieb
Durch die zentrale Benutzerverwaltung
einfach zu realisieren.
Integritätsverletzungen
Durch Constraints in der zentralen
Datenverwaltung gut umzusetzen.
Sicherheitsprobleme
Durch die zentrale Benutzerverwaltung
können Zugriffsrechte gut kontrolliert
werden.
42
Grundlagen der Programmierung II
DBIS - SS2010
weitere Vorteile von DBS
Physische Datenunabhängigkeit:
Anwendungen von Modifikationen an der physischen
Speicherstruktur nicht betroffen.
Logische Datenunabhängigkeit:
Änderungen an der logischen Datenstruktur beeinflussen
Anwendungen nicht umbedingt.
Dauerhafte Speicherung von großen Datenbeständen.
Bereitstellung einer Anfragesprache zum einfachen Umgang mit der
Datenbank.
Sicherheit gegenüber Hard- und Softwareausfällen (Recovery).
Effizient, möglichst schnell unter Benutzung weniger Ressourcen.
43
Grundlagen der Programmierung II
DBIS - SS2010
Fragen um herauszufinden, ob
man ein DBMS benötigt:
1. Liegt eine große Datenmenge vor, die schwer zu
managen ist?
•
•
Braucht es lange das Dokument zu öffnen?
Ist das Betrachten der Daten ist schwierig, muss man viel scrollen und ist es
scher die gesuchten Daten zu finden?
2. Arbeiten verschiedene Personen/Anwendungen mit
den Daten?
3. Gibt es weitere Daten, die mit den gegebenen Daten in
Relation stehen und ebenfalls gespeichert werden?
•
Ziehen Änderungen an einer Stellen Änderungen an anderen Stellen nach
sich?
4. Werden die gleichen Daten an unterschiedlichen Orten
verwendet?
DBIS - SS2010
Wichtige Datenbanken
• Oracle
• IBM DB2
• SQL Server
Company
Revenue 2007
Market share
2007
Oracle
8,343 Mrd. Dollar
37,6%
IBM
4,879 Mrd. Dollar
22,0%
Microsoft
4,670 Mrd. Dollar
21,0%
• …
• MySQL
• PostgreSQL
aus Computerwoche Nr. 3 vom 16. Januar 2009
• Caché
…
45
Grundlagen der Programmierung II
DBIS - SS2010
Arten von DBMS - Datenbankmodelle
hierarchisch: Die Datenobjekte stehen in
verdrahteten Eltern-Kind Beziehungen zueinander.
netzwerkartig: Die Datenobjekte werden miteinander
in Netzen verdrahtet.
Werden hier nicht behandelt!
DBIS - SS2010
Arten von DBMS - Datenbankmodelle
relational: Die Datenobjekte stehen in flachen
Tabellen, Beziehungen ergeben sich aus Werten
der Tabellenspalten RDBMS.
objektorientiert: Die Datenobjekte werden
miteinander verdrahtet, sind gegebenenfalls
miteinander verwandt und können vom System
immer eindeutig identifiziert werden OODBMS.
Es existiert eine Vielzahl von Misch- und
Nebenformen, wie zum Beispiel das
objektrelationale Modell ORDBMS.
DBIS - SS2010
Besondere DBS
XML Datenbanken (Tamino, eXist, …)
Geoinformationssysteme ≡ Geographic
Information System (GIS) / Spatial Databases
NoSQL (Not Only SQL Datenbanken) …
momentan heiß diskutiert.
48
Grundlagen der Programmierung II
DBIS - SS2010
Erste Schritte …
Was sind die Anforderungen?
Was sind die Ziele?
Ist bekannt was gespeichert werden soll?
Design des Datenmodels
DBIS - SS2010
Design
Im Englischen und Französischen bedeutet
design „Gestaltung“ oder „Entwurf“, …
deutschen Sprachgebrauch, der eher auf
formal/künstlerische Aspekte abzielt und den
Designbegriff weitgehend verdinglicht, umfasst
der angelsächsische Begriff design auch
technisch-konstruktive Anteile der „Gestaltung“.
aus Wikipedia: Design
applied arts and engineering
DBIS - SS2010
Entity-Relationship-Modell
Zur Beschreibung der realen Welt!
DBIS - SS2010
(E)ER Modell
Siehe auch: C. Maria Keet: A formal comparison of
conceptual datamodeling languages
(http://ftp.informatik.rwth-aachen.de/Publications/CEURWS/Vol-337/paper3.pdf)
Picture by: Frank Roeing
DBIS - SS2010
Herunterladen