Vererbung. Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden.

Slides:



Advertisements
Ähnliche Präsentationen
1 Funktionstemplates Einbinden von Templates: –Eine *.o Datei, die durch Übersetzen einer Datei nur mit Templates erzeugt wurde, enthält keinen Programmcode.
Advertisements

Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
Objektorientierte Programmierung
Unter- und Oberklassen: Beispiel
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Programmieren mit JAVA
Programmieren mit JAVA
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 Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
C++ Vererbung und Polymorphie
DVG Klassen und Objekte
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
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 Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
1. Verhalten der Objekte: Operationen Werden in den Klassen definiert Werden (i.d.R.) auf einem Objekt aufgerufen Wird das Empfängerobjekt genannt Weitere.
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
Informatik 1 Letzte Übung.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Dynamische Datentypen
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
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
A Workshop About this chapter General description Units Time Schedule
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Abstrakte Klassen und das Interface-Konzept
Objektorientierte Programmierung (OOP)
Pointer. Precompiled Header  Vorübersetzung eingebundener Dateien häufig genutzt, selten geändert  Projekttyp „Win32 Console Application“
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.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Operator Overloading, Mehrfachvererbung, Safe Pointer, Observer.
Tutorium Software-Engineering SS14 Florian Manghofer.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.
Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden.
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.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Grundkurs Informatik 11-13
Interfaces Definition von Interfaces Verwendung von Interfaces
«Delegierter» Methoden Schablone Funktionszeiger
Definition Felder Konstruktor Methoden Beispiel
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Implementieren von Klassen
Statische und Nichtstatische Methoden Properties / Eigenschaften
 Präsentation transkript:

Vererbung

Klassen - Vererbung  Eine Klasse kann von einer Basisklasse abgeleitet werden  Die abgeleitete Klasse erbt die Eigenschaften und Methoden der Basisklasse class derivedClass : [modifier] baseClass { … };

Klassen - Vererbung  Eine Ableitung einer Klasse repräsentiert eine IS-A-Relation  Eine Membervariable repräsentiert eine HAS- A-Relation class Vogel : public Tier { … Fluegel myWings_; … }  Vogel ist ein Tier und hat Flügel

Zugriffsmodifizierer bei abgeleiteten Klassen  public: alle Methoden und Eigenschaften der Basisiklasse mit dort definierter Sichtbarkeit weitergereicht  private: Methoden und Eigenschaften der Basisklasse von außen nicht mehr aufrufbar  protected: Weitere abgeleitete Klassen bekommen den Zugriff auf die Basisklasse

Zugriffsmodifizierer bei abgeleiteten Klassen class A { public int a_; } class B : public A { public int b_; } class C : private A { private int c_; } class D : protected A { protected int d_; } class G : public D { public int g_; } class F : protected C { protected int f_; } class E : private B { private int e_; }

Vererbung – Konstruktoren  Konstruktor der Basisklasse wird vom Konstruktor der abgeleiteten Klasse aufgerufen  Implizit -> Standardkonstruktor  Explizit mit Parameterübergabe class derivedClass : baseClass { … }; derivedClass::derivedClass(int p1, int p2) : baseClass(p3) { … };

Aufgabe 15: Erben  Erstelle eine Klasse mit folgenden Eigenschaften speichert einen Integer-Wert besitzt einen Konstruktor, einen Destruktor und eine Funktion zum Ausgeben des Wertes Konstruktor und Destruktor sollen eine Meldungszeile ausgeben  Erstelle eine davon abgeleitete Klasse, die zusätzlich einen, ebenfalls über den Konstruktor zu setzenden Fließkommawert speichert  Erstelle eine Variable von der abgeleiteten und eine Variable der Basis-Klasse und rufe die in der Basisklasse definierte Funktion zum Ausgeben des Wertes auf

Vererbung - Overriding  genau äquivalente Deklaration einer Funktion / Eigenschaft in einer abgeleiteten Klasse  ursprüngliche Deklaration in der Basisklasse wird versteckt

Aufgabe 16: Erben überschreiben  Ändere die in Aufgabe 15 erstellte abgeleitete Klasse dahin gehend ab, dass die geerbte Funktion zum Anzeigen des Wertes überschrieben wird die überschriebene Funktion soll den in der abgeleiteten Klasse gespeicherten Wert ausgeben

Vererbung - Overriding  Aufruf der versteckten Eigenschaft / Funktion möglich  in der Memberfunktion der abgeleiteten Klasse mittels Scope-Operator baseClass::Funktion();  Aufruf von Außen: upcast zur Basisklasse ((baseClass)varDerived).Funktion();

Aufgabe 17: versteckte Wiederentdecken  Ergänze die Anzeigefunktion der abgeleiteten Klasse so, dass die Anzeigefunktion der Basisklasse aufgerufen wird.  Rufe im Hauptprogramm die Anzeigefunktion der Basisklasse auf einer Variablen der abgeleiteten Klasse auf.

Static vs. Dynamic Binding  beim Linken werden alle Namen (Variable und Funktionen) durch Adressen ersetzt  beim Übersetzen ist nicht immer bekannt, welche Funktion aufgerufen werden soll

Static vs. Dynamic Binding void Display(base &object) { object.Show(); } A myA; Display(myA); class base { public void Show(); } class A : public base { public void Show(); } class B : public base { public void Show(); }

Static vs. Dynamic Binding: Virtuell  Schlüsselwort virtual zur Kennzeichnung dynamischer Bindungen public virtual void Show();  Objekte besitzen zur Laufzeit einen virtual table mit den aktuellen Adressen virtueller Funktionen  Adressen werden beim Konstruktoraufruf in die Tabelle eingefügt  jede Methode, die eine virtuelle Methode überschreibt ist ebenfalls virtuell

Abstrakte Methoden  ähnlich virtuellen Methoden, jedoch wird in der Basisklasse keine Implementierung vorgenommen  abgeleitete Klassen müssen die abstrakte Methode der Basisklasse implementieren  von Klassen mit abstrakten Methoden kann keine Instanz erstellt werden public virtual void Show() = 0;

Aufgabe 18: Virtuell abstrakt  Erstelle eine Klasse 'base', die eine Methode 'show' besitzt, welche anzeigt, dass sie aufgerufen wurde  Erstelle zwei Klassen 'A' und 'B', welche von 'Base' abgeleitet wurden und die gleiche Funktionalität wie 'Base' besitzen  Erstelle eine Funktion 'Display', die als Parameter die Referenz auf eine Variable vom Typ 'Base' erwartet und auf diese die Methode 'show' aufruft. Stelle sicher, dass die Methode 'show' der aufrufenden Variable benutzt wird.  Erstelle je eine Instanz der erstellten Klassen und übergib diese an die Funktion 'Display'  mache aus der virtuellen Methode 'show' der Klasse 'Base' eine abstrakte Methode

Klassen und Pointer  dynamisches Erzeugen der Objekte  Klasse1 *VarName = new Klasse2;  Klasse2 muss entweder (auch über mehrere Ebenen) von Klasse 1 abgeleitet sein oder gleich Klasse 1  jede Klasse muss einen virtuellen Destruktor besitzen, da sonst immer der Destruktor von Klasse1 aufgerufen wird.

Aufgabe 19: Klassen und Pointer  Verwende die in Aufgabe 18 erstellten Klassen 'Base', 'A' und 'B' nun mit Pointern  Ändere die Funktion 'Display' so ab, dass sie einen Pointer auf die Klasse 'Base' entgegennimmt  Erstelle einen Vektor, der 3 Elemente der Klasse 'Base' aufnehmen kann  Fülle den Vektor mit je einem Objekt der oben aufgeführten Klassen  Rufe für jedes Element des Vektors die Funktion 'Display' auf

Templates – Function Templates  Funktionen mit dynamischen Parametertypen  Typ des Parameters wird mit einem generischen Namen ersetzt  Tatsächlich verwendeter Typ von Aufrufparametern abhängig template FunctionName(X var1, Y var2,...) {... }

Templates – Function Templates  konkrete Festlegung des tatsächlichen Datentyps beim Funktionsaufruf  alle mit dem generischen Datentyp durchgeführten Operationen müssen mit dem tatsächlichen Datentyp durchführbar sein  Aufruf eines Function Templates unterscheidet sich nicht vom Aufruf einer normalen Funktion

Function Templates – hinter den Kulissen  Compiler identifiziert beim Funktionsaufruf die generischen Teile  Aufrufparameter werden mit den generischen Teilen verglichen  Ersetzen des generischen durch den tatsächlichen Typ im Funktionsrumpf  Resultierende Funktion wird vom Compiler übersetzt  Aufruf der nun erstellten Funktion wird an der Aufrufstelle eingesetzt

Function Templates  Definition der Template-Funktion muss (vorerst) im Header geschehen  Namen des generischen Parameters möglichst sprechend gestalten  Rückgabewert ebenfalls als generischer Typ möglich  Overloading mit konkreten Implementierungen ist möglich

Aufgabe 20: Template Max  erstelle eine Templatefunktion, die ein Array und dessen Länge als generische Parameter übernimmt und als Ergebnis den Index des Elementes mit dem größten Wert zurückgibt (bei mehreren, das erste Vorkommen)  Teste diese Funktion, indem du sie mit einem int32-Array, einem double-Array und einem char-Array aufrufst

Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden  Memberfunktionen müssen in der Headerdatei deklariert werden (oder per #include direkt nach der Klassendeklaration eingebunden) TemplateClass var; template returnType ClassName ::functName (...)