Objektorientierung (OO)

Ähnliche Dokumente
Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

6. Globalübung (zu Übungsblatt 8)

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Java Vererbung. Inhalt

Musterlösung Stand: 5. Februar 2009

JAVA - Methoden - Rekursion

Javakurs für Anfänger

Java I Vorlesung Vererbung und Sichtbarkeit

Einstieg in die Informatik mit Java

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Algorithmen und Programmierung II

JAVA für Nichtinformatiker - Probeklausur -

Java Schulung (Java 2 Java Development Kit 5 / 6)

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

JAVA - Methoden

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

Java: Vererbung. Teil 3: super()

Vererbung. Martin Wirsing. Ziele. Vererbung

Klassen mit Instanzmethoden

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

1 Polymorphie (Vielgestaltigkeit)

Java I Vorlesung 6 Referenz-Datentypen

Java Einführung Methoden in Klassen

Kapitel 6. Vererbung

Java Kurs für Anfänger Einheit 5 Methoden

Java Einführung Methoden. Kapitel 6

Theorie zu Übung 8 Implementierung in Java

Info B VL 8: Abstrakte Klassen & Interfaces

5.4 Klassen und Objekte

5.6 Vererbung. Vererbung

Kapitel 6. Vererbung

5. Tutorium zu Programmieren

Einstieg in die Informatik mit Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

1 Abstrakte Klassen, finale Klassen und Interfaces

Arten von Klassen-Beziehungen

Kapitel 6. Vererbung

3 Objektorientierte Konzepte in Java

11.3 Virtuelle Methoden

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

5.5.8 Öffentliche und private Eigenschaften

Typumwandlungen bei Referenztypen

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

Einführung in die Programmierung 1

Javakurs für Anfänger

Programmieren in Java

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

Programmieren 2 Java Überblick

Einstieg in die Informatik mit Java

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Statische und Nichtstatische Methoden Properties/ Eigenschaften

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Java, OO und UML Fortsetzung

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

Algorithmen und Datenstrukturen

Interfaces und Vererbung

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Kapitel 4: Klassen und Unterklassen

Algorithmen und Datenstrukturen 07

Einstieg in die Informatik mit Java

Prof. W. Henrich Seite 1

1 Aufgaben 1.1 Umgebungsvariable setzen: CLASSPATH

Th. Letschert OOP 2 1. Vererbung I : Subklasse und Subtyp

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Java für Computerlinguisten

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Objektorientierte Programmierung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

1. Abstrakte Klassen

Programmiertechnik Klassenmethoden

Software Engineering Klassendiagramme Einführung

Javakurs für Anfänger

Java Einführung Klassendefinitionen

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Datenbankanwendungsprogrammierung Crashkurs Java

Erreichbarkeit von Klassenelementen. Daten verstecken und kapseln

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Prinzipien Objektorientierter Programmierung

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Klassen und Objekte. Klassen sind Vorlagen für Objekte. Objekte haben. Attribute. Konstruktoren. Methoden. Merkblatt

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Teil 2: OOP und JAVA (Vorlesung 11)

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Transkript:

Objektorientierung (OO) Objekte haben Zustände (oder Eigenschaften, Attribute) und Verhalten Zustände: Objektvariablen (in Java auch fields) Verhalten (oder Aktionen): Methoden (methods, Funktionen) members ist der Sammelbegriff für fields und methods 58

Klassen die Klasse eines Objekts beschriebt die Struktur eines Objektes, das Objekt ist eine Instanz der Klasse Klassen sind für Objekte das, was Typen für Variablen sind 59

fields Bsp. einer Klassendefinition mit Feldern: public class Circle { /** center coordinates */ double x, y; /** radius */ double r = 1.0; // initialisiert r mit 1 wird für Felder kein Initialisierung angegeben, so werden sie automatisch mit 0 (bzw. false oder null) initialisiert (anders als lokalen Variablen, die nicht automatisch initialisiert werden) eine Instanz von Circle kann man jetzt mit new Circle() erzeugen Circle c1 = new Circle(); // Zugriff auf members mit.: c1.x = 5.0; System.out.println("radius ist "+c1.r) 60

methods public class Circle { double x, y, r = 1.0; void doubleradius() { r = r * 2.0; public class CircleTest1 { public static void main(string[] argv) { Circle c1 = new Circle(); Circle c2 = new Circle(); c2.doubleradius(); // Methodenaufruf System.out.println("Radius von c1: "+c1.r); System.out.println("Radius von c2: "+c2.r); Ausgabe: Radius von c1: 1.0 Radius von c2: 2.0 61

Methoden können was zurückgeben public class Circle { double x, y, r = 1.0; // double: Typ des Rueckgabewertes double getareasize() { return 3.1416 * r * r; // Test direkt in Circle-Klasse: public static void main(string[] argv) { Circle circle = new Circle(); circle.r = 5.0; double area = circle.getareasize(); System.out.println(area); 62

Return Anweisung, die an beliebiger Stelle aus der Methode springt (auch main) return value; mit value Rückgabewert (ein Ausdruck) bei Rückgabetyp void (kein Wert): return; wenn Methode nicht void, so darf es keinen Weg aus der Methode geben, der keinen Rückgabewert definiert int wrong() { if (flag) // flag boolsche variable return 1; // Compilerfehler: kein return fuer!flag 63

Return: Mehr Beispiele int alsowrong() { if (flag) return 1; if (!flag) // Fehler: return 0; // Compiler nicht schlau genug int ok() { if (flag) return 1; else return 0; boolean someflag; int alsook() { for (;;) { if (someflag) return 42; 64

Methoden mit Parametern public class Circle { double x, y, r = 1.0; // Kommagetrennte Parameterliste in den // runden Klammern nach Methodenname: void translate(double dx, double dy) { x = x + dx; y = y + dy; 65

Polymorphie gleichnamige Methoden mit unterschiedlichen Parameterlisten (Typen der Parameter, nicht Namen) sind erlaubt public class Circle { double x, y, r = 1.0; void translate(double delta) { x += delta; y += delta; void translate(double dx, double dy) { x += dx; y += dy; 66

Mit Parametern und Rückgabe public class Faktorial { int compute(int n) { int f = 1; for (int i=0; i<=n; ++i) f = f * i; return f; public static void main(string[] argv) { if (argv.length!= 0) { System.err.println("usage: " +"java Factorial <n>"); return; int n = Integer.parseInt(argv[0]); Factoiral factoral = new Factorial(); System.out.println(n + "! =" + factoral.compute(n)); 67

Its Call by Value public class ByValueDemo { void inc(int i) { // keine Ver"anderung bei aufrufenden Wert: i = i + 1; public static void main(string[] argv) { ByValueDemo byvaluedemo = new ByValueDemo(); int n = 0; ByValueDemo().inc(n); System.out.println(n); // prints "0" beim Aufruf ByValueDemo().inc(n); wird der Wert von n in die Parametervariable i von inc(int) kopiert, die Veränderung von i wirkt sich nur lokal aus 68

Referenzen I Objektvariablen in Java sind Referenzen (anders als die Variablen primitiver Typen) double x = 5; double y = x; y = y + 1; System.out.println(x); Circle c1 = new Circle(); Circle c2 = c1; Circle c3 = c2; c3.r = 42.0; c2 = new Circle(); System.out.println("c1.r="+c1.r+" c2.r="+c2.r +" c3.r="+c3.r); // => c1.r=42.0 c2.r=1.0 c3.r=42.0 Achtung: wenn zwei Objektvariablen das gleiche Objekt referenzieren, so kann das gleich Objekt durch beide Variablen modifiziert werden 69

Referenzen II entsprechend in einer Methode kann der Inhalt eines Parameter-Objektes modifiziert werden void setcircle(circle c) { c = new Circle(); void setr(circle c) { c.r = 23.0; void test() { Circle c = new Circle(); c.r = 5.0; setcircle(c); // keine Modifikation von c System.out.println("c.r="+c.r); // c.r=5.0 setr(c); // radius von c wird veraendert System.out.println("c.r="+c.r); // c.r=23.0 70

Referenzen III null ist eine spezielle Referenz für Objektvariablen, die kein Objekt enthalten ein Versuch bei null auf Member zuzugreifen, führt zu einem Laufzeitfehler (NullPointerException) Circle c = null; c.r = 5.0; // Laufzeitfehler die Operatoren == und!= vergleichen Referenzen auf Gleichheit, nicht den Inhalt der referenzierten Objekte 71

Rekursion Methoden können sich selbst rekursiv aufrufen // wieder mal Fakultaet int factorial(int n) { if (n < 2) return 1; return n * factorial(n-1); Zur Erinnerung: n! = 1 2... n, also 1! = 1 und (n + 1)! = n!(n + 1) 72

Namenskonventionen für Methoden Verben als Methodennamen Methoden, die den Wert einer Objektvariable xyz setzen, sollten setxyz heißen Methoden, die den Wert einer Objektvariable xyz zurückliefern, sollten getxyz heißen; für booleans xyz ist auch isxyz erlaubt sonst wie bei Objektvariablen 73

Geh mir aus der Sonne... Verschattung (shadowing): Bezeichner von Lokalen Variablen und Parametern verschatten gleichnamige Objektvariablen. public class Circle { double x, y, r = 1.0; void setrtoone(double r) { r = 1.0; // setzt nur den Parameter r 74

Nimm dies! Lösung: Referenz auf aktuelles Objekt mit this public class Circle { double x, y, r = 1.0; void setcenter(double x, double y) { this.x = x; this.y = y; 75

Konstruktoren I Initialisierung von Objekten, wenn diese mit new erzeugt werden public class Circle { double x, y, r; // Konstruktor: Name wie Klasse Circle() { r = 1.0; public static void main(string[] argv) { // fuehrt Konstruktor aus: Circle c = new Circle(); //... 76

Konstruktoren II Konstruktoren können wie Methoden Parameter haben; mehrere Konstruktoren (unterschiedlicher Parameterliste) sind erlaubt public class Circle { double x, y, r; // fuer: new Circle() Circle() { r = 1.0; // z.b. fuer: new Circle(1.0) Circle(double r) { this.r = r; // z.b. fuer: new Circle(0.0, 0.0) Circle(double centerx, double centery) { x = centerx; y = centery; r = 1.0; 77

Konstruktoren III in einem Konstruktor kann mit this(parameter) ein anderer Konstruktor aufgerufen werden, dies muß dann jedoch die erste Anweisung im Konstruktor sein public class Circle { double x, y, r; Circle() { this(1.0); Circle(double r) { this.r = r; Circle(double centerx, double centery) { this(1.0); x = centerx; y = centery; 78

Konstruktoren IV Ist kein Konstruktor angegeben, so wird automatisch der default constructor angelegt (leere Parameterliste, macht nichts) public class Circle { double x, y, r; // hier nichts, entspricht // Circle() { // 79

Vererbung I Vererbung dient der Wiedervererbung von Code eine Unterklasse (Kindklasse) erbt von der Oberklasse (Elternklasse) alle Objektvariablen und Methoden, kann aber zusätzliche Member definieren die Unterklasse ist eine Spezialierung oder Erweiterung der Oberklasse in Java gibt es keine Mehrfachvererbung, d.h. jede Klasse kann nur eine Oberklasse haben (die allerdings wiederum eine Oberklasse haben kann - Vererbung über mehrere Generationen ist kein Problem) 80

Vererbung II erbt Bike erbt erbt Racing Bike Mountain Bike Tandem Bike Vererbung kann man auch als eine ist-ein Beziehung sehen, z.b. ist die (Unterklasse) Mountain Bike ein Bike 81

Vererbung IV /** achsenparalleles Rechteck */ public class Rectangle { /** untere linke Ecke */ int x, y; /** Groesse */ int width, height; //... // Textbox ist ein Rectangle mit "Extras" public class Textbox extends Rectangle { /** textuelles label */ String text; 82

Vererbung IV wenn keine Oberklasse mit extends explizit angegeben wird, so ist automatisch die Java- Klasse Object die Oberklasse jedes Objekt im Java erbt (ggf. über mehrere Generationen) von Object (inklusive Arrays) 83

Zuweisung, Casting eine Unterklasse kann man einer Variablen von Typ der Oberklasse zuweisen Rectangle r = new Textbox(); um an die spezifischen Member der Unterklasse wieder ranzukommen, muß man das Objekt auf den gewünschten Typ casten; der Cast überprüft zur Laufzeit, ob in der Variablen tatsächlich ein Objekt von kompatibler Klasse steckt: Rectangle r = new Textbox(); // Compilerfehler, da Rectangle ohne text: // String s = r.text; // OK, Typcheck zur Laufzeit: String s = ((Textbox) r).text; // auch OK, Typcheck zur Laufzeit: Textbox tb = (Textbox) r; 84

instanceof mit dem instanceof-operator kann man zur Laufzeit überprüfen, ob ein Objekt von einer bestimmten Klasse ist if (r instanceof Textbox) { Textbox tb = (Textbox) r; System.out.println("text ist "+tb.text) instanceof auf null angewandt ergibt false für jede Klasse 85