Vererbung und Polymorphismus



Ähnliche Dokumente
Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Programmieren in Java

Vorkurs C++ Programmierung

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

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Objektorientierte Programmierung. Kapitel 12: Interfaces

Vererbung & Schnittstellen in C#

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Objektorientierte Programmierung OOP

5. Abstrakte Klassen

Objektorientierte Programmierung

1. Grundlegende Eigenscha5en 2. Redefini+on 3. Polymophie 4. Mehrfachvererbung

Einführung in die Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Grundlagen von Python

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

SEP 114. Design by Contract

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Java: Vererbung. Teil 3: super()

Prinzipien Objektorientierter Programmierung

Programmieren Tutorium

Die Bedeutung abstrakter Datentypen in der objektorientierten Programmierung. Klaus Kusche, September 2014

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Java Kurs für Anfänger Einheit 5 Methoden

Excel Funktionen durch eigene Funktionen erweitern.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Klassenbeziehungen & Vererbung

Was meinen die Leute eigentlich mit: Grexit?

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Innere Klassen in Java

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Formale Sprachen und Grammatiken

Objektbasierte Entwicklung

Algorithmen und Datenstrukturen

Assoziation und Aggregation

Trackaufzeichnungen können als Active-Logs oder mit eigenen Namen versehene und auf max. 500 Punkte begrenzte Saved-Tracks gespeichert werden.

1 Vom Problem zum Programm

Softwaretechnik (Allgemeine Informatik) Überblick

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Arbeiten mit UMLed und Delphi

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Whitebox-Vererbung vs. Blackbox-Vererbung. - Begriffsbestimmung - Vererbung öffentliche Vererbung private Vererbung - Zusammenfassung

Anleitung zur Bearbeitung von Prüferkommentaren in der Nachreichung

Objektorientierte Programmierung

Folge 18 - Vererbung

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Tutorium 5 - Programmieren

Client-Server-Beziehungen

Software Engineering Klassendiagramme weiterführende Konzepte

Kurzanweisung für Google Analytics

Übung 9 - Lösungsvorschlag

15 Optimales Kodieren

9 Auto. Rund um das Auto. Welche Wörter zum Thema Auto kennst du? Welches Wort passt? Lies die Definitionen und ordne zu.

Evident VDDS-Anbindung von MIZ

Der Kalender im ipad

How to do? Projekte - Zeiterfassung

Große Übung Praktische Informatik 1

Von der UML nach C++

Professionelle Seminare im Bereich MS-Office

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Leichte-Sprache-Bilder

Abschnitt 9: Schnittstellen: Interfaces

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Zählen von Objekten einer bestimmten Klasse

.NET Code schützen. Projekt.NET. Version 1.0

Software Engineering Klassendiagramme Assoziationen

Algorithmen und Datenstrukturen

Archiv - Berechtigungen

Probeklausur Softwareengineering SS 15

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

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

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

Alltagsnotizen eines Softwareentwicklers

3. Konzepte der objektorientierten Programmierung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Eine Anwendung mit InstantRails 1.7

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

FORUM HANDREICHUNG (STAND: AUGUST 2013)

Klassendefinitionen verstehen

SWE5 Übungen zu Software-Engineering

Präsentation: Google-Kalender. Walli Ruedi Knupp Urdorf

Was ich als Bürgermeister für Lübbecke tun möchte

Testen mit JUnit. Motivation

Einführung in die Java- Programmierung

4 Vererbung, Polymorphie

Kurzeinführung LABTALK

Leichte Sprache Informationen zum Europäischen Sozialfonds (ESF) Was ist der Europäische Sozialfonds?

Teil 1: IT- und Medientechnik

Scala kann auch faul sein

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

3. Stored Procedures und PL/SQL

Java Einführung Abstrakte Klassen und Interfaces

Vorlesung Dokumentation und Datenbanken Klausur

Transkript:

Vererbung und Polymorphismus Benno List OO Get-Together 29.5.06 B. List 29.5.06 Vererbung und Polymorphismus Page 1

Klassen (Wiederholung) Klasse: Datenstruktur mit data members: Variablen: enthalten Informationen member functions: Funktionen Beispiel: Track-Klasse Daten: Track-Parameter, z.b. (κ, φ, θ, d ca, z 0 ) Funtionen: z.b. GetPt(), GetPoint (s), GetIntersection (r) B. List 29.5.06 Vererbung und Polymorphismus Page 2

Central und Forward Tracks TABLE CJKR! CJC Tracks without vertex constraints! ATTributes: 1 KAPPA F -INF +INF! Signed inverse radius 2 PHI F -PI +PI! Azimuth at DCA 3 THETA F 0. +PI! Polar angle 4 DCA F -INF +INF! Distance of Closest Approach = DCA 5 Z0 F -INF +INF! Z at DCA 6 RAD F 0. +INF! Radius at track start 7 IPTYPE I 1 2! Type of parametrization! Covariance matrix packed with subroutine COVCP 8 DKAPPA F 0. +INF! Error of KAPPA... TABLE FTRK! Forward Tracker Tracks! ATTributes:! parameters at start point 1 KAPPA F -INF +INF! signed inverse radius 2 PHI F -PI +PI! track angle in xy-plane 3 THETA F 0. +PI! polar angle 4 X F -99.0 +99.0! X 5 Y F -99.0 +99.0! Y 6 Z F 100.0 300.0! Z at which parameters given (NOT a parameter) 7 IPTYP I 1 2! type of parametrization (=2) 8 DKAPPA F 0. +INF!... B. List 29.5.06 Vererbung und Polymorphismus Page 3

Zwei Klassen oder eine? Central tracks und forward tracks: Viele Gemeinsamkeiten Unterschiedliche Parameter mit verschiedener Bedeutung 2 Klassen: CentralTrack und ForwardTrack: Code in Klassen ist einfach und übersichtlich User-code wird aufwendig, z.b. 2-Spur-Kombinationen: => getrennte Schleifen für central+central, central+forward, forward+forw. 1 Klasse: Verbirgt Komplexität, User-code einfach Code in Klasse aufwendig: viele Verzweigungen if central... else... Datenstruktur nicht optimal B. List 29.5.06 Vererbung und Polymorphismus Page 4

Lösung: Vererbung! Zwei Klassen und eine Eine Basisklasse: Track => enthält gemeinsamen code, eventuell auch gemeinsame Daten Zwei abgeleitete Klassen: CentralTrack und ForwardTrack => enthalten Daten, die unterschiedlich sind => enthalten code, der an die verschiedenen Daten angepasst ist Track UML-Diagramme: CentralTrack ForwardTrack Klasse ist abgeleitet von B. List 29.5.06 Vererbung und Polymorphismus Page 5

Praxis class Track { virtual float GetPx() = 0; // Depends on Parameters virtual float GetDca() =0; // Depends on Parameters float GetPt() { return sqrt(getpx()*getpx() + GetPy()*GetPy()); } class CentralTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return dca; } float kappa, phi, theta, dca, z0; class ForwardTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return f(x0, y0, z0); } float kappa, phi, theta, x0, y0, z0; Vererbung: Central Track ist Tochterklasse von Track B. List 29.5.06 Vererbung und Polymorphismus Page 6

Praxis class Track { virtual float GetPx() = 0; // Depends on Parameters virtual float GetDca() =0; // Depends on Parameters float GetPt() { return sqrt(getpx()*getpx() + GetPy()*GetPy()); } class CentralTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return dca; } float kappa, phi, theta, dca, z0; Unterschiedliche Daten class ForwardTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return f(x0, y0, z0); } float kappa, phi, theta, x0, y0, z0; Vererbung: Central Track ist Tochterklasse von Track B. List 29.5.06 Vererbung und Polymorphismus Page 7

Praxis class Track { virtual float GetPx() = 0; // Depends on Parameters virtual float GetDca() =0; // Depends on Parameters float GetPt() { return sqrt(getpx()*getpx() + GetPy()*GetPy()); } class CentralTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return dca; } float kappa, phi, theta, dca, z0; Unterschiedliche Daten class ForwardTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return f(x0, y0, z0); } float kappa, phi, theta, x0, y0, z0; Abstrakte Funktionen: Deklariert, aber nicht definiert (implementiert) Vererbung: Central Track ist Tochterklasse von Track Implementierung der abstrakten Funktionen für eine konkrete Tochterklasse B. List 29.5.06 Vererbung und Polymorphismus Page 8

Praxis class Track { virtual float GetPx() = 0; // Depends on Parameters virtual float GetDca() =0; // Depends on Parameters float GetPt() { return sqrt(getpx()*getpx() + GetPy()*GetPy()); } class CentralTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return dca; } float kappa, phi, theta, dca, z0; Unterschiedliche Daten class ForwardTrack: public Track { float GetPx() { return cos(phi)/abs(kappa); } float GetDca() { return f(x0, y0, z0); } float kappa, phi, theta, x0, y0, z0; Abstrakte Funktionen: Deklariert, aber nicht definiert (implementiert) Vererbung: Central Track ist Tochterklasse von Track Implementierung der abstrakten Funktionen für eine konkrete Tochterklasse GetPt(): Definiert in Basisklasse => wird ererbt! Benutzt abstrakte Methoden GetPx() und GetPy() => allgemeine Definition, obwohl Funktionsweise von GetPx() vom Tracktyp abhängt! B. List 29.5.06 Vererbung und Polymorphismus Page 9

Wie benutzt man das? int main() { Track t; // Geht nicht: Track ist keine vollständige Klasse! CentralTrack ct1 (...); CentralTrack ct2 (...); ForwardTrack ft3 (...); ForwardTrack ft4 (...); // ein CentralTrack-Objekt // noch eins // ein ForwardTrack-Objekt // noch eins float pt1 = ct1.getpt(); // pt des ersten Tracks Track *t1 = &ct1; pt1 = t1->getpt(); Track *t3 = &ft3; // Pointer auf ersten Track // nochmal pt des ersten Tracks // Pointer auf dritten Track } float m13 = InvariantMass (t1, t3, 0.139, 0.139); // invariante Masse von 1 und 3 float InvariantMass (Track *t1, Track *t2, float m1, float m2) { return sqrt (pow (t1->gete(m1) + t2->gete(m2), 2) - pow (t1->getpx(m1) + t2->getpx(), 2) - pow (t1->getpy(m1) + t2->getpy(), 2) - pow (t1->getpz(m1) + t2->getpz(), 2)); } B. List 29.5.06 Vererbung und Polymorphismus Page 10

Polymorphismus Basisklasse: Definiert, was alle Tracks leisten: GetPX(), GetPt(), GetE(float m),... Tochterklassen: Enthalten die eigentlichen Daten, und den code, der diese Daten nutzt Oft kann man kein Objekt der Basisklasse kreieren => abstrakte Basisklasse Ein CentralTrack ist ein Track : => Vererbung = ist ein -Verhältnis Ein Pointer auf CentralTrack ist ein Pointer auf Track Kann über einen Pointer auf Track Funktionen der Tochterklasse aufrufen, die nur dort implementiert sind, wenn sie in der Basisklasse deklariert sind! B. List 29.5.06 Vererbung und Polymorphismus Page 11

Vererben <-> Enthalten Oft vorkommende Situation: Habe Klasse, die Funktionalität bereitstellt: Motor::GetPS() Zweite Klasse braucht diese Funktionalität: Auto::GetPS() Ansatz: Vererbung: class Auto: public Motor {... Don't Do That!!! Ein Auto ist nicht ein Motor!!! Ein Auto hat einen Motor! Also: Auto::GetPS() { return dermotor.getps(); } B. List 29.5.06 Vererbung und Polymorphismus Page 12

Nochmal Benutze Vererbung nur, wenn eine ist ein -Verhältnis vorliegt Ein hat ein -Verhältnis: Benutze Agglomeration: Führe ein data member ein: class Motor { GetPS() { return ps; } float ps; // die Leistung des Motors float drehmoment, maxdrehzahl; int zylinder, ventile, kraftstofftyp; class Auto { // Ein Auto ist ein Auto ist ein Auto ist kein Motor... GetPS() { return dermotor->getps(); } // Leistung des Autos = Leistung des Motors Motor *dermotor; // Zeiger auf den Motor des Autos: Auto hat einen Motor float leergewicht, laenge, hoehe, breite, maximalgeschwindigkeit; B. List 29.5.06 Vererbung und Polymorphismus Page 13

In UML Typische Situation: Es gibt nicht das Auto, es gibt nur spezifische Autos: PKW, LKW,... Es gibt nicht den Motor, es gibt nur spezifische Motoren Aber: Jedes Auto hat einen Motor Die Leistung jedes Autos ist die Leistung seines Motors Auto Motor UML-Diagramme: ist enthalten in LKW PKW DieselM OttoM ist abgeleitet von B. List 29.5.06 Vererbung und Polymorphismus Page 14

H1OO Beispiel: Jeder H1Track hat einen zugehörigen H1PartCand Jeder H1ForwardTrack hat eine zugehörige H1HelixTrajectory GetTrajectory() ist eine Methode von H1Track H1Track + GetTrajectory() H1PartCand UML-Diagramme: Class + PublicMethod () - PrivateMethod() H1Vertex FittedTrack H1NonVertex FittedTrack H1Trajectory öffentliche Methode, interne Methode H1Central Track H1Forward Track H1Helix Trajectory B. List 29.5.06 Vererbung und Polymorphismus Page 15

Praktische Aspekte Polymorphismus funktioniert nur mit Funktionen, die als virtual gekennzeichnet sind virtual wird vererbt : Funktion gleichen Namens und mit gleichen Argumenten in Tocherklasse ist automatisch virtual (Basis)klasse mit einer virtual Methode muss IMMER einen Destruktor haben, der virtual ist. Virtuelle Methoden können eine Implementierung in der Basisklasse haben, die vererbt wird Virtuelle Methoden ohne Implementierung: =0 (pure virtual) => macht Klasse abstrakt => Klasse kann nicht instanziiert werden! B. List 29.5.06 Vererbung und Polymorphismus Page 16

Syntax class Track { virtual float GetPx() = 0; virtual float GetDca() =0; float GetPt(); virtual ~Track(); class CentralTrack: public Track { float GetPx(); float GetDca(); float kappa, phi, theta, dca, z0; B. List 29.5.06 Vererbung und Polymorphismus Page 17