Nachgehakt - Bestimmte Schleifen (for) for (x=0; x !=10; x+=0.01) { …. } Ausprobiert?!? 1 Grundlagen der Programmierung II DBIS - SS2009 Teil 6 - Java Strings Arrays Pakete 2 Strings Zeichenketten (String) • Folgen von Zeichen String s = "Hallo"; // char 'J' , String "J" String b = "Du"; System.out.println(s + b + "!!!"); // Ausgabe c:\>HalloDu!!! 3 Grundlagen der Programmierung II DBIS - SS2009 Strings • Die Klasse String liefert viele Methoden, um eine Zeichenkette zu bearbeiten. int i = s1.length(); // Länge des Strings s1 char ch = s1.charAt(2); // Zeichen des Strings s1 an der Position 2 4 Grundlagen der Programmierung II DBIS - SS2009 Strings - Methoden Weitere Methoden der Klasse String int compareTo(String anotherString) String concate(String str) String toUpperCase() String trim() //entfernt Leerzeichen String valueOf(char c) String replace(char oldChr,char newChr) • und weitere 5 Grundlagen der Programmierung II DBIS - SS2009 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. 6 Grundlagen der Programmierung II DBIS - SS2009 Strings - StringTokenizer Beispiel String str ="Dies ist; ein String!"; StringTokenizer stkn; stkn = new StringTokenizer(str, ";“); while (stkn.hasMoreTokens()) { System.out.println(stkn.nextToken()); } 7 Grundlagen der Programmierung II DBIS - SS2009 String Vergleich int a=1, b=1; String x=“abc“, y=“abc“; if(a==b) … if(x==y) … if(x.equals(y)) … 8 Sollte false sein, ist aber nicht immer sicher! Grundlagen der Programmierung II DBIS - SS2009 Felder (Arrays) Felder werden benötigt, um temporäre Listen von primitiven Typen oder Objekten zu verwalten. z.B.: Eine Liste der Mitarbeiter… Von jedem Typ lassen sich Felder definieren. Deklaration: int[] i; // ein Integer-Feld Mitarbeiter[] m; //Mitarbeiterfeld Instanzierung: i = new int[10]; m = new Mitarbeiter[100]; 9 Grundlagen der Programmierung II DBIS - SS2009 Arrays Zuweisung i[0] = 100; i[1] = 258; ... i[9] = 300; int zahl = i[9]; //zahl = 300 int zahl2 = i[10]; // exception! Numerierung beginnt bei 0! int[] myArray = {1,2}; // alles zusammen 10 Grundlagen der Programmierung II DBIS - SS2009 Arrays • Es gibt vorgefertigte Methoden, um Felder zu kopieren, zu sortieren, auszugeben etc.: Klasse java.util.Arrays • Mehrdimensionale Felder: int[][] i = new int[5][10] /* Matrix */ 11 Grundlagen der Programmierung II DBIS - SS2009 Arrays • Hinweis: auch unregelmäßige Felder sind möglich (z.B. Pyramide) int[][] intFeld = new int[5][]; for (int i=0; i<5; i++) { intFeld[i]= new int[i+1]; } 12 Grundlagen der Programmierung II DBIS - SS2009 Arrays intFeld 0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 4 Ansprechbar mit intFeld[3][2] 13 Grundlagen der Programmierung II DBIS - SS2009 Pakete • Mehrfachverwendung von Klassen • Übersichtlichkeit, zusammengehörige Klassen in einem Paket • Namensaufbau wie ein URL nur umgedreht (Vorschlag) • Importieren aller Klassen eines Paketes mit dem * (Sternchen) Beispiel: import de.uni-frankfurt.cs.dbis.*; 14 Grundlagen der Programmierung II DBIS - SS2009 Wichtige Pakete java.lang • einfache Datentypen, Ausnahmebehandlung java.util • Datum, Liste, Stack, ZIP, Hashtable, Random java.io • Ein-/Ausgabe, Filesystem java.math • Bitoperationen 15 Grundlagen der Programmierung II DBIS - SS2009 Teil 7 - Java Collections Framework 16 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 17 Grundlagen der Programmierung II DBIS - SS2009 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 18 Grundlagen der Programmierung II DBIS - SS2009 Übersicht Collections Framework Quelle: TIJ3 – Bruce Eckel 19 Grundlagen der Programmierung II DBIS - SS2009 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()); } 20 Grundlagen der Programmierung II DBIS - SS2009 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 */ 21 Grundlagen der Programmierung II DBIS - SS2009 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)); 22 Grundlagen der Programmierung II DBIS - SS2009 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"); 23 Grundlagen der Programmierung II DBIS - SS2009 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 24 Grundlagen der Programmierung II DBIS - SS2009 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); } } 25 Grundlagen der Programmierung II DBIS - SS2009 Teil 8 - Java Vererbung Schnittstellen Polymorphie 26 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. 27 Grundlagen der Programmierung II DBIS - SS2009 Mehrfachvererbung (Multiple Inheritance) In manchen objektorientierten Programmiersprachen (C++, Smalltalk usw.) kann eine Klasse mehrere direkte Oberklassen haben (Mehrfachvererbung) gute Modellierung mancher realen Gegebenheiten: 28 Grundlagen der Programmierung II DBIS - SS2009 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). 29 Grundlagen der Programmierung II DBIS - SS2009 Vererbung Syntax Syntax: ZugriffsSpezifikator class NameDerKlasse extends Oberklasse { // erbt automatisch alle Attribute und // Methoden der Oberklasse } 30 Grundlagen der Programmierung II DBIS - SS2009 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. 31 Grundlagen der Programmierung II DBIS - SS2009 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!"); } 32 Grundlagen der Programmierung II DBIS - SS2009 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. 33 Grundlagen der Programmierung II DBIS - SS2009 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. 34 Grundlagen der Programmierung II DBIS - SS2009 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) ; } 35 Grundlagen der Programmierung II DBIS - SS2009 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. 36 Grundlagen der Programmierung II DBIS - SS2009 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 37 Grundlagen der Programmierung II DBIS - SS2009 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! 38 Grundlagen der Programmierung II DBIS - SS2009 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. 39 Grundlagen der Programmierung II DBIS - SS2009 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; } } 40 Grundlagen der Programmierung II DBIS - SS2009 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! 41 Grundlagen der Programmierung II DBIS - SS2009 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"; } } 42 Grundlagen der Programmierung II DBIS - SS2009 Ü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 } 43 Grundlagen der Programmierung II DBIS - SS2009 Ü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();} } 44 Grundlagen der Programmierung II DBIS - SS2009 Überladen von Methoden void void void void methode1(){…} methode1(String str){…} methode1(String str1, String str2){…} methode1(int i){…} Überladen einer Methode •wenn dasselbe Ergebnis erzielt werden soll, aufgrund des Eingabetyps aber unterschiedliche Implementierungen nötig sind. •reduziert Programmquellcode •Methoden mit gleichem Namen sollten inhaltlich „zusammenpassen“! 45 Grundlagen der Programmierung II DBIS - SS2009 Ü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() Unterklasse1 ... methodeX() 46 Grundlagen der Programmierung II DBIS - SS2009 Ü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. 47 Grundlagen der Programmierung II DBIS - SS2009 Polymorphy – in Java Polymorphy in Java heißt: Wird für ein Objekt eine Methode aufgerufen, wird in Abhängigkeit des Kontextes die „passende“ Methode ausgeführt. z.B.: meinBus.plaetze_anzeigen(); 48 Grundlagen der Programmierung II DBIS - SS2009 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. 49 Grundlagen der Programmierung II DBIS - SS2009 Polymorphie und „Late Binding“ Bei final-Methoden kann der Compiler Early Binding verwenden! GeoObjekt berechneFlaeche() 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 50 Grundlagen der Programmierung II DBIS - SS2009 Teil 9 - Java Ausnahmen 51 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. 52 Grundlagen der Programmierung II DBIS - SS2009 Exceptions - Fehlerarten mögliche Fehlerarten zur Laufzeit: • Eingabefehler (durch Benutzer) • Gerätefehler • physikalische Grenzen • Codefehler (z.B. ArrayIndex) 53 Grundlagen der Programmierung II DBIS - SS2009 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)! 54 Grundlagen der Programmierung II DBIS - SS2009 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!”); … } 55 Grundlagen der Programmierung II DBIS - SS2009 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 } ... 56 Grundlagen der Programmierung II DBIS - SS2009 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... 57 Grundlagen der Programmierung II DBIS - SS2009 Exceptions - catching Beispiel: Mehrere catch-Blöcke (Reihenfolge beachten) try { Anweisung1; } catch (Ausnahmetyp1 ex1) { Anweisung2; } catch (Ausnahmetyp2 ex2) { Anweisung3; } 58 Grundlagen der Programmierung II DBIS - SS2009 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. 59 Grundlagen der Programmierung II DBIS - SS2009 Exceptions - catching Beispiel: try-catch mit finally-Block try { Anweisung1; } catch (Ausnahmetyp1 ex1) { } finally { Anweisung2; } 60 Grundlagen der Programmierung II DBIS - SS2009 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. 61 Grundlagen der Programmierung II DBIS - SS2009 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. 62 Grundlagen der Programmierung II DBIS - SS2009 Exception Weitergabe Beispiel: ... public void dbAusgabe() throws SQLException { ... ResultSet ergebnis = stat.executeQuery("SELECT * FROM kunden WHERE nachname='Schmidt'"); ... } 63 Grundlagen der Programmierung II DBIS - SS2009 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!"); } ... 64 Grundlagen der Programmierung II DBIS - SS2009 Exception Klassen (API) Throwable Exception IOException 65 Error RuntimeException Grundlagen der Programmierung II DBIS - SS2009 Exception Klassen (API) einige wichtige Ausnahmetypen RuntimeException: • ArithmeticException (Division durch 0) • ArrayIndexOutOfBoundsException • NullPointerException IOException: • FileNotFoundException Error: • VirtualMachineError Exception: • ClassNotFoundException 66 Grundlagen der Programmierung II DBIS - SS2009 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). 67 Grundlagen der Programmierung II DBIS - SS2009 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. 68 Grundlagen der Programmierung II DBIS - SS2009 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; } } 69 Grundlagen der Programmierung II DBIS - SS2009 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 70 Grundlagen der Programmierung II DBIS - SS2009 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!";} } 71 Grundlagen der Programmierung II DBIS - SS2009 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. 72 Grundlagen der Programmierung II DBIS - SS2009 Teil 10 - Java Streams & Dateien 73 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).“ 74 Grundlagen der Programmierung II DBIS - SS2009 Streams und Dateien Rechner A 75 Rechner B Eingang Eingang Ausgang Ausgang Grundlagen der Programmierung II DBIS - SS2009 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. 76 Grundlagen der Programmierung II DBIS - SS2009 Streams und Dateien Auch Klassen zum Zugriff auf Dateien sind vorhanden: Beispiel: DataInputStream / DataOutputStream FileInputStream / FileOutputStream FileWriter / FileReader zum Lesen oder Schreiben von Textdateien 77 Grundlagen der Programmierung II DBIS - SS2009 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(); } … 78 Grundlagen der Programmierung II DBIS - SS2009 Teil 11 – Ausblick: Was gibt es sonst noch und sollte man mal gehört haben? 79 Tätigkeiten eines Programmierers 1. Verstehen was getan werden soll. 5% 2. Überlegen wie es umgesetzt werden kann. 3. Umsetzten – Programmieren 4. Testen 20% 10% 5% 5. Fehler finden und beseitigen - Debugging 60% … es sollte also eher Debugger als Programmierer heißen Fehler beheben ist meist nicht das Problem, sondern das Finden der Fehler! DBIS - SS2009 Fehler und Folgefehler Debuggen und Fehler beheben Test Tests Häufigeres Testen reduziert Fehler und Folgefehler! DBIS - SS2009 Testen Wie testet man eigentlich? • Ausgaben auf die Konsole, die Zwischenergebnisse anzeigen. • Nutzen des Debugg-Modus in der IDE • Erstellen von Tests für jede Klasse (z.B. über eine main-Methode). Nachteile? Nutzung eines Frameworks welches das Testen unterstütz! JUnit ist ein solches Framework für Unit-Tests in Java. Es gibt andere Lösungen die spezialisiert sind für das Testen von z.B. EJBs, GUIs oder Web-Anwendungen. DBIS - SS2009 JUnit JUnit ermöglicht: • Bequem Unit-Tests zu schreiben, • diese automatisch unter gleichen Bedingungen ablaufen zu lassen • und einfach anzuzeigen ob die Tests erfolgreich waren oder nicht. • Erlaubt die Trennung von Programm-Code und Tests. Praktikum Grundlagen der DBIS - SS2009 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. 84 Grundlagen der Programmierung II DBIS - SS2009 85 Grundlagen der Programmierung II DBIS - SS2009 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! 86 Grundlagen der Programmierung II DBIS - SS2009 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. 87 Grundlagen der Programmierung II DBIS - SS2009 Modell-Typen in UML Es ist sinnvoll, für die verschiedenen Sichtweisen auf ein System unterschiedliche Modelle zu verwenden. Programmierer Hier: Statiker Kunden Klassendiagramm 88 Anwendungsfalldiagramm Grundlagen der Programmierung II DBIS - SS2009 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 … 89 Grundlagen der Programmierung II DBIS - SS2009 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. 90 Grundlagen der Programmierung II DBIS - SS2009 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(); } } 91 Grundlagen der Programmierung II DBIS - SS2009 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(); … } } 92 Grundlagen der Programmierung II DBIS - SS2009 ER-Diagramm KUNDE (0,*) LEIHT (0,1) id DVD status (1,1) Der Kunde muss keine DVD geliehen haben (card 0) . HAT Es kann mehrere Exemplare (0,*) geben (card *). titel FILM (1,1) REGISSEUR (1,*) name 93 IST TEIL SCHAUSPIELER (0,*) Cartoons haben keine Schauspieler (card 0). Grundlagen der Programmierung II name DBIS - SS2009 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. 94 Grundlagen der Programmierung II DBIS - SS2009 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. Professor name uni rang liest 0..1 Vorlesung name 0..* sws Vorlesung(name, sws, profName, profUni, profRang) 95 Grundlagen der Programmierung II DBIS - SS2009 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 hört 0..* Vorlesung name 0..* sws Student(matrikelnr, fach) Vorlesung(name, sws) Hört(studentMatrikelnr, vorlesungName) 96 Grundlagen der Programmierung II DBIS - SS2009 Ant, Maven, AspectJ, … Ant & Maven = Build-Management Tools (bei größeren Projekten unerlässlich) AspectJ = Aspekt-Orientierte Erweiterung für Java (siehe auch: cross-cutting-concerns) … und es gibt noch vieles mehr! 97 Grundlagen der Programmierung II DBIS - SS2009 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!! 98 Grundlagen der Programmierung II DBIS - SS2009