Java - www-stud.informatik.uni

Transcription

Java - www-stud.informatik.uni
Heute: Java
Collections Framework
ENUM
Vererbung, Schnittstellen, Polymorphie
Ausnahmen
Streams & Dateien
OR-Mapping
Literatur
1
Klausuranmeldung !!!
http://www.dbis.informatik.unifrankfurt.de/anmeldung/prg2/klausur/
bzw. Link auch über die PRG2-Webseite.
Anmeldung nur bis 13.7.07 !
2
Grundlagen der Programmierung II
DBIS - SS2007
Java Vorkurs
• als Vorbereitung für das Praktikum WS 07/08
• 1.10. - 12.10.07
• Frei für alle !!!
• Ganztägig, 2 Wochen
• Anmeldefrist vom 03.09.-22.09.07
http://www.gdv.informatik.uni-frankfurt.de/anmeldeformular
3
Grundlagen der Programmierung II
DBIS - SS2007
Teil 7 - Java
Collections Framework
Generics
ENUM
4
Java Collections Framework
• Definiert „Collections“ von Objekten, die über
einheitliche Schnittstellen manipuliert werden können.
• Implementiert Datenstrukturen und Algorithmen.
Beispiel: Durchgehen einer ArrayList
List list = new ArrayList();
list.add(„Hello");
list.add(„World");
for (Iterator i = list.iterator(); i.hasNext();){
System.out.println(i.next());
}
5
Grundlagen der Programmierung II
DBIS - SS2007
Java Collections Framework
Beispiel: Sortieren einer ArrayList
List list = new ArrayList();
list.add(„B");
list.add(„A");
list.add(„C");
Collections.sort(list);
System.out.println(list);
/* hier wird toString() aufgerufen von
java.lang.Objekt bzw. von
java.util.AbstractCollection */
6
Grundlagen der Programmierung II
DBIS - SS2007
Java Collections Framework
Beispiel: Binäre Suche in einer ArrayList
List list = new ArrayList();
list.add("B");
list.add("A");
list.add("C");
Collections.sort(list);
System.out.println(
Collections.binarySearch(list, "A"));
7
Grundlagen der Programmierung II
DBIS - SS2007
Java Collections Framework
Beispiel: Map (Wörterbuch)
Zuordnung von Elementen zu Schlüsseln.
Map map =
new HashMap();
map.put(2, "Hello");
map.put(4, "World");
System.out.println(map.size());
System.out.println(map.get(4));
8
Grundlagen der Programmierung II
DBIS - SS2007
Java 1.5. Generics
Beispiel: Map (Wörterbuch)
Zuordnung von Elementen zu Schlüsseln.
Jetzt ist aber der Typ vorgegeben!
Map<Integer,String> m =
new HashMap<Integer,String>();
map.put(2, "Hello");
9
Grundlagen der Programmierung II
DBIS - SS2007
Java Collections Framework
• Im Package java.util enthalten.
• Übersicht:
java.sun.com/j2se/1.5.0/docs/guide/collections/index.html
Collection
List
Map
Set
SortedMap
SortedSet
• Weitere Datenstrukturen:
http://jakarta.apache.org/commons/collections/apidocs/index.html
10
Grundlagen der Programmierung II
DBIS - SS2007
Java Collections Framework
Set: Menge ohne Duplikate
List: Jedes Element hat einen Index
Map: Jedes Element hat einen Schlüssel
Für uns wichtig: HashMap und ArrayList
11
Grundlagen der Programmierung II
DBIS - SS2007
Übersicht Collections Framework
Quelle: TIJ3 –
Bruce Eckel
12
Grundlagen der Programmierung II
DBIS - SS2007
ENUM - Beispiel
public class Ausgabe {
public enum Day {
SUNDAY, MONDAY, TUESDAY,
WEDNESDAY, THURSDAY, FRIDAY,
SATURDAY
}
public static void main(String[] args){
System.out.println(Day.MONDAY);
}
}
13
Grundlagen der Programmierung II
DBIS - SS2007
ENUM
Die Attribute des Aufzählungstyps enum bestehen
aus einer festen Menge von Konstanten.
ZugriffsSpezifikator enum Bezeichner
{Wert1, Wert2, ...};
• enum-Aufzählungen sind Klassen
• enum-Aufzählungen erben von der Klasse
java.lang.Enum
• enum Aufzählungen sind standardmäßig final
14
Grundlagen der Programmierung II
DBIS - SS2007
Teil 8 - Java
Vererbung
Schnittstellen
Polymorphie
15
Erinnerung: Beispiel für Vererbung
Kraftfahrzeug
Omnibus Stehplätze
Limousine
PKW
Typ, Farbe, kmh
beschleunigen()
bremsen()
LKW anhängen()
Cabriolet Verdeck öffnen()
Cabriolet und Limousine können zusätzliche Methoden bzw. Attribute haben.
Beide erben alle Merkmale von PKW und damit auch von Kraftfahrzeug.
16
Grundlagen der Programmierung II
DBIS - SS2007
Mehrfachvererbung (Multiple Inheritance)
In manchen objektorientierten Programmiersprachen
(C++, Smalltalk usw.) kann eine Klasse mehrere direkte
Oberklassen haben (Mehrfachvererbung)
Î gute Modellierung mancher realen Gegebenheiten:
17
Grundlagen der Programmierung II
DBIS - SS2007
Vererbung
Die Methoden (Prozeduren/Funktionen) der
Elternklasse können beibehalten, modifiziert oder
überschrieben werden, müssen aber denselben
Rückgabetyp haben.
In Java darf eine Klasse nur eine direkte
Elternklasse haben Î Einfachvererbung.
Mehrfachvererbung nur durch Schnittstellen
realisierbar (siehe später).
18
Grundlagen der Programmierung II
DBIS - SS2007
Vererbung
Syntax:
ZugriffsSpezifikator class NameDerKlasse
extends Oberklasse
{
// erbt automatisch alle Attribute und
// Methoden der Oberklasse
}
19
Grundlagen der Programmierung II
DBIS - SS2007
Vererbung
Klassen die final sind, dürfen nicht
vererbt werden.
Attribute/Methoden die protected sind,
können nur im Paket vererbt werden.
20
Grundlagen der Programmierung II
DBIS - SS2007
Erinnerung
public class Person {
private int age;
public void incrementAge() {
age+=1;
}
public static void main(String[] a){
Person p = new Person();
p.incrementAge();
}
}
21
Grundlagen der Programmierung II
DBIS - SS2007
this und super
super: Ermöglicht den Zugriff auf die Methoden der Oberklasse.
this: “Zeigt” auf das aktuelle Objekt.
Beispiel:
public class Student extends Person {
private int semester;
public int getSemester() {
return this.semester;
}
public void incrementAge() {
super.incrementAge();
// Methode in Person
if (this.getSemester() > 8)
System.out.println(“Studium wird teuer!");
}
}
22
Grundlagen der Programmierung II
DBIS - SS2007
instanceof, casting
Mit instanceof kann die Klassenzugehörigkeit
geprüft werden.
...
Object o = xyz.get();
if (o instanceof Student)
int i =
((Student)o).getSemester();
...
Beachte: Ein Objekt ist immer auch Element seiner
Oberklassen.
23
Grundlagen der Programmierung II
DBIS - SS2007
Casting
Bei der Deklaration eines Objektes wird die
entsprechende Klasse, zu der es gehört, angegeben.
Es ist möglich dieses Objekt in ein Objekt einer
Oberklasse zu verwandeln, z.B.:
…
Student s = new Student(4);
Person p = (Person)s;
// Ist das sinnvoll?
…
Diesen Vorgang nennt man casting.
Zu den primitiven Datentypen (siehe letzte Vorlesung)
existieren Regeln, welchen Typ man in welchen umformen
kann.
24
Grundlagen der Programmierung II
DBIS - SS2007
Schnittstellen (Interfaces)
Um Probleme bei der Mehrfachvererbung zu umgehen,
gibt es in Java die eingeschränkte Mehrfachvererbung
durch Schnittstellen.
Interfaces enthalten nur die "Signaturen" von Methoden.
Statt der Definition des Methoden-Inhalts zwischen { und }
enthalten sie nur ein Semikolon:
interface InterfaceName {
void methode1(parameterListe) ;
}
25
Grundlagen der Programmierung II
DBIS - SS2007
Schnittstellen (Interfaces)
Die Subklasse, die dieses Interface implementiert,
muss dann alle darin skizzierten Methoden
enthalten, mit der richtigen Signatur (Typ, Name
und Parameterliste) und mit einem konkreten
Block von Statements:
class ClassName implements InterfaceName {
...
void methode1 (parameterListe) {
... // Statements;
}
}
26
Grundlagen der Programmierung II
DBIS - SS2007
Polymorphie in der Natur
Das Pantherchamäleon
Das Chamäleon ändert seine Farbe in Abhängigkeit seiner Stimmung.
Ärger
Es hat eine andere Farbe, ist aber immer noch dasselbe
Individuum.
27
Grundlagen der Programmierung II
DBIS - SS2007
Polymorphie in der Evolutionstheorie
“It is not the strongest of the species that survives,
nor the most intelligent,
but rather the one most responsive to change.”
Charles Darwin
28
Grundlagen der Programmierung II
DBIS - SS2007
Polymorphie
Die Fähigkeit eines Objektes zu entscheiden,
welche Methode auf sich selbst anzuwenden ist,
bezeichnet man als Polymorphie in der
Objektorientierung.
Das Objekt kann auf eigene Weise auf den Aufruf
einer Methode reagieren.
29
Grundlagen der Programmierung II
DBIS - SS2007
Beispiel Polymorphie
Die Polymorphie bei Methoden
heißt Überladen.
Vorteile des Überladens einer Methode
• sinnvoll, wenn mehrere Methoden dasselbe Ergebnis erzielen
sollen, aufgrund des Eingabetyps aber unterschiedliche
Implementierungen benötigen.
• Im Programmquellcode entfällt dadurch die umständliche Typabfrage
und die anschließende Fallunterscheidung.
• Bei der Programmierung ist darauf zu achten,
dass Methoden mit gleichem Namen inhaltlich „zusammenpassen“.
30
Grundlagen der Programmierung II
DBIS - SS2007
Polymorphie bei Methoden
Beispiel Überladung in Java:
GeoObjekt
berechneFlaeche(Kreis k)
berechneFlaeche(Rechteck r)
Was ist hier nicht
sinnvoll?
• Klasse von geometrischen Formen GeoObjekt.
• Es gibt zwei Methoden zur Flächenberechnung
berechneFlaeche() aber mit unterschiedlichen
Parametern nämlich zur Berechnung von
Kreisen und Rechtecken.
• unterschiedliche Berechungsvorschriften
aber gleicher Name.
31
Grundlagen der Programmierung II
DBIS - SS2007
Überschreiben von Methoden
In einer Unterklasse darf eine Methode mit gleichem Namen
und gleicher Signatur wie in einer Oberklasse definiert werden.
Î Überschreiben (Overwriting)
Oberklasse
methodeX()
Wichtig:
• Unterscheidung zum Überladen:
(vgl. Beispiel „Geometrische Objekte“)
- gemeinsame Oberklasse
- unterschiedliche Klassennamen
Unterklasse1
...
methodeX()
• Oberklassenmethode geht in der Unterklasse verloren
(In Java durch das Keyword super noch zugreifbar!)
32
Grundlagen der Programmierung II
DBIS - SS2007
Auch Polymorphie
Beispiel „Late Binding“ in Java:
GeoObjekt
Kreis
Rechteck
radius
berechneFlaeche()
laenge
breite
berechneFlaeche()
• Klasse von geometrischen Formen GeoObjekt
• Unterklassen Rechteck und Kreis, jeweils mit
einer Methode zur Flächenberechnung berechneFlaeche()
• unterschiedliche Berechungsvorschriften
• aber gleich benannte Methoden
33
Grundlagen der Programmierung II
DBIS - SS2007
Überschreiben von Methoden in Java
Fahrzeug
kmh: int
sitzplaetze: int
fahren()
plaetze_anzeigen()
Omnibus
stehplaetze: int
plaetze_anzeigen()
...
• Die Unterklasse Omnibus erbt alle Attribute und Methoden der
Oberklasse Fahrzeug.
• Zusätzlich erhält die Unterklasse Omnibus das Attribut
stehplaetze.
• Die Methode plaetze_anzeigen() der Oberklasse Fahrzeug wird
in der Unterklasse Omnibus durch eine „neue Version“
überschrieben.
34
Grundlagen der Programmierung II
DBIS - SS2007
Abstrakte Klassen
Eine Exemplarmethode heißt abstract, wenn
sie keinen Rumpfinhalt hat, d.h. wenn nur Ihr Kopf
(Signatur), nicht aber eine Implementation
angegeben wird.
Der Konstruktor einer abstrakten Klasse kann
nicht aufgerufen werden, d.h. es kann kein
Exemplar erzeugt werden.
Ein Klasse, die mindestens eine abstrakte
Methode erbt und diese nicht implementiert,
ist zwangsläufig abstrakt.
35
Grundlagen der Programmierung II
DBIS - SS2007
Innere Klassen
class Haus {
String s = "Haus";
public static void main(String[] args) {
Haus h1 = new Haus();
Zimmer z1 = h1.new Zimmer();
Zimmer z2 = new Haus().new Zimmer(); // in 1er Zeile
}
class Zimmer {
String s = "Zimmer";
}
}
36
Grundlagen der Programmierung II
DBIS - SS2007
Innere Klassen: Beispiel
class Haus { String s = "Haus";
public static void main(String[] args) {
new Haus().new Zimmer().ausgabe();
}
class Zimmer { String s = "Zimmer";
public void ausgabe() {
System.out.println( this.s );
System.out.println( Haus.this.s );
}
}
}
37
Grundlagen der Programmierung II
// Zimmer
// Haus
DBIS - SS2007
Übungs-Aufgabe
class A{
public void foo(){ System.out.println("A"); }
}
class B extends A {
public void foo(){ System.out.println("B");}
public static void main(String[] args){
A aobject = new B();
aobject.foo();
}
}
AUSGABE: B
(VM erkennt dass aobject vom typ B ist)
38
Grundlagen der Programmierung II
DBIS - SS2007
Übungs-Aufgabe
class A{
public int doSomething(int y){return y*2;}
}
public class B extends A{
public long doSomething(int y){return y*4;}
public static void main(String[] args){
B bobject = new B();
long x = bobject.doSomething(5);
System.out.println(x);}
}
Falsches Überschreiben:
Kompilierung schlägt fehl in Zeile:
public long doSomething(int y){return y*4;}
39
Grundlagen der Programmierung II
DBIS - SS2007
Übungs-Aufgabe
class A{
public A(){
super();
System.out.println("A erzeugt");}
}
public class B extends A{
public B(){
System.out.println("B erzeugt");}
}
AUSGABE:
A erzeugt
B erzeugt
super() in class A
unnötig
public class Test{
public static void main(String[] args){
A aobject = new B();}
}
40
Grundlagen der Programmierung II
DBIS - SS2007
Teil 9 - Java
Ausnahmen
41
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 (Runtime Error)
auftreten können.
42
Grundlagen der Programmierung II
DBIS - SS2007
Exceptions - Fehlerarten
mögliche Fehlerarten zur Laufzeit:
• Eingabefehler (durch Benutzer)
• Gerätefehler
• physikalische Grenzen
• Codefehler (z.B. ArrayIndex)
43
Grundlagen der Programmierung II
DBIS - SS2007
Exceptions - Ablauf
Gegeben: Ein Laufzeitfehler löst eine Exception aus (vom
System oder vom Entwickler) .
Entweder Behandlung durch den Programmteil, in dem sie
ausgelöst 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)!
44
Grundlagen der Programmierung II
DBIS - SS2007
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!”);
…
}
45
Grundlagen der Programmierung II
DBIS - SS2007
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
}
...
46
Grundlagen der Programmierung II
DBIS - SS2007
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...
47
Grundlagen der Programmierung II
DBIS - SS2007
Exceptions - catching
Beispiel: Mehrere catch-Blöcke (Reihenfolge beachten)
try {
Anweisung1;
}
catch (Ausnahmetyp1 ex1) {
Anweisung2;
}
catch (Ausnahmetyp2 ex2) {
Anweisung3;
}
48
Grundlagen der Programmierung II
DBIS - SS2007
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.
49
Grundlagen der Programmierung II
DBIS - SS2007
Exceptions - catching
Beispiel: try-catch mit finally-Block
try {
Anweisung1;
}
catch (Ausnahmetyp1 ex1) {
}
finally {
Anweisung2;
}
50
Grundlagen der Programmierung II
DBIS - SS2007
Exceptions - catching
Der finally-Block kann somit verwendet werden,
um Aufräumarbeiten durchzuführen!
Zum Beispiel um Dateien zu schließen oder andere
Ressourcen freizugeben (beispielsweise speicherintensive AWT-Objekte).
Randbemerkung:
grafischen Benutzerschnittstelle (GUI) von Java:
Abstract Window Toolkit (AWT).
Siehe evtl. nächstes Semester im Praktikum.
51
Grundlagen der Programmierung II
DBIS - SS2007
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 nicht
behandelt werden sollen.
52
Grundlagen der Programmierung II
DBIS - SS2007
Exception Weitergabe
Beispiel:
...
public void dbAusgabe() throws SQLException
{
...
ResultSet ergebnis =
stat.executeQuery("SELECT * FROM kunden
WHERE nachname='Schmidt'");
...
}
53
Grundlagen der Programmierung II
DBIS - SS2007
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!");
}
...
54
Grundlagen der Programmierung II
DBIS - SS2007
Exception Klassen (API)
Fehlerobjekte werden von der jeweiligen
Methode generiert und sind Exemplare der Klasse
java.lang.Throwable
• Konstruktoren
Throwable()
Throwable(String msg)
• Methoden
String
void
String
String
55
ex.getMessage();
ex.printStackTrace();
ex.toString();
ex.getLocalizedMessage();
Grundlagen der Programmierung II
DBIS - SS2007
Exception Klassen (API)
einzige direkte Unterklassen von Throwable:
• Error
- schwerwiegender Fehler (virtual machine).
- sollte nicht abgefangen werden.
• Exception
- kann von der Anwendung abgefangen
werden.
56
Grundlagen der Programmierung II
DBIS - SS2007
Exception Klassen (API)
Throwable
Exception
IOException
57
Error
RuntimeException
Grundlagen der Programmierung II
DBIS - SS2007
Exception Klassen (API)
einige wichtige Ausnahmetypen
RuntimeException:
• ArithmeticException (Division durch 0)
• ArrayIndexOutOfBoundsException
• NullPointerException
IOException:
• FileNotFoundException
Error:
• VirtualMachineError
Exception:
• ClassNotFoundException
58
Grundlagen der Programmierung II
DBIS - SS2007
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 muß.
Der Compiler gibt eine Fehlermeldung aus, falls
eine Exception nicht behandelt wird
(catch-or-throw).
59
Grundlagen der Programmierung II
DBIS - SS2007
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/sollen aber
nicht behandelt werden! Fehler-Handling würde
sonst zu groß werden.
60
Grundlagen der Programmierung II
DBIS - SS2007
Exception Behandlung
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) {// kann
return false;}
return true; }}
Vergleiche Klasse Integer: public static int parseInt(String s).
61
Grundlagen der Programmierung II
DBIS - SS2007
Eclipse Fehlermeldung
• IOException nicht behandelt:
Exception in thread "main"
java.lang.Error: Unresolved compilation problem:
Unhandled exception type IOException
• RuntimeException zur Laufzeit aufgetreten:
Exception in thread "main"
java.lang.RuntimeException: intval
at Ausgabe.main(Ausgabe.java:92)
62
Grundlagen der Programmierung II
DBIS - SS2007
Eclipse Fehlermeldung
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
63
Grundlagen der Programmierung II
DBIS - SS2007
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!";
}}
64
Grundlagen der Programmierung II
DBIS - SS2007
Eclipse Fehlermeldung
public static void main(String[] args) {
test()
}
public static void test() throws MyException {
throw new MyException();
}
Exception in thread "main" MyException: Meine Fehlermeldung
at TestMyException.test(TestMyException.java:8)
at TestMyException.main(TestMyException.java:11)
65
Grundlagen der Programmierung II
DBIS - SS2007
Exceptions– Ablauf (im Detail)
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.
66
Grundlagen der Programmierung II
DBIS - SS2007
Teil 10 - Java
Streams & Dateien
67
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).“
68
Grundlagen der Programmierung II
DBIS - SS2007
Streams und Dateien
Rechner A
69
Rechner B
Eingang
Eingang
Ausgang
Ausgang
Grundlagen der Programmierung II
DBIS - SS2007
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.
70
Grundlagen der Programmierung II
DBIS - SS2007
Streams und Dateien
Über 60 erweiterte Streamklassen gibt es schon.
z.B.:
• DataOutput (alle primitiven Typen schreiben);
• DataInput
(alle primitiven Typen lesen);
Diese kann man beliebig miteinander verschachteln.
71
Grundlagen der Programmierung II
DBIS - SS2007
Streams und Dateien
Auch Klassen zum Zugriff auf Dateien sind
vorhanden:
Beispiel:
DataInputStream / DataOutputStream
FileInputStream / FileOutputStream
FileWriter / FileReader
zum Lesen oder Schreiben von Textdateien
72
Grundlagen der Programmierung II
DBIS - SS2007
Teil 11 – „OR-Mapping“
Modellierung der Datenhaltung
(z.B. mit ER-Diagrammen)
und des Datenzugriffs
Literatur
73
ER-Diagramm
Der Kunde muss keine
DVD geliehen haben
(card 0) .
Es kann mehrere Exemplare
geben (card *).
Cartoons haben keine
Schauspieler (card 0).
74
Grundlagen der Programmierung II
DBIS - SS2007
Speicherung von Objekten
in Relationalen Datenbanken
• OR-Mapping
– Eine Klasse wird durch eine Tabelle abgebildet.
– Ein Objekt durch eine Zeile in einer Tabelle.
– Die Beziehungen werden durch Fremdschlüssel
und weitere Tabellen realisiert
(siehe nächste Folie).
Problem: Abbildung der Vererbungshierarchie.
– Methoden werden im Allgemeinen nicht auf die
Datenbank abgebildet.
75
Grundlagen der Programmierung II
DBIS - SS2007
OR-Mapping von 1:n Beziehungen
Eine 1:n Beziehung zwischen zwei Klassen kann durch
eine Tabelle in der Datenbank realisiert werden:
• Schlüssel von Professor (name, uni) wird als
Fremdschlüsselattribut in die Tabelle Vorlesung
aufgenommen.
Æ Vorlesung(name, sws, profName, profUni, profRang)
76
Grundlagen der Programmierung II
DBIS - SS2007
OR-Mapping von n:m Beziehungen
Eine n:m Beziehung zwischen zwei Klassen kann durch
drei Tabellen in der Datenbank realisiert werden:
• für jede der Klassen eine entsprechende Tabelle
• die dritte Tabelle enthält Schlüssel von Student
(matrikelnr) und Schlüssel von Vorlesung (name)
Æ Student(matrikelnr, fach)
Æ Vorlesung(name, sws)
Æ Hört(studentMatrikelnr, vorlesungName)
77
Grundlagen der Programmierung II
DBIS - SS2007
Datenzugriff
• JDBC, SQLJ
• OR-Mapping-Tools
– JDO (Spezifikation von Sun)
– Hibernate (http://www.hibernate.org/)
– EJBs (automatische Persistenz durch EJB-Container)
• Objektserialisierung (Objekte werden als
Byte-Stream gespeichert)
• Speicherung in XML-Files statt der
Verwendung von relationalen Datenbanken.
78
Grundlagen der Programmierung II
DBIS - SS2007
Datenzugriff mit OR-Mapper Hibernate
Auszug aus
XML-Mapping-Datei:
Hier wird festgelegt das Objekte
der Klasse „….core.DVD“ immer
in die Tabelle „DVD“ gespeichert
werden sollen.
<class name=“de.firmenname.appname.core.Dvd“
table=“DVD“>
<id name=“id“ column=“ID“>
Primärschlüssel
<generator class=“identity“ />
</id>
<property name=“status“ type=“string“
update=“true“ insert=“true“
not-null=“true“ unique=“false“ />
Beispiel für das
Attribut „status“
</class>
79
Grundlagen der Programmierung II
DBIS - SS2007
Links, Literatur
http://java.sun.com/docs/books/tutorial/java/index.html
http://de.wikipedia.org/wiki/Java-Syntax
http://www.rz.unihohenheim.de/anw/programme/prg/java/tutorials/javainsel
4/index.htm
„Jetzt lerne ich Java“ -> Bibliothek !!!
80
Grundlagen der Programmierung II
DBIS - SS2007