Nachgehakt - String Vergleich int a=1, b=1; String x=“abc“, y=“abc“; if(a==b) … Geht nur manchmal! if(x==y) … if(x.equals(y)) … 1 Grundlagen der Programmierung II DBIS - SS2008 Nachgehakt - Bestimmte Schleifen (for) for (x=0; x !=10; x+=0.01) { …. } Ausprobiert?!? 2 Grundlagen der Programmierung II DBIS - SS2008 Teil 7 - Java Collections Framework 3 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 4 Grundlagen der Programmierung II DBIS - SS2008 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 5 Grundlagen der Programmierung II DBIS - SS2008 Übersicht Collections Framework Quelle: TIJ3 – Bruce Eckel 6 Grundlagen der Programmierung II DBIS - SS2008 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()); } 7 Grundlagen der Programmierung II DBIS - SS2008 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 */ 8 Grundlagen der Programmierung II DBIS - SS2008 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(m.size()); System.out.println(m.get(4)); 9 Grundlagen der Programmierung II DBIS - SS2008 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"); 10 Grundlagen der Programmierung II DBIS - SS2008 ENUM Die Atribute 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 11 Grundlagen der Programmierung II DBIS - SS2008 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); } } 12 Grundlagen der Programmierung II DBIS - SS2008 Teil 8 - Java Vererbung Schnittstellen Polymorphie 13 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. 14 Grundlagen der Programmierung II DBIS - SS2008 Mehrfachvererbung (Multiple Inheritance) In manchen objektorientierten Programmiersprachen (C++, Smalltalk usw.) kann eine Klasse mehrere direkte Oberklassen haben (Mehrfachvererbung) Î gute Modellierung mancher realen Gegebenheiten: 15 Grundlagen der Programmierung II DBIS - SS2008 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). 16 Grundlagen der Programmierung II DBIS - SS2008 Vererbung Syntax Syntax: ZugriffsSpezifikator class NameDerKlasse extends Oberklasse { // erbt automatisch alle Attribute und // Methoden der Oberklasse } 17 Grundlagen der Programmierung II DBIS - SS2008 Vererbung - Zugriffsrechte Klassen die final sind, dürfen nicht vererbt werden. Attribute/Methoden die protected oder public sind, können vererbt werden. Beachte: Attribute/Methoden die protected sind, sind ohne Vererbung nicht sichtbar. 18 Grundlagen der Programmierung II DBIS - SS2008 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(); //Aufruf der Methode in Person if (this.getSemester() > 8) System.out.println(“Achtung, Studiengebühren werden fällig!"); } } 19 Grundlagen der Programmierung II DBIS - SS2008 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 spätere Folie) existieren Regeln, welchen Typ man in welchen umformen kann. 20 Grundlagen der Programmierung II DBIS - SS2008 instanceof Mit instanceof kann die Klassenzugehörigkeit geprüft werden. ... Object o = xyz.get(); if (o instanceof Student) int i = ((Student)o).getAge(); ... Beachte: Ein Objekt ist immer auch Element seiner Oberklassen. 21 Grundlagen der Programmierung II DBIS - SS2008 Schnittstellen (Interfaces) Interfaces enthalten nur die "Signaturen" von Methoden. Statt der Definition des MethodenInhalts zwischen { und } enthalten sie nur ein Semikolon: interface InterfaceName { void methode1(parameterListe) ; } 22 Grundlagen der Programmierung II DBIS - SS2008 Schnittstellen (Interfaces) Wofür: • Trennung von Spezifikation und Realisierung (wie bei ArrayList, LinkedList, …) • Definition der Interaktion zwischen Komponenten • Um Probleme bei der Mehrfachvererbung zu umgehen, gibt es in Java die eingeschränkte Mehrfachvererbung durch Schnittstellen. 23 Grundlagen der Programmierung II DBIS - SS2008 Anzahl der Personen in Modernisierungs-Projekten Persons involved (on average during the duration time) 6-10 Persons 19% 4-5 Persons 20% 11-50 Persons 24% above 50 Persons 12% 3 Persons 12% 2 Persons 11% 1 Person 2% *Quelle: MOMOCS Consortium - Modernization Project Evaluation – http://www.viewzone.org/momocs/evaluation.pdf 24 Grundlagen der Programmierung II DBIS - SS2008 Schnittstellen (Interfaces) Die Klasse, die dieses Interface implementiert, muss 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; } } … die Klasse kann weitere Methoden, die nicht im Interface enthalten sind besitzen! 25 Grundlagen der Programmierung II DBIS - SS2008 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. 26 Grundlagen der Programmierung II DBIS - SS2008 Beispiel „Abstract Class“ public abstract class Person { String name; public Person(String name) { this.name = name; } public abstract String getName(); protected void setName(String name) { this.name = name; } } 27 Grundlagen der Programmierung II DBIS - SS2008 Unterschied Interface – Abstrakte Klasse Interface == keine Implementierung, alles abstrakt Abstrakte Klasse == kann Implementierung enthalten Abstrakt Klassen, die keine Implementierung enthalten sollten als Interface deklariert werden. … beide können nicht instanziiert werden! 28 Grundlagen der Programmierung II DBIS - SS2008 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"; } } 29 Grundlagen der Programmierung II DBIS - SS2008 Ü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 } 30 Grundlagen der Programmierung II DBIS - SS2008 Ü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 redundant public class Test{ public static void main(String[] args){ A aobject = new B();} } 31 Grundlagen der Programmierung II DBIS - SS2008 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. 32 Grundlagen der Programmierung II DBIS - SS2008 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 33 Grundlagen der Programmierung II DBIS - SS2008 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. 34 Grundlagen der Programmierung II DBIS - SS2008 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“. 35 Grundlagen der Programmierung II DBIS - SS2008 Ü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!) 36 Grundlagen der Programmierung II DBIS - SS2008 Überschreiben von Methoden – Bsp. 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. 37 Grundlagen der Programmierung II DBIS - SS2008 Auch Polymorphie Beispiel „Late Binding“ in Java: Bei final-Methoden kann der Compiler Early Binding verwenden! 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 38 Grundlagen der Programmierung II DBIS - SS2008 Teil 9 - Java Ausnahmen 39 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. 40 Grundlagen der Programmierung II DBIS - SS2008 Exceptions - Fehlerarten mögliche Fehlerarten zur Laufzeit: • Eingabefehler (durch Benutzer) • Gerätefehler • physikalische Grenzen • Codefehler (z.B. ArrayIndex) 41 Grundlagen der Programmierung II DBIS - SS2008 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)! 42 Grundlagen der Programmierung II DBIS - SS2008 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!”); … } 43 Grundlagen der Programmierung II DBIS - SS2008 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 } ... 44 Grundlagen der Programmierung II DBIS - SS2008 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... 45 Grundlagen der Programmierung II DBIS - SS2008 Exceptions - catching Beispiel: Mehrere catch-Blöcke (Reihenfolge beachten) try { Anweisung1; } catch (Ausnahmetyp1 ex1) { Anweisung2; } catch (Ausnahmetyp2 ex2) { Anweisung3; } 46 Grundlagen der Programmierung II DBIS - SS2008 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. 47 Grundlagen der Programmierung II DBIS - SS2008 Exceptions - catching Beispiel: try-catch mit finally-Block try { Anweisung1; } catch (Ausnahmetyp1 ex1) { } finally { Anweisung2; } 48 Grundlagen der Programmierung II DBIS - SS2008 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. 49 Grundlagen der Programmierung II DBIS - SS2008 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. 50 Grundlagen der Programmierung II DBIS - SS2008 Exception Weitergabe Beispiel: ... public void dbAusgabe() throws SQLException { ... ResultSet ergebnis = stat.executeQuery("SELECT * FROM kunden WHERE nachname='Schmidt'"); ... } 51 Grundlagen der Programmierung II DBIS - SS2008 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!"); } ... 52 Grundlagen der Programmierung II DBIS - SS2008 Exception Klassen (API) Throwable Exception IOException 53 Error RuntimeException Grundlagen der Programmierung II DBIS - SS2008 Exception Klassen (API) einige wichtige Ausnahmetypen RuntimeException: • ArithmeticException (Division durch 0) • ArrayIndexOutOfBoundsException • NullPointerException IOException: • FileNotFoundException Error: • VirtualMachineError Exception: • ClassNotFoundException 54 Grundlagen der Programmierung II DBIS - SS2008 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). 55 Grundlagen der Programmierung II DBIS - SS2008 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 groß werden. 56 Grundlagen der Programmierung II DBIS - SS2008 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) { return false;} return true; } } 57 Grundlagen der Programmierung II DBIS - SS2008 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 58 Grundlagen der Programmierung II DBIS - SS2008 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!";} } 59 Grundlagen der Programmierung II DBIS - SS2008 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. 60 Grundlagen der Programmierung II DBIS - SS2008 Teil 10 - Java Streams & Dateien 61 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).“ 62 Grundlagen der Programmierung II DBIS - SS2008 Streams und Dateien Rechner A 63 Rechner B Eingang Eingang Ausgang Ausgang Grundlagen der Programmierung II DBIS - SS2008 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. 64 Grundlagen der Programmierung II DBIS - SS2008 Streams und Dateien Auch Klassen zum Zugriff auf Dateien sind vorhanden: Beispiel: DataInputStream / DataOutputStream FileInputStream / FileOutputStream FileWriter / FileReader zum Lesen oder Schreiben von Textdateien 65 Grundlagen der Programmierung II DBIS - SS2008 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(); } … 66 Grundlagen der Programmierung II DBIS - SS2008 Teil 11 – Ausblick: Was gibt es sonst noch und sollte man mal gehört haben? 67 UML - Modellierung UML (Unified Modeling Language) ist eine Standardsprache zum Entwerfen von Softwaremodellen. • Modelle helfen, ein System zu visualisieren, so wie es ist oder wie wir es wünschen. • Modelle ermöglichen uns, die Struktur oder das Verhalten eines Systems zu spezifizieren. • Modelle liefern uns eine Schablone, die uns beim Konstruieren eines Systems anleitet. • Modelle dokumentieren die getroffenen Entscheidungen. 68 Grundlagen der Programmierung II DBIS - SS2008 69 Grundlagen der Programmierung II DBIS - SS2008 Warum modellieren? Beispiel: Der Bau einer Hundehütte Man braucht nur einen Hammer, Nägel und ein paar Bretter, baut diese zusammen und der Hund ist glücklich. Æ Kein Modellieren nötig! 70 Grundlagen der Programmierung II DBIS - SS2008 Warum modellieren? Beispiel: Der Bau eines Hochhauses • Ohne Planung und Arbeitsteilung unmöglich • Viele Auflagen • Sehr hohe Kosten • Ansprüche der Mieter Æ Modellieren unumgänglich! 71 Grundlagen der Programmierung II DBIS - SS2008 Modellieren mit UML • UML ermöglicht objektorientiertes Modellieren. • Da UML standardisiert ist, können die Modelle von anderen Anwendern verstanden werden. • UML ermöglich „Forward-Engineering“: Aus einem UML-Modell kann der Code einer Programmiersprache erzeugt werden (Java, C++...). • UML ermöglich „Reverse-Engineering“: Aus dem Code einer Implementierung kann ein entsprechendes UML-Modell erzeugt werden. 72 Grundlagen der Programmierung II DBIS - SS2008 Multiple Diagramme in UML 2.0 73 Grundlagen der Programmierung II DBIS - SS2008 Modell-Typen in UML Es ist sinnvoll, für die verschiedenen Sichtweisen auf ein System unterschiedliche Modelle zu verwenden. Programmierer Hier: Statiker Kunden Klassendiagramm 74 Anwendungsfalldiagramm Grundlagen der Programmierung II DBIS - SS2008 Ansätze für Persistenz Ohne DBMS – Speicherung in einer Datei Nutzung eines ODBMS Nutzung von RDBMS • JDBC oder SQLJ • EJB • JDO • Frameworks (z.B. Hibernate) Spezielle DBMS, z.B. Cachè von InterSystems … 75 Grundlagen der Programmierung II DBIS - SS2008 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. 76 Grundlagen der Programmierung II DBIS - SS2008 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(); } } 77 Grundlagen der Programmierung II DBIS - SS2008 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(); … } } 78 Grundlagen der Programmierung II DBIS - SS2008 ER-Diagramm Der Kunde muss keine DVD geliehen haben (card 0) . Es kann mehrere Exemplare geben (card *). Cartoons haben keine Schauspieler (card 0). 79 Grundlagen der Programmierung II DBIS - SS2008 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. 80 Grundlagen der Programmierung II DBIS - SS2008 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) 81 Grundlagen der Programmierung II DBIS - SS2008 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) 82 Grundlagen der Programmierung II DBIS - SS2008 JUnit, Ant, Maven, AspectJ, … JUnit = Framework zum Testen von Java-Progr. (Stichwort: Test Driven Development TDD) Ant & Maven = Build-Management Tools (bei größeren Projekten unerlässlich) AspectJ = Aspekt-Orientierte Erweiterung für Java (siehe auch: cross-cutting-concerns) 83 Grundlagen der Programmierung II DBIS - SS2008 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/javainsel4/ index.htm „Jetzt lerne ich Java“ -> Bibliothek !!! … wieder geplant: Java-Intensivkurs als Vorbereitung für das PRG-Praktikum!! 84 Grundlagen der Programmierung II DBIS - SS2008