1 / 13

Programmierkurs Java

Programmierkurs Java. Teil Objektorientierte Programmierung Unterrichtseinheit 31 Polymorphie. Dr. Dietrich Boles. Gliederung. Definition Beispiel Protokolleinschränkung Typumwandlung Klasse Object Beispiel Stack Zusammenfassung. Definition. Polymorphie :

gene
Download Presentation

Programmierkurs Java

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. Programmierkurs Java Teil Objektorientierte Programmierung Unterrichtseinheit 31 Polymorphie Dr. Dietrich Boles

  2. Gliederung • Definition • Beispiel • Protokolleinschränkung • Typumwandlung • Klasse Object • Beispiel Stack • Zusammenfassung

  3. Definition Polymorphie: • Fähigkeit einer Objektvariablen vom Typ T1, auf Objekte von Klassen eines anderen Typs T2 verweisen zu können • in Java: T2 muss Unterklasse von T1 sein • Protokoll ist auf das Protokoll von T1 eingeschränkt • Hintergrund: Protokoll von T1 ist echte Teilmenge von Protokoll von T2 • Relevanz: Compilierzeit

  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 C B

  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. 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 D B C

  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. 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. 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. 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. 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. 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. Zusammenfassung • Polymorphie: Fähigkeit einer Objektvariablen vom Typ T1, auf Objekte von Klassen eines anderen Typs T2 verweisen zu können, wobei in Java T2 Unterklasse von T1 sein muss • Vorteil der Polymorphie: flexible Wiederverwendbarkeit von Klassen

More Related