501 likes | 941 Views
Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker. Einführung in die OOP in Java. WS 07/08. Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de. Interfaces.
E N D
Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker Einführung in die OOP in Java WS 07/08 Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de Java-Intensivkurs WS07/08 Folie 1
Interfaces • Ein Interface (Schnittstelle) besteht aus einer Sammlung von statischen Konstanten und abstrakten Methoden, die als public deklariert sind • Ein Interface kann als abstrakte Klasse aufgefasst werden, die nur abstrakte Methodendeklarationen und statische Kostanten umfasst • Interfaces werden mit dem Schlüsselwort interface deklariert, dürfen keine Konstruktoren definieren und können daher nicht instanziiert werden Java-Intensivkurs WS07/08 Folie 2
Interfaces • Alle in einem Interface definierten Attribute sind automatisch statische Konstanten, die initialisiert werden müssen Java-Intensivkurs WS07/08 Folie 3
Interfaces • Interfaces werden erstellt, um von Klassen implementiert zu werden • Eine Klasse, die ein Interface implementiert, muss alle Methoden des Interfaces überschreiben: Java-Intensivkurs WS07/08 Folie 4
Interfaces Java-Intensivkurs WS07/08 Folie 5
Interfaces • Eine Klasse, die nicht alle Methoden eines Interfaces implementiert, muss als abstract deklariert werden • Interfaces können wie Klassen voneinander abgeleitet werden • Interfaces können als ein restriktiver Mechanismus für Mehrfachvererbung verwendet werden • So kann eine Klasse mehrere Interfaces implementieren. Sie muss dann zu jedem Interface alle darin definierten Methoden implementieren: Java-Intensivkurs WS07/08 Folie 6
Das Interface Comparable • Eine Klasse, die dieses Interface implementiert, definiert eine Ordnung auf ihre Objekte und macht sie paarweise vergleichbar • Ihre Objekte können z.B. von Sortiermethoden sortiert werden Java-Intensivkurs WS07/08 Folie 7
Comparable Java-Intensivkurs WS07/08 Folie 8
Comparable • Alle Wrapper-Klassen und viele andere Klassen wie String, Date, File… implementieren das Comparable Interface Java-Intensivkurs WS07/08 Folie 9
Namenskonventionen • Ein Namenskonvention ist eine Empfehlung wie Pakete, Klassen, Variablen, Methoden, Interfaces… etc. sinnvoll bezeichnet werden sollen • Paketnamenskonvention: • Paketnamen sollten aus Kleinbuchstaben bestehen • Sollten kurze Nomen (Substantive) sein • Sie dürfen auch Ziffern enthalten • Beispiel: de.frankfurt.cs.gdv.visian3d Java-Intensivkurs WS07/08 Folie 10
Namenskonventionen • Klassennamen: • Beginnen mit einem Großbuchstaben und sollten Nomen (Substantive) sein • Besteht ein Klassenname aus mehreren Silben wie z.B. BinaryNode, RedBlackTree so beginnt jeder Silbe beginnt ebenfalls mit einem Buchstaben • Beispiele: Point, ComplexNumber, VisualBinarySearchTree… Java-Intensivkurs WS07/08 Folie 11
Namenskonventionen • Methodennamen: • Beginnen mit Kleinbuchstaben • Sollten Verbe get(), run(), save()… sein • Besteht ein Methodenname aus mehreren Silben wie z.B. getUserName() so beginnt jeder Silbe beginnt mit einem Buchstaben • Boolesche Funktionen sollten mit „is“, „has“, „can“, etc. anfangen run(), getLeftChild(),setName(), isReady(), shouldWait().. Java-Intensivkurs WS07/08 Folie 12
Namenskonventionen • Variablennamen: • Beginnen mit Kleinbuchstaben • Darauffolgende Silben fangen mit einem Großbuchstaben an • Sie sollten kurz und ausdrucksstark sein • Boolesche Variablen sollten mit „is“, „has“, „can“ etc. anfangen age, userName, isVisible, hasTicket, canStart, shouldRestarted…. Java-Intensivkurs WS07/08 Folie 13
Namenskonventionen • Konstantennamen: • Bestehen aus Großbuchstaben • Silben werden durch einen Unterstrich getrennt SIZE, MAX_VALUE, EDGE_COLOR Java-Intensivkurs WS07/08 Folie 14
Namenskonventionen • Interfaces : • Beginnen mit einem Großbuchstaben und sollten Nomen (Substantive) sein • Silben beginnen ebenfalls mit einem Buchstaben GeometricObjectInterface Java-Intensivkurs WS07/08 Folie 15
Object, Math und String • Object ist die Oberklasse aller Java-Klassen • Jede Klasse, die nicht explizit von einer anderen Klasse abgeleitet wird, wird implizit von Object abgeleitet • Klasse Object verfügt über zahlreiche Methoden: Java-Intensivkurs WS07/08 Folie 16
Object • public String toString(): • Liefert eine String-Darstellung eines Objektes zurück • Wird z.B. von der Methode System.out.println() aufgerufen • Standardimplementierung der Methode liefert den Klassennamen und den HashCode des Objektes im Hexdezimal-Format als String zurück: Java-Intensivkurs WS07/08 Folie 17
Object • Will man eine sinnvolle String-Darstellung des Objektes haben, dann muss die Methode überschrieben werden: Java-Intensivkurs WS07/08 Folie 18
Object • Überschreibung der toString-Methode in Bankkonto Java-Intensivkurs WS07/08 Folie 19
Objektvergleiche • Zwei Möglichkeiten, Objekte zu vergleichen • Mit "==" • boolean equals(Object o) • Für primitive Variablen überprüft „==„ , ob die beiden Variablen den gleichen Wert haben • Für Referenzen überprüft „==„ , ob zwei Referenzen auf dasselbe Objekt verweisen • Es werden die Referenzwerte (Speicheradressen) verglichen Java-Intensivkurs WS07/08 Folie 20
Objektvergleiche • boolean equals(Object o) • Überprüft zwei verschiedene Objekte auf inhaltliche Gleichheit (Vergleicht die Objekte nicht die Referenzen) • Die standardmäßige Implementierung von boolean equals(Object o) führ lediglich einen Referenzvergleich durch und ist somit äquivalent zu „==„ boolean equals(Object o) sollte in der eigenen Klasse überschrieben werden Java-Intensivkurs WS07/08 Folie 21
HashCode • Ein HashCode ist: • Ein Integerwert • Repräsentiert die Eindeutigkeit eines Objektes • Zwei Objekte, die gemäß der equals()-Methoden gleich sind, müssen den gleichen HashCode haben • Wird verwendet in den Collections (Datenstruktren), die hashbasiert sind Java-Intensivkurs WS07/08 Folie 22
Math • Enthält eine Sammlung von mathematischen Methoden und Kostanten • Ist als final deklariert darf nicht abgeleitet werden • Enthält nur einen privaten Konstruktor kann nicht instanziiert werden Java-Intensivkurs WS07/08 Folie 23
Math Java-Intensivkurs WS07/08 Folie 24
String • Eine Zeichenkette (String) in Java ist eine indizierte geordnete Folge von Unicode-Zeichen • Indexierung beginnt bei 0 • Strings sind unveränderbar (immutable) • Strings ist final • Ein String-Objekt kann entweder mit einem Konstruktor der Klasse String oder als String-Literal erstellt werden Java-Intensivkurs WS07/08 Folie 25
String Java-Intensivkurs WS07/08 Folie 26
String • int length(): • Liefert die Länge der Zeichenkette zurück • charAt(int index): • Liefert das Zeichen an Position index zurück • index muss zwischen 0 und length()-1 liegen,sonst wird eine java.lang.StringIndexOutOfBoundsException geworfen • substring(int begin, int end): • Liefert den Teilstring zurück, der am Index begin beginnt und am Index end-1 einschließlich endet • substring(int begin): • Liefert den Teilstring von der angegebenen Position bis zum Ende des Strings zurück Java-Intensivkurs WS07/08 Folie 27
String • trim(): • Liefert den String zurück, der entsteht, wenn alle Leerzeichen am Anfang und am Ende des Strings entfernt werden • equalsIgnoreCase(): • Vergleicht String miteinander ohne Groß-/Kleinschreibung zu beachten • toLowerCase() • Wandelt den String in Kleinbuchstaben um, liefert ihn zurück • toUpperCase(): • Wandelt den String in Großbuchstaben um, liefert ihn zurück Java-Intensivkurs WS07/08 Folie 28
String • replace(char oldChar, char newChar): • Ersetzt alle vorkommen des Zeichens oldChar durch das Zeichen newChar: Java-Intensivkurs WS07/08 Folie 29
Exceptions • Ausnahmen (Exceptions) sind Java-Klassen zur Erkennung und Behandlung von Laufzeitfehlern • Ein Laufzeitfehler ist ein Fehler, der während der Ausführung eines Programms auftritt und während des Kompiliervorganges nicht erkannt werden kann • Ein Exception-Objekt repräsentiert einen Laufzeitfehler, der den normalen Ablauf des Programms stört oder gar beendet Java-Intensivkurs WS07/08 Folie 30
Exceptions • Drei Arten von Fehlern • Vermeidbare Fehler (Bugs): • Das sind Fehler, die durch den Programmierer verursacht werden und praktisch vermieden werden können • Division durch 0 • Zugriff auf einen ungültigen Arrayindex • Zugriff auf eine null-Referenz Java-Intensivkurs WS07/08 Folie 31
Fehlerarten in Java • Unvermeidbare Fehler: • Ein Programm versucht auf einen Server zuzugreifen, der gerade ausgeschaltet ist • Ein Programm versucht eine Datei zu öffnen, die beschädigt ist bzw. gelöscht wurde • Ein Programm fordert den Benutzer auf eine Zahl einzugeben. Stattdessen gibt der Benutzer ein String ein Java-Intensivkurs WS07/08 Folie 32
Fehlerarten in Java • Systemfehler (System Errors): • Das sind schwerwiegende nicht behebbare Fehler, nach deren Auftreten die Fortsetzung des Programms nicht sinnvoll bzw. gar nicht möglich ist • Führen zu einem Programmabbruch und zur Beendigung des Interpreters • Beispiele: Speicherüberlauffehler (Memory Overflow), Fehler in der JVM Java-Intensivkurs WS07/08 Folie 33
Fehlerbehandlung • Zur Behandlung von Laufzeitfehlern stellt Java das Exception-Konzept zur Verfügung • Wenn ein Programmteil (eine Methode oder Anweisung) einen Fehler verursacht, löst die JVM eine Ausnahme (throwing exception), die vom Programm abgefangen (catchingexception) und behandelt (handlingexception) werden kann • Zur Behandlung einer Ausnahme übergibt die JVM an das Programm ein Exception-Objekt, das Informationen über den Fehler enthält wie z.B. Fehlerart, Fehlerbezeichnung Programmzustand zum Zeitpunkt des Auftreten des Fehlers …etc Java-Intensivkurs WS07/08 Folie 34
Fehlerbehandlung • Die Behandlung von Ausnahmen erfolgt mittels der try-catch-Anweisung: Java-Intensivkurs WS07/08 Folie 35
Fehlerbehandlung Java-Intensivkurs WS07/08 Folie 36
Throwable • Die Vaterklasse aller Exceptions ist die Klasse java.lang.Throwable • Zwei wichtige Methoden: • getMessage() Wenn ein Laufzeitfehler auftritt, generiert die JVM ein Ausnahme-Objekt und speichert in ihm eine Textnachricht getMessage() gibt diese Nachricht zurück • printStackTrace() liefert eine Art Momentaufnahme des Programmstacks (stack trace) zum Zeitpunkt des Auftretens des Fehlers in Form einer Textnachricht zurück Java-Intensivkurs WS07/08 Folie 37
Ausnahmetypen • Zwei Arten von Ausnahmen • Geprüfte Ausnahmen (checked exceptions) • Laufzeitausnahmen (runtime exceptions) • Laufzeitausnahmen repräsentieren vermeidbare Fehler • Beispiele: ArrayIndexOutOfBoundsException, NegativeArraySizeException, NullPointerException und StringIndexOutOfBoundsException Java-Intensivkurs WS07/08 Folie 38
Ausnahmetypen • Die geprüften Ausnahmen dagegen repräsentieren unvermeidbare Fehler und Systemfehler • Beispiele FileNotFoundException und IOException Java-Intensivkurs WS07/08 Folie 39
Ausnahmetypen • Alle aus der Klasse java.lang.RunTimeException abgeleiteten Exceptions sind Laufzeitausnahmen • Laufzeitausnahmen können, jedoch müssen nicht abgefangen und behandelt werden Java-Intensivkurs WS07/08 Folie 40
Ausnahmetypen • Alle aus der Klasse java.lang.Exception abgeleiteten Exceptions sind geprüfte Exceptions • Geprüfte Ausnahmen dagegen müssen vom Programmierer mittels einer try-catch-Anweisung immer abgefangen und behandelt werden Java-Intensivkurs WS07/08 Folie 41
Auslösen einer Exception • Der Programmierer kann Methoden definieren, die selbst Ausnahmen auslösen: • Eine Methode kann eine oder mehrere Ausnahmen werfen • Dies erfolgt mithilfe der throws Anweisung Java-Intensivkurs WS07/08 Folie 42
Behandeln einer Exception • Da factorial() eine geprüfte Ausnahme wirft (siehe API-Dokumentation), muss jede andere Methode, die factorial() aufrufen will, dies innerhalb einer try-catch-Anweisung tun Java-Intensivkurs WS07/08 Folie 43
Weitergabe von Exceptions • Es ist auch möglich das Abfangen und die Behandlung einer Ausnahme an die aufrufende Methode weiterzugeben, wie das folgende Beispiel zeigt: Java-Intensivkurs WS07/08 Folie 44
Behandlung von mehreren Ausnahmen Java-Intensivkurs WS07/08 Folie 45
finally • Am Ende einer try-catch-Anweisung kann ein finally-Block stehen • Der fianlly-Block wird immer ausgeführt, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht Java-Intensivkurs WS07/08 Folie 46
finally Java-Intensivkurs WS07/08 Folie 47
Erstellung eigener Exception-Klassen • Zur Erstellung einer eigenen Exception-Klasse, muss entschieden werden, ob die neue Ausnahme eine geprüfte oder eine Laufzeitausnahme sein soll • Eine Laufzeitausnahme muss von der Klasse java.lang.RuntimeException oder von einer ihrer Unterklassen abgeleitet werden • Eine geprüfte Ausnahme muss von der Klasse java.lang.Exception oder von einer ihrer Unterklassen abgeleitet werden • Die Klasse soll zwei Konstruktoren deklarieren, einen parameterlosen Konstruktor und einen Konstruktor, der als Parameter eine Textnachricht (message) übergeben bekommt Java-Intensivkurs WS07/08 Folie 48
Erstellung einer geprüften Exception Java-Intensivkurs WS07/08 Folie 49
Erstellung einer Laufzeit-Exception Java-Intensivkurs WS07/08 Folie 50