C++ Vererbung und Polymorphie

Slides:



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

Objektorientierte Programmierung
der Universität Oldenburg
der Universität Oldenburg
1 Funktionstemplates Einbinden von Templates: –Eine *.o Datei, die durch Übersetzen einer Datei nur mit Templates erzeugt wurde, enthält keinen Programmcode.
Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
Objektorientierte Programmierung
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Konzepte objektorientierter Systeme
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Kritische Betrachtung
Programmierkurs C/C++
der Universität Oldenburg
Java: Objektorientierte Programmierung
Java: Grundlagen der Sprache
Java: Grundlagen der Objektorientierung
Vererbung.
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Erweiterte Zuweisungskompatibilität
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Vererbung. Das Prinzip der Vererbung im täglichen Leben:
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
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.
Programmieren mit JAVA
Programmieren mit JAVA
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Abstrakter Datentyp in C++ I - Klasse -
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Einführung in Java1 Einführung in JAVA.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Klassen 02 - Klassen.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Applets Java für’s Web.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Ham EST Das Schwein Schmatz.. Fressen Beginnen wir.... mit einer Geschichte:
Entwurfs- und Implementationsdiagramme
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 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Klassenhierarchien, Vererbung
Objektorientierung.
Programmiervorkurs WS 2014/15 Methoden
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.
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003 Institut für Kartographie und Geoinformation Prof.-Dr. Lutz Plümer, Dr. Gerhard Gröger,
Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
© Tenbusch Oberstufenzentrum Informations- und Medizintechnik Objektorientierte Programmierung mit Java.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Einführung in die Programmierung mit Java
Definition Felder Konstruktor Methoden Beispiel
Implementieren von Klassen
Vererbung in Java Von Jan und Eddi.
Grundkurs Informatik 11-13
Polymorphie Überschreiben
 Präsentation transkript:

C++ Vererbung und Polymorphie Vortrag von Anke Schulz 27.7.2000

Vererbung Die Vererbung ermöglicht es neue Klassen auf der Basis von schon bestehenden Klassen zu definieren. Wie sinnvoll und praktisch das ist haben wir schon bei Java gesehen. Im Unterschied zu Java ist es bei C++ möglich eine neue klasse von mehreren Basisklassen abzuleiten, die dann die Eigenschaften aller dieser Basisklasssen besitzt. Und natürlich all die Eigenschaften, die man neu dazu definiert.

Syntax class klassenname : [virtual][public, protectet, private] Basisklassenname1, [virtual][public, protectet, private] Basisklassenname2 { Liste der klassenelemente }; Die Zugriffsspezifizierer public, protectet und private regeln bei der Vererbung nicht den Zugriff aus den Methoden der abgeleiteten Klassen auf die geerbten Elemente, dies wird ja schon in der Deklaration in der Basisklasse geregelt und gilt hier also immernoch, sondern welche Zugriffsrechte die abgeleitete Klasse für die geerbten Elemente nach außen weiter gibt. Z. B. wenn über ein Objekt der abgeleiteten Klasse auf diese Elemente zugegriffen wird. Virtual ist nur bei Mehrfachvererbung interessant.

Zugriffsbeschränkung Ausschlaggebend sind also die Zugriffsrechte, die in der Basisklasse vorgesehen waren, diese können dann in der abgeleiteten Klasse durch die Zugriffsspezifizierer dort nur verschärft werden. Zugriffsspez. der Vererbung Basisklasse abgeleitete Klasse public public public protectet protectet private private protectet public protectet protectet protectet private private private private private private private

Beispiel class Basis { int w_priv; //private public: int w_pub; }; class Abgeleitet :private Basis { public: void fkt() { w_priv = 2; // kein Zugriff, private w_pub = 2; // ok } }; int main() { class Abgeleitet obj; cout<<obj.w_pub<<endl; //kein Zugriff, private- Vererbung return 0; }

Zugriffsrecht lockern Zugriffsbeschränkungen durch die Vererbung können in der abgeleiteten Klasse explizit wieder gelockert werden. Eine geerbte Eigenschaft kann aber keine weitreichendere Zugänglichkeit zugewiesen werden, als sie in der Basisklasse besitzt. Beispiel class Basis { int w_priv; //private public: int w_pub1; int w_pub2; int w_pub3; };

Fortsetzung des Beispiels class Abgeleitet :private Basis { public: Basis::w_pub1; //ist wieder public using Basis::w_pub2; //ist wieder public }; int main() { class Abgeleitet obj; cout<<obj.w_pub1<<endl; //ok cout<<obj.w_pub2<<endl; //ok cout<<obj.w_pub3<<endl; //kein Zugriff cout<<obj.w_priv<<endl; //kein Zugriff return 0; }

Vererbung - Einbettung Um in einer Klasse die Eigenschaften einer anderen nutzen zu können gibt es neben der Vererbung und der friend- Deklaration(siehe Vortrag von Marc) die Möglichkeit der Einbettung. Die Entscheidung ob Vererbung oder Einbettung sinnvoller ist hängt von der Beziehung ab, in der die Objekte zueinander stehen. Kann man ein Objekt der Klasse Y auch als Objekt der Klasse X betrachten, dann handelt es sich um Vererbung. Oder gehört zu einem Objekt der Klasse X auch ein Objekt der Klasse Y, dann ist Einbettung sinnvoll.

Vererbung - Einbettung Vererbung hat den Vorteil des Polymorphismus, der Zugriffsregelung und die Möglichkeit Instanzen der abgeleiteten Klasse wie Objekte der Basisklasse zu verwenden. Die Verwendung von Elementobjekten ist dagegen einfacher und überschaubarer.

Konstruktor Konstruktoren und Destruktoren werden nicht vererbt. Darum müssen bei der Objektbildung einer abgeleiteten Klasse die ererbten Datenelemente vom Konstruktor der jeweiligen Basisklasse erstellt werden. Die von einer Basisklasse geerbten Elemente bilden in der abgeleiteten Klasse eine Art Unterobjekt mit eigenem Konstruktoren, Destruktoren, Zugriffsrechten usw. Standardkonstruktor Ist in der Basisklasse der Standardkonstruktor vorhanden, so braucht sich die abgeleitete Klasse nicht um die Initialisierung der geerbten Elemente zu kümmern. Der Compiler ruft automatisch den Konstruktor der abgeleiteten Klasse auf, wenn er ein Objekt der abgeleiteten Klasse erstellt.

Konstruktor Spezieller Konstruktor

Mehrfachvererbung Wird eine Klasse von mehreren Klassen abgeleitet, werden deren Konstruktoren in der Reihenfolge, in der sie aufgelistet sind abgearbeitet. Zuletzt wird der Anweisungsteil des Konstruktors der abgeleiteten Klasse ausgeführt. class B1 {...}; class B2 {...}; class A : public B1, public B2 {...};

Indirekte Basisklassen Wird eine Klasse von einer Klasse abgeleitet, die selbst wieder von einer anderen klasse abgeleitet ist, wird zur Einrichtung des Objektes der Klasse A zuerst der Konstruktor von B2 aufgerufen, da A von B2 abgeleitet ist. Da B2 aber von B1 abgeleitet ist muß dazu erst der Konstruktor von B1 aufgerufen werden, damit der Konstruktor von B2abgearbeitet werden kann. Zuletzt wird der Anweisungsteil des Konstruktors von A abgearbeitet class B1 {...}; class B2: public B1 {...}; class A : public B2 {...};

Nicht vererbbare Methoden Wird eine Klasse aus einer anderen abgeleitet, so erbt diese neue Klasse, Datenelemente und Methoden. Es gibt aber Methoden, die nicht mit vererbt werden können. Konstruktor Destruktor Zuweisungsoperator Friend- Deklarationen, sie stellen auch keine wirklichen Elemente dar. Diese Methoden müssen in der neuen Klasse neu deklariert werden.

Polymorphie Polymorphie heißt so viel wie „Vielgestaltigkeit“. Der Begriff Polymorphie ist eng mit der Vererbung verbunden. Er bezeichnet die Tatsache, das eine Methode in verschiedenen abgeleiteten Klassen einer Hierarchie unterschiedlich implementiert werden kann. So ist es möglich, daß verschiedene Klassen gleichlautende Methoden enthalten, die aber nicht den gleichen Inhalt haben. Verschiedene Objekte werden gleich behandelt, reagieren aber unterschiedlich. Sie können gleich behandelt werden, weil sie zum Teil gleiche Schnittstellen besitzen (gleichlautende Datenelemente und Methoden). Beispiel: Paint Programm

Benutzung Methoden, die in mehreren Klassen benötigt werden, werden in einer Basisklasse deklariert. In den abgeleiteten Klassen werden sie dann überschrieben, um eine klassenspezifische Ausführung zu erreichen. Methoden, die überschrieben werden sollen werden in der Basisklasse mit dem Schlüsselwort virtual deklariert, um sicher zu stellen, daß beim Aufruf auch wirklich die pberschriebenen Methoden aufgerufen werden und nicht die der Basisklasse. Es ist üblich auch die überschriebenen Methoden in den abgeleiteten Klassen mit virtual zu kennzeichnen.

Beispiel Class ZeichenObjekt{ protected: struct Punkt referenzpunkt; virtual int zeichne(struct Punkt p){ //zeichne Referenzpunkt an Koordinate p...} }; class Rechteck: public ZeichenObjekt{ protected: struct Punkt ecken[4]; virtual int zeichne (struct Punkt p){ //zeichne Rechteck mit linker unterer Ecke in p...} }; class Rechteck: public ZeichenObjekt{ protected: float radius; virtual int zeichne (struct Punkt p){ //zeichne Kreis mit Mittelpunkt in p...} };