Objektorientierte Programmierung

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Imperative Programmierung
der Universität Oldenburg
Imperative Programmierung
der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
der Universität Oldenburg
der Universität Oldenburg
Imperative Programmierung -Entwicklungswerkzeuge
Objektorientierte Programmierung
Imperative Programmierung
Objektorientierte Programmierung Definition von Klassen
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
IF-ELSE-IF-Ketten Weiter mit PP..
Erweiterte Zuweisungskompatibilität
WHILE - Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Imperative Programmierung Funktionen und Parameter
Objektorientierte Programmierung JDK-Klassenbibliothek
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Klassendefinition und Objekte
Bestimmung des ggT zweier Zahlen
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
2.4 Rekursion Klassifikation und Beispiele
Objektorientiertes Konstruieren
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
Programmierung von Agenten in Java: Implementierung einer Supply-Chain
Programmiervorkurs WS 2014/15 Methoden
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Robuste Programme durch Ausnahmebehandlung
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vererbung Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
© 2004 Pohlig Informatik Kurse © 2004 Pohlig Informatik Kurse Der Tramp tanzt die Rekursion zünderUntersuchen(…) Basisfall Rückmeldung:
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
 Präsentation transkript:

Objektorientierte Programmierung Programmierkurs Java Teil Objektorientierte Programmierung Unterrichtseinheit 31 Polymorphie Dr. Dietrich Boles

Gliederung Definition Beispiel Protokolleinschränkung Typumwandlung Klasse Object Beispiel Stack Zusammenfassung

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

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

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

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

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!

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

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--]; }

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); } }

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);

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();

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