Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Einführung in die OOP in Java

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in die OOP in Java"—  Präsentation transkript:

1 Einführung in die OOP in Java
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 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 public interface GeometricObjectInterface {//Interface declaration public static final int CIRCLE=0; public static final int RECTANGLE=1; public static final int SQUARE=2; public int getType(); public abstract float getCircumference(); //Berechnet den Umfang eines geometrischen Objektes } 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: public class Circle implements GeometricObjectInterface{ public float radius; public Circle(float radius){this.radius=radius;} public int getType(){ return GeometricObjectInterface.CIRCLE;} public float getCircumference(){ return (float)(2*Math.PI*radius);}} Java-Intensivkurs WS07/08 Folie 4

5 Interfaces public class Square implements GeometricObjectInterface{
public float side; public Square(float side){this.side=side;} public float getCircumference(){ return 4*side;} public int getType(){ return GeometricObjectInterface.SQUARE; } 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 public interface Comparable<T>{ public int compareTo(T o); } Java-Intensivkurs WS07/08 Folie 7

8 Comparable public class ComparablePoint extends Point implements Comparable{ public float x1; public float y1; @Override public int compareTo(ComprablePoint p) { if(x1<p.x1 || this.y1<p.y1) return -1; if(x1==p.x1 || this.y1==p.y1) return 0; return 1; } 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: class A { } //ist äquivalent zu class A extends Object { 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: //Standardimplementierung von toString() in der Klasse Object public String toString(){ return } Java-Intensivkurs WS07/08 Folie 17

18 Object Will man eine sinnvolle String-Darstellung des Objektes haben, dann muss die Methode überschrieben werden: Bankkonto alexKonto=new Bankkonto(35870,"Alex M.",2103); System.out.println(alexKonto); Ausgabe: Java-Intensivkurs WS07/08 Folie 18

19 Object Überschreibung der toString-Methode in Bankkonto
//Überschreibung von toString() in Bankkonto public String toString(){ return "Kontoinformation:\r\n"+ "Kontonummer: "+kontoNummer+"\r\n"+ "Kontoinhaber(in): "+inhaber+"\r\n"+ "Kontostand: "+kontoStand+" €\r\n"; } Bankkonto alexKonto=new Bankkonto(35870,"Alex M.",2103); System.out.println(alexKonto); Ausgabe: Kontoinformation: Kontonummer: 2150 Kontoinhaber(in): Alex M. Kontostand: 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 //Standardimplementierung von equals(Object o) in der Klasse Object public boolean equals(Object o){ return this==o;} 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 //Kompilierfehler: The constructor Math() is not visible Math math=new Math(); Java-Intensivkurs WS07/08 Folie 23

24 Math Methode Rückgabe abs(int i) Absolutbetrag von i ceil(double d)
Nächste Ganzzahl größer gleich i exp(double a) ea floor(double d) Nächste Ganzzahl kleiner gleich i log(double a) ln(a) max(int i1, i2) Maximum der Zahlen i1 und i2 min(int i1, i2) Minimum der Zahlen i1 und i2 pow(double a, double b) ab random() Eine Zahl aus dem Intervall[0.0,1.0] sin(double d) Sinus-Funktion cos(double d) Kosinus-Funktion tan(double d) Tangens-Funktion round(double d) Rundet d zur nächsten Ganzzahl 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 public static void stringCompare(){
String s1=new String("use the equals()-method to compare strings"); String s2=new String("use the equals()-method to compare strings"); String s3="use the equals()-method to compare strings";//String-Literal String s4="use the equals()-method to compare strings";//String-Literal boolean s1_s2= false , s3_s4=false s2_s3=false; if(s1==s2) s1_s2=true; if(s3==s4) s3_s4=true; if(s2==s3) s2_s3=true; System.out.println(s1_s2+" "+s3_s4+" "+s2_s3); s2=s3; System.out.println(s2_s3); Ausgabe: false true false true Java-Intensivkurs WS07/08 Folie 26

27 String int length(): charAt(int index): substring(int begin, int end):
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(): equalsIgnoreCase(): toLowerCase() toUpperCase():
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 (catching exception) und behandelt (handling exception) 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: //try to convert a string to a number convertStringToNubmer(String numberString){ try{ float number = Float.parseFloat(numberString); System.out.println("Converting "+numberString " to a number succeeded: "+number); }//Catching the exception catch (NumberFormatException exceptionObject){ //handling the exception System.out.println("Exception: Unable to convert " numberString+" to a number!"); System.out.println(exceptionObject.getMessage()); System.out.println("Printing the stack trace..."); exceptionObject.printStackTrace(); }} Java-Intensivkurs WS07/08 Folie 35

36 Fehlerbehandlung convertStringToNubmer("549.34");
Ausgabe: Converting to a number succeeded: convertStringToNubmer("549,34"); Ausgabe: Exception: Unable to convert 549,34 to a number! For input string: "549,34" Printing the stack trace... java.lang.NumberFormatException: For input string: "549,34" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Float.parseFloat(Unknown Source) at exceptions.SimpleException.convertStringToNubmer(SimpleException.java:25) at exceptions.SimpleException.main(SimpleException.java:39) 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 int x=1/3; int y=2/x;//Division durch null --> // Laufzeitausnahme: ArithmeticException:/by zero Java-Intensivkurs WS07/08 Folie 38

39 Ausnahmetypen Die geprüften Ausnahmen dagegen repräsentieren unvermeidbare Fehler und Systemfehler Beispiele FileNotFoundException und IOException public void printFile(String fileName){ //try to read and print the given file BufferedReader input = null; try { input = new BufferedReader( new FileReader(fileName) ); String line = null; while (( line = input.readLine()) != null){ System.out.println(line); } } catch (IOException ex){ ex.printStackTrace();} 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 try{ int x=1/3; int y=2/x }catch(ArithmeticException exceptionObject){//Catching the exception //handling the exception System.out.println("x ist 0. Division wurde nicht ausgeführt!"); } 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 public long factorial(int n) throws NegativeValueException { //if n<0 then throw an exception if(n<0) throw new NegativeValueException ("invalid parameter: "+n); //else return factorial(n) } 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 public long calculator(int n) { // the calculator method calls the factorial method try{ return factorial(n); } catch (Exception exceptionObject){ System.out.println("The input parameter of factorial " "must be a positive number!"); } 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: public long calculator(int n) throws Exception { int x= n/2; return factorial(x); } Java-Intensivkurs WS07/08 Folie 44

45 Behandlung von mehreren Ausnahmen
public void printFile(String fileName){ //try to read and print the given file BufferedReader input = null; try { input = new BufferedReader( new FileReader(fileName) ); String line = null; while (( line = input.readLine()) != null){ System.out.println(line); } catch (FileNotFoundException ex) { ex.printStackTrace(); catch (IOException ex){ 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 public void finalyMethod(){ try{ Random rand=new Random();
int x=rand.nextInt(6); System.out.println("x="+x); int y=2/x;//Division durch null -->ArithmeticException:/by 0 } catch (ArithmeticException arithmeticExceptionObject){ System.out.println("ArithmeticException..."); finally{ System.out.println("Finally-Block"); 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
/** * Checked exception used in the method factorial of the class * SimpleException * */ public class NegativeValueException extends Exception{ public NegativeValueException(){ } public NegativeValueException(String message){ super(message); Java-Intensivkurs WS07/08 Folie 49

50 Erstellung einer Laufzeit-Exception
/** * Runtime exception used in the method auszahlen() of the class * exceptions.Bankkonto */ public class KreditLimitUeberschrittenException extends RuntimeException{ public KreditLimitUeberschrittenException(){ } public KreditLimitUeberschrittenException(String message){ super(message); Java-Intensivkurs WS07/08 Folie 50


Herunterladen ppt "Einführung in die OOP in Java"

Ähnliche Präsentationen


Google-Anzeigen