Vererbung und Polymorphie

Ähnliche Dokumente
Vorlesung Datenstrukturen

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Theorie zu Übung 8 Implementierung in Java

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Angewandte Mathematik in OOP WS 2011/12. Abschluss-Test

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

SWE1 / Übung 9 ( )

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Vererbung und Polymorphie

Praxis der Programmierung

14. Java Objektorientierung

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

11.3 Virtuelle Methoden

Grundlagen der Informatik

Die verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen

Einführung in die Programmierung für NF. Vererbung

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II

Programmierpraktikum 3D Computer Grafik

Überblick. R.Grossmann / P. Sobe 1

14. Java Objektorientierung

Überblick. 5. Objekt und Klasse, Elementfunktionen

Einstieg in die Informatik mit Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Vorkurs Informatik WiSe 15/16

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Programmierung und Angewandte Mathematik

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

C++ - Objektorientierte Programmierung Polymorphie

Polymorphismus 179. Function.h. #include <string>

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Programmierung und Angewandte Mathematik

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Programmierung Nachklausurtutorium

Objektorientierte Programmierung mit C++ SS 2007

Tafelübung 07 Algorithmen und Datenstrukturen

Informatik II Übung 6

12 Abstrakte Klassen, finale Klassen und Interfaces

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Vererbung, Polymorphie

Einführung in die Programmierung Wintersemester 2008/09

Algorithmen und Datenstrukturen

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Einführung in die Programmiersprache Java II

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

Einführung in die Programmierung mit C++

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

Einführung in C# Teil 3. Matthias Nübling

Polymorphismus 44. Function.hpp. #include <string>

Einführung in die Programmierung Wintersemester 2016/17

Vererbung & Schnittstellen in C#

4. Objektorientierte Programmierung mit C++

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

4. Vererbung. Idee der Vererbung. Wir wollen ein Verwaltungsprogramm für CDs und Videos entwickeln. Wir stellen uns dazu folgende Klassen vor:

01. Grundprinzipien der Vererbung

Implementieren von Klassen

Praxisorientierte Einführung in C++ Lektion: "Virtuelle Methoden"

Vererbung und Polymorphie

Programmieren in Java

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Probeklausur: Programmierung WS04/05

Java Einführung Vererbung und Polymorphie. Kapitel 13

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces

Einführung in C++ Vererbung und Polymorphismus

Java, OO und UML Fortsetzung

Einführung in die Programmierung

Lösung zur Klausur C++ und Data Mining 16. Juli 2004 (SS 2004)

Repetitorium Informatik (Java)

14 Abstrakte Klassen, finale Klassen, Interfaces

Mikrorechentechnik II. Klassen in C++

11.3 Virtuelle Methoden

Java für Bauingenieure

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Objektorientierung (OO)

Verwendung von Klassen in C++

OOP und Angewandte Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Objektorientierte Programmierung Studiengang Medieninformatik

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Objektorientierung. Marc Satkowski 20. November C# Kurs

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Die abgeleiteten Klassen Kreis und Viereck erben die Elemente des Basisklasse und verfügen über zusätzliche Eigenschaften (Seitenlänge,

Vererbung. Martin Wirsing. Ziele. Vererbung

Transkript:

Vererbung und Polymorphie WiMa-Praktikum 1, Teil C++, Tag 5 Christoph Ott, Büro: Helmholtzstr.18, E22 Tel.: 50-23575, Mail: christoph.ott@uni-ulm.de Institut für Angewandte Informationsverarbeitung 29.08.08 Christoph Ott 1

Übersicht: Vererbung und Polymorphie Vererbung Prinzip Kennzeichnung Vorteile virtuelle Funktionen & Polymorphie Überladen von Elementfunktionen Compile-Zeit vs. Laufzeit Das Schlüsselwort virtual abstrakte Klassen nicht-instanziierbare Klassen rein virtuelle Funktionen Mehrfachvererbung im Unterschied zu Java möglich 29.08.08 Christoph Ott 2

Vererbung Prinzip: Unterklassen werden von Oberklassen abgeleitet Unterklasse besitzt automatisch sämtliche Funktionalität der Oberklasse (Voraussetzung: Variablen und Funktionen sind protected oder public deklariert) Unterklasse erweitert Funktionalität der Oberklasse Kennzeichnung: nach Klassenname durch : getrennt Name der Oberklasse angeben Bsp.: class A:public B {... }; Vorteile: Vererbungsbeziehungen der realen Welt können ausgedrückt werden (Porsche ist ein ganz bestimmtes Auto) reduzierter Schreibt-/ Tippaufwand (Code der Oberklasse muss nicht mehr abgeschrieben werden) Wiederverwendung bereits existierender Oberklassen Änderung bei Fehlern nur in einer Klasse 29.08.08 Christoph Ott 3

Überladen von Elementfunktionen Bisher: Elementfunktion einer Klasse kann durch unterschiedliche Parameterdeklaration überladen werden Elementfunktion einer Klasse kann von der einer anderen Klasse überladen werden Neu: Elementfunktion einer Oberklasse kann in einer Unterklasse überladen werden. Problem: Klasse des Objekts kann zur Compilezeit noch nicht feststehen. Polymorphismus: Fähigkeit, zur Laufzeit auf Basis des Objekts zu entscheiden, welche der Elementfunktionen (Ober-/ Unterklasse) aufgerufen werden soll (späte Bindung!) Default in C++ ist jedoch frühe Bindung Lösung: Schlüsselwort virtual teilt c++ mit, dass eine Funktion polymorph verwendet werden soll / spät gebunden werden soll 29.08.08 Christoph Ott 4

virtuelle Funktionen Voraussetzungen für späte Bindung: Elementfunktion in Unterklasse muss identisch deklariert sein (inklusive Rückgabetyp) Elementfunktion darf nicht statisch sein. Elementfunktion darf nicht inline definiert sein. Konstruktoren können nicht virtuell deklariert werden. Jedoch: Destruktor (bisher nicht bekannt) muss virtuell deklariert werden (virtual ~Konto(){} in Header-Datei). rein virtuelle Funktionen: werden in Oberklasse nur deklariert (d.h. nicht implementiert), müssen also zwangsläufig überladen werden Schreibweise: virtual double einzahlen() = 0; Klassen mit mind. einer rein virtuellen Funktion heißen abstrakte Klassen und sind (da nicht vollständig definiert) nicht instanziierbar 29.08.08 Christoph Ott 5

Verwendung von abstrakten Klassen: 6 Goldene Regeln 1. Sollen die Unterklassen auf die Elementvariablen zugreifen können, so müssen diese als protected ausgezeichnet werden. 2. Destruktor, virtuelle Funktionen und rein virtuelle Funktionen müssen in der Header-Datei als virtuell deklariert werden. 3. Alle virtuellen und rein virtuellen Funktionen müssen in jeder Unterklasse deklariert und definiert werden. 4. Objekte einer abstrakten Klasse können nicht erzeugt werden. Anstatt dessen muss man Zeiger auf eine abstrakte Klasse erzeugen. Diese können dann polymorph verwendet werden. 5. Wenn man Elementfunktionen von Zeigern aufruft, muss man mit -> anstatt mit. arbeiten. 6. Ebenso müssen bei der polymorphen Übergabe von Objekten an (Element-) Funktionen, stets Zeiger anstatt Referenzen verwendet werden. 29.08.08 Christoph Ott 6

Beispiel: Objektorientierung Konto double stand; int frist; boolean einzahlen (double betrag); boolean abheben (double betrag); int nr;??? Girokonto stand>=-500 abheben: betrag <=4000 Christoph Steffen Norbert Wolfgang Sparbuch abheben: geht nicht! Christoph Wolfgang Armin Strumpf stand >=0 Gerhard Franz 29.08.08 Christoph Ott 7

Beispiel: Konto als abstrakte Klasse - include etc. - class Konto{ protected: string inhaber; int nr; double stand; konto.h public: - nicht-virtuelle Fkt. - virtual ~Konto(){} virtual int getnr(); virtual bool setnr(int nummer); virtual bool abheben (double betrag) = 0; }; class Giro:public Konto{ public: Giro(string i); bool abheben(double betrag); };... #include konto.h konto.cpp - sonstige Fkt. - bool Konto::ueberweisen (Konto* empf, double sum){ if (abheben(sum)){ empf->einzahlen(sum); return true; } return false; } Giro::Giro(string i){ inhaber=i; nr=n; stand=s; } bool Giro::abheben(double betrag){ if ((betrag<=3000) && (stand-betrag)>=-500){ stand-=betrag; return true;} return false; }... #include konto.h kontofuehrung.cpp Konto *giro, *socke, *spar; giro = new Giro("Chris"); spar = new Sparbuch("Tom"); socke = new Strumpf("Tom"); giro->ueberweisen(spar, 100); spar->abheben(200); socke->einzahlen(300); cout << giro->getstand() << endl; cout << spar->getstand() << endl; cout << socke->getstand() << endl; 29.08.08 Christoph Ott 8