Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Objektorientierte Programmierung Unterrichtseinheit.

Ähnliche Präsentationen


Präsentation zum Thema: "Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Objektorientierte Programmierung Unterrichtseinheit."—  Präsentation transkript:

1 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Objektorientierte Programmierung Unterrichtseinheit 31 Polymorphie

2 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 2 Gliederung Definition Beispiel Protokolleinschränkung Typumwandlung Klasse Object Beispiel Stack Zusammenfassung

3 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 3 Definition Polymorphie: Fähigkeit einer Objektvariablen vom Typ T 1, auf Objekte von Klassen eines anderen Typs T 2 verweisen zu können in Java: T 2 muss Unterklasse von T 1 sein Protokoll ist auf das Protokoll von T 1 eingeschränkt Hintergrund: Protokoll von T 1 ist echte Teilmenge von Protokoll von T 2 Relevanz: Compilierzeit

4 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 4 Beispiel Sei B eine direkte oder indirekte Unterklasse von A. A object1 = new B(); // Polymorphie static void f(A object) {... } B b = new B(); f(b); // Polymorphie B object2 = new A(); // Fehler A object3 = new C(); // Fehler A B C

5 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 5 Protokolleinschränkung class Person { String name; Person(String name) { this.name = name; } void print() { IO.println(name); } } class Mitarbeiter extends Person { String buero; Mitarbeiter(String name, String buero) { super(name); this.buero = buero; } void changeBuero(String neuB) { buero = neuB; } } class PersonenTest { public static void main(String[] args) { Mitarbeiter kai = new Mitarbeiter("Kai Meyer", "E 67"); Person karl = new Mitarbeiter("Karl Schmidt", "E 50"); kai.changeBuero("E 69"); // ok! karl.changeBuero("E 68"); // Fehler (Protokolleinschr.) }

6 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 6 Typumwandlung Typumwandlung (Typ-Cast) von Oberklasse auf Unterklasse explizit möglich (allerdings u.U. unsicher!) class A {... } class B extends A {... } class C extends A {... } class D {... } A a = new B(); B b1 = a; // Syntaxfehler! B b2 = (B)a; C c = (C)a; // ok, allerdings beim Zugriff // Laufzeitfehler D d = (D)a; // Syntaxfehler A CB D

7 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 7 Klasse Object (1) Jede Klasse in Java ist von der Klasse Object abgeleitet: public class Object { public Object clone(); // Werte-Kopie public boolean equals(Object obj); // Wertgleichheit? public String toString(); // konvertiert in String... } Fehlt bei der Klassendefinition das extends, ist automatisch die Klasse Object direkte Oberklasse die angeführten Methoden sollten von jeder neu definierten (ADT-)Klasse reimplementiert (überschrieben) werden!

8 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 8 Klasse Object (2) // ADT-Klasse: public class Int extends Object { private int value; public Int(int v) { this.value = v; } public Int(Int obj) { this.value = obj.value; } public Object clone() { return new Int(this); // auch hier Polymorphie } public boolean equals(Object obj) { return this.value == ((Int)obj).value; } public String toString() { return String.valueOf(this.value); }... Int intObject = new Int(4711); IO.println("Wert = " + intObject); // automatischer Aufruf von toString!!!

9 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 9 Beispiel Stack (1) Vorteil der Polymorphie: Wiederverwendbarkeit class Stack { Object[] store; // zum Speichern von Daten int current; // aktueller Index Stack(int size) { store = new Object[size]; current = -1; } boolean isFull() { return current == (store.length-1); } boolean isEmpty() { return this.current == -1; } void push(Object value) { this.store[++this.current] = value; } Object pop() { return this.store[this.current--]; } }

10 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 10 Beispiel Stack (2) class Rueckwaerts { public static void main(String[] args) { Stack haufen = new Stack(10); while (!haufen.isFull()) { String eingabe = IO.readString("Eingabe:"); haufen.push(eingabe); } while (!haufen.isEmpty()) { Object obj = haufen.pop(); String str = (String)obj; System.out.println(str); }

11 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 11 Beispiel Stack (3) class RueckwaertsInt { public static void main(String[] args) { Stack haufen = new Stack(10); while (!haufen.isFull()) { int zahl = IO.readInt("Eingabe:"); haufen.push(zahl); } while (!haufen.isEmpty()) { int zahl = (Integer)haufen.pop(); System.out.println(zahl); }

12 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 12 Beispiel Stack (4) class Akte { int nummer; Akte(int n) { this.nummer = n; } void print() { IO.println(this.nummer); } } class Verwaltung { public static void main(String[] args) { Stack haufen = new Stack(8); while (!haufen.isFull()){ haufen.push(new Akte(IO.readInt("Zahl: "))); } while (!haufen.isEmpty()) { Akte akte = (Akte)haufen.pop(); akte.print(); }

13 Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 13 Zusammenfassung Polymorphie: Fähigkeit einer Objektvariablen vom Typ T 1, auf Objekte von Klassen eines anderen Typs T 2 verweisen zu können, wobei in Java T 2 Unterklasse von T 1 sein muss Vorteil der Polymorphie: flexible Wiederverwendbarkeit von Klassen


Herunterladen ppt "Programmierkurs JavaUE 31PolymorphieDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Objektorientierte Programmierung Unterrichtseinheit."

Ähnliche Präsentationen


Google-Anzeigen