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