1 / 50

Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de

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.

ellery
Télécharger la présentation

Ashraf Abu Baker baker@gdv.cs.uni-frankfurt.de

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. Interfaces • Alle in einem Interface definierten Attribute sind automatisch statische Konstanten, die initialisiert werden müssen Java-Intensivkurs WS07/08 Folie 3

  4. 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

  5. Interfaces Java-Intensivkurs WS07/08 Folie 5

  6. 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

  7. 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

  8. Comparable Java-Intensivkurs WS07/08 Folie 8

  9. Comparable • Alle Wrapper-Klassen und viele andere Klassen wie String, Date, File… implementieren das Comparable Interface Java-Intensivkurs WS07/08 Folie 9

  10. 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

  11. 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

  12. 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

  13. 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

  14. Namenskonventionen • Konstantennamen: • Bestehen aus Großbuchstaben • Silben werden durch einen Unterstrich getrennt SIZE, MAX_VALUE, EDGE_COLOR Java-Intensivkurs WS07/08 Folie 14

  15. 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

  16. 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

  17. 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

  18. Object • Will man eine sinnvolle String-Darstellung des Objektes haben, dann muss die Methode überschrieben werden: Java-Intensivkurs WS07/08 Folie 18

  19. Object • Überschreibung der toString-Methode in Bankkonto Java-Intensivkurs WS07/08 Folie 19

  20. 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

  21. 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

  22. 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

  23. 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

  24. Math Java-Intensivkurs WS07/08 Folie 24

  25. 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

  26. String Java-Intensivkurs WS07/08 Folie 26

  27. 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

  28. 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

  29. String • replace(char oldChar, char newChar): • Ersetzt alle vorkommen des Zeichens oldChar durch das Zeichen newChar: Java-Intensivkurs WS07/08 Folie 29

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. Fehlerbehandlung • Die Behandlung von Ausnahmen erfolgt mittels der try-catch-Anweisung: Java-Intensivkurs WS07/08 Folie 35

  36. Fehlerbehandlung Java-Intensivkurs WS07/08 Folie 36

  37. 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

  38. 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

  39. Ausnahmetypen • Die geprüften Ausnahmen dagegen repräsentieren unvermeidbare Fehler und Systemfehler • Beispiele FileNotFoundException und IOException Java-Intensivkurs WS07/08 Folie 39

  40. 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

  41. 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

  42. 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

  43. 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

  44. 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

  45. Behandlung von mehreren Ausnahmen Java-Intensivkurs WS07/08 Folie 45

  46. 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

  47. finally Java-Intensivkurs WS07/08 Folie 47

  48. 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

  49. Erstellung einer geprüften Exception Java-Intensivkurs WS07/08 Folie 49

  50. Erstellung einer Laufzeit-Exception Java-Intensivkurs WS07/08 Folie 50

More Related