Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS 2002 1 Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.

Slides:



Advertisements
Ähnliche Präsentationen
C Sharp (C#) Martin Saternus Senior Student Partner
Advertisements

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.
der Universität Oldenburg
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
Erweiterte Zuweisungskompatibilität
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 5 Polymorphismus Sommersemester 2003 Lars Bernard.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 5 Sitzung 5: Polymorphismus.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Einführung in die OOP in Java
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Abstrakte Klassen DVG
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Klassen 02 - Klassen.
Klassen und Schnittstellen Klasse: Definiert Zustandsraum ihrer Instanzen vollständig (Implementierung der Struktur, soweit Voraussetzung für die Methoden-
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Objektorientiertes Programmieren
Klassendefinitionen in Java
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Klassenhierarchien, Vererbung
EPROG Tutorium #6 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Vererbung Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Java-Kurs - 9. Übung Besprechung der Hausaufgabe
Abstrakte Klassen und das Interface-Konzept
Objektorientierte Programmierung (OOP)
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Objektorientierte Programmierung mit JAVA. © Klasse Wie in C++ ist die Klasse das primäre Mittel um ein Entity abzubilden Die Eigenschaften.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 Generische Programmierung in Java.
Tutorium Software-Engineering SS14 Florian Manghofer.
1 Grundsätze objektorientierter Programmierung. Dr. Wolfram Amme, Grundsätze objektorientierter Programmierung, Informatik II, FSU Jena, SS Objektorientierte.
1 Eine Einführung in die objektorientierte Programmierung.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
OOP II.
Definition Felder Konstruktor Methoden Beispiel
Implementieren von Klassen
Polymorphie Überschreiben
 Präsentation transkript:

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden und Zustandsvariablen d aus K1 und K2 werden zu K1d und K2d f aus K1 und K2 werden zu K1f und K2f mehrdeutige Variablen- und Methodendefinitionen müssen in der durch Mehrfachvererbung entstehenden Klasse überdeckt bzw. überschrieben werden Neudefinition von d und f in der Klasse K beim Linearisierungsverfahren wird intern vom Übersetzer durch die Reihenfolge der Basisklassen in der Klassendefinition K extends K1, K2 {} eine eigentlich nicht vorhandene Klassenhierarchie aufgebaut K1 wird nun von K2 abgeleitet, damit werden d und f in K nun von K1 und nicht mehr von K2 geerbt

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Virtuelle Vererbung

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Reale und Virtuelle Vererbung Eine von einer Basisklasse A abgeleitete Klasse B erbt die Attribute und Methoden, die A anbietet Vererbung von Methoden Bei der realen Vererbung wird mit einer Methoden- deklaration aus A auch immer deren Implementierung vererbt Bei der virtuellen Vererbung wird die Methoden- deklaration von A geerbt, die Methode selbst kann in B reimplementiert werden Methoden, die eine virtuelle Vererbung und Reimplementierung (Überschreiben) zulassen, nennen wir virtuelle Methoden

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Überschreiben von Methoden in abgeleiteten Klassen können Methoden dieselbe Signatur (Parameter- und Rückgabetypen) wie in der Basisklasse haben class Rectangle { int x, y, width, height; void draw() {...}; void move(int x, int y){...}; Point left(){...}; void erase(){...} } class ColoredRectangle extends Rectangle{ Color color; void draw() {...}; void setcolor(Color c) {...}; void getcolor(){return color}; }

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Überschreiben von Methoden die Implementierung der Basisklasse wird durch die der abgeleiteten Klasse ersetzt hat eine Methode mehrere Implementierungen, so bezieht sich ein Zugriff immer auf die in der am meisten abgeleiteten Klasse Zuordnung der Implementierung eines Methodenaufrufs zur Laufzeit ColoredRectangle cr = new ColoredRectangle(); Rectangle r = cr; cr.draw();// Zugriff auf die Methode draw aus ColoredRectangle r.draw();// Zugriff auf die Methode draw aus ColoredRectangle Zuordnung der Implementierung eines Methodenaufrufs wird in zwei Schritten durchgeführt: 1. Bestimmung der Signatur eines Aufrufs zur Übersetzungszeit 2. Auswahl der letzten Implementierung zur Laufzeit

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Erster Schritt: Übersetzungszeit aktuelle Parametertypen des Methodenaufrufs werden bestimmt, dann wird die Signatur des Aufrufs festgelegt K k; : k.f(a 1,..., a n ) Signatur eines Methodenaufrufes hängt alleinig von der Klasse ab, von welcher die Variable definiert ist, mit der auf das Objekt zugegriffen wird für den Aufruf k.f(a1,..., an) wird in der Klasse K - ähnlich wie beim Auflösen überladener Methodenaufrufe - nach einer geeigneten Methode gesucht, mit welcher der aktuelle Aufruf durchgeführt werden kann

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Zweiter Schritt: Ausführungszeit zur Programmausführungszeit wird dann überprüft, von welcher Klasse das Objekt, für das der Methodeaufruf durchgeführt werden soll, tatsächlich generiert wurde in dieser zur Laufzeit gefundenen Klassenbeschreibung wird nach der letzten Implementierung des Methodenaufrufs gesucht K k; K1 k1 = new K1(); : k = k1; k.f(a 1,..., a n )

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Erinnerung: Zugriff auf Zustandsvariablen die Zuordnung von Referenzzugriffen auf Zustandsvariablen wird alleinig zur Übersetzungszeit aufgelöst und hängt wieder nur davon ab, von welcher Klasse die Variable definiert ist, mit der auf das Objekt zugegriffen wird K k; : k.x für einen Zugriff k.x wird die Zustandsvariable x immer in der Klassenbeschreibung von K gesucht und das unabhängig davon auf was für ein Objekt mit k tatsächlich zur Laufzeit zugegriffen wird

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Beispiel: Methoden- und Variablenzugriffe class Print1{ int x = 1; void Print(Object a) { System.out.println(x); } class Print2 extends Print1{ int x = 2; void Print(Object a) { System.out.println(x); } void Print(Float a) { System.out.println(x + 1); }

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Techniken zur Realisierung dynamischer Bindung dynamische Bindung durch Methodensuche dynamische Bindung mit Methodentabellen Methodentabelle Methoden-Code Methodentabelle für Rectangle für ColoredRectangle x 10 y 20 mTab Rectangle width 120 height 75 draw erase move left R.draw R.erase R.move R.left CR.draw CR.setcolor CR.color draw erase move left setcolor color ColoredRectangle mTab x 10 y 20 width 120 height 75 color blue

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Beispiel: Überschreiben, Überladen, Überdecken class Point { int x, y, color; void moveTo(int x, int y) {...}; void moveRel(int x, int y){...}; int getX(){return x;} int getY(){return y;} } class RealPoint extends Point{ float x, y, color; void moveTo(float x, float y) {...}; void moveRel(float x, float y){...}; int getX(){return (int) Math.floor(x);} int getY(){return (int) Math.floor(y);} }

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Abstrakte Klassen Eigenschaften abstrakte Klassen sind Schablonen => unvollständig implementiert sie können deshalb nicht instanziert werden ein Klasse muss in Java mit abstract deklariert sein wenn in der Klasse mindestens eine abstrakte Methode deklariert wird, oder wenn eine abstrakte Methode von der Oberklasse geerbt, und nicht überschrieben wird Beispiel für abstrakte Klassen Number –Double –Float –Integer –Long InputStream

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Abstrakte Methoden Abstrakte Methoden werden mit dem Modifizierer abstract deklariert benötigt keine Implementierung eine abstrakte Methode darf nicht mit static oder final deklariert werden muss von der Unterklasse implementiert werden, um Objekte der Unterklasse bilden zu können abstract class Fahrzeug { abstract void starte(); } class Fahrrad extends Fahrzeug{ void starte(){ steige_auf();... }

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Schnittstellen (Interfaces) wie bei abstrakten Klassen stellt eine Schnittstelle eine Schablone zur Verfügung Schnittstellen enthalten nur abstrakte Methodendeklarationen Variablendefinitionen sind automatisch als final und static definiert von einer Schnittstelle kann ebenfalls kein Objekt erzeugt werden eine Klasse K kann mehrere Schnittstellen implementieren K erbt dabei alle Konstanten- und abstrakten Methodendeklarationen der Schnittstelle alle in der Schnittstelle deklarierten Methodendeklarationen müssen in K implementiert (überschrieben) werden Definition einer Schnittstelle: interface Iname1{... } Implementierung : class Name implements Iname1, Iname2,...

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Beispiel: Schnittstelle interface KannSchwimmen{ void schwimmen(); } interface KannLaufen{ void laufen(); } interface KannFliegen{ void fliegen(); } class Ente extends Tier implements KannSchwimmen, Kannlaufen, KannFliegen {... }

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Weitere Beispiele: Schnittstelle public interface GraphObj { int BLACK = 0; int BLUE = 1; int WHITE = 2; void show(); void hide(); void setColor(); } public interface GlobalConstants { int MAX_RECORDS = 1000; String ERR_MSG = “More than “+MAX_RECORDS+” records.”; } public interface Cloneable { }

Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Implementierung einer Schnittstelle class Point implements GraphObj { int x, y, color; public Point(int x, int y, int color){ this.x = x; this.y = y; setColor(color); show(); } protected void drawPoint(int x, int y, int color){... } protected int getBackgroundColor(){... } public void setColor(int color){ this.color = color; } public void show(){ drawPoint(x, y, color); } public void hide(){ drawPoint(x, y, getBackgroundColor()); } }