Vorlesung Datenstrukturen

Ähnliche Dokumente
Vorlesung Datenstrukturen

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

11.3 Virtuelle Methoden

Javakurs für Anfänger

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

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

Repetitorium Informatik (Java)

Vererbung und Polymorphie

Theorie zu Übung 8 Implementierung in Java

Programmierkurs C++ Abstrakte Klassen und Methoden

Präsentation Interfaces

Vererbung. Was versteht man unter dem Begriff Vererbung?

Vorlesung Programmieren. Bisher: Klassen und Objekte. Was ist mit ähnlichen Klassen? Vererbung und Polymorphismus

3D Programmierpraktikum: Einführung in C++ - Teil 2

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Einstieg in die Informatik mit Java

Aufbau von Klassen. class punkt {...

Angewandte Mathematik und Programmierung

Informatik II Prüfungsvorbereitungskurs

Überschreiben von Methoden

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Prof. W. Henrich Seite 1

Abschnitt 9: Schnittstellen: Interfaces

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

Einstieg in die Informatik mit Java

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

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Einführung in die Programmierung

3. Konzepte der objektorientierten Programmierung

Java Vererbung. Inhalt

5. Abstrakte Klassen

Java Schulung (Java 2 Java Development Kit 5 / 6)

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

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

Kapitel 6. Vererbung

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Teil 2: OOP und JAVA (Vorlesung 11)

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

Kapitel 6. Vererbung

Kurzeinführung in C/C++ Elementare Datentypen in C++

Java I Vorlesung Vererbung und Sichtbarkeit

Objektorientierte Programmierung. Kapitel 12: Interfaces

Interfaces und Vererbung

Informationsverarbeitung im Bauwesen

Kapitel 6. Vererbung

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

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

Javakurs für Anfänger

Objektorientierung II

3 Objektorientierte Konzepte in Java

Der Operator this. Wir betrachten nochmals die Klassendefinition von Ballon.

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Vererbung & Schnittstellen in C#

Programmieren in Java

7 Vererbung. Modul Programmieren mit C++ Kapitel Vererbung

3 Klassen, Attribute, Methoden

Einführung in C++ Vererbung und Polymorphismus

Letztes Mal. static int ggt(int a, int b) { if (a == b) return a; else if (a > b) return ggt(a-b,b); else if (a < b) return ggt(a,b-a);

SWE1 / Übung 9 ( )

Programmieren - Vererbung & Polymorphie

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

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

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Java Einführung Abstrakte Klassen und Interfaces

Programmieren in Java

Java, OO und UML Fortsetzung

Objektorientierung: Klassen und Objekte

Klassen mit Instanzmethoden

Algorithmen und Datenstrukturen 07

Javakurs zu Informatik I. Henning Heitkötter

Klassenbeziehungen & Vererbung

AuD-Tafelübung T-B5b

Java Einführung Methoden in Klassen

Algorithmen und Programmierung II

Objekt-Komposition versus Vererbung: Decorator-Design-Pattern

Algorithmen und Datenstrukturen

Vererbung und Polymorphismus

Probeklausur: Programmierung WS04/05

Javakurs 2013 Objektorientierung

Wiederholung zur Vorlesung Programmieren

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Java I Vorlesung 6 Referenz-Datentypen

EINI I. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 10/11

Teil 9: Vererbung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Objektorientierte Programmierung OOP

Informatik II Übung 6 Gruppe 7

1 Polymorphie (Vielgestaltigkeit)

Javakurs für Anfänger

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

Objektorientierte Programmiersprachen

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2008/2009

Einstieg in die Informatik mit Java

Repetitorium Informatik (Java)

Kapitel 19: Klassen und Unterklassen

Vererbung. Martin Wirsing. Ziele. Vererbung

Transkript:

Vorlesung Datenstrukturen Objektorientierung in C++ (3) Aspekte der Vererbung (1) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 546

Zuweisung bei Vererbung Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 547

Zuweisung bei Vererbung Zuweisung Resultat Variable der Basisklasse = Unterklasseninstanz Variable der Unterklasse = Basisklasseninstanz Referenzvariable der Basisklasse = Unterklasseninstanz Zeigervariable der Basisklasse = Zeiger auf Unterklasseninstanz Aufgrund der Wertsemantik der Zuweisung ist das kopierte Objekt vom Basisklassentyp, d.h. dass Erweiterungen der Unterklasse verloren gehen Kein Polymorphismus! Ist standardmäßig nicht möglich. Es ist nicht klar, wie der für Erweiterungen nötige Speicher alloziiert werden soll. Allerdings kann diese Variante durch Überladen des Standardzuweisungsoperators ermöglicht werden. Die Basisklassenvariable verhält sich trotz Referenz auf eine Unterklasseninstanz nur wie die Basisklasse Kein Polymorphismus! Obwohl die Zeigervariable nach der Zuweisung auf ein Objekt der Unterklasse verweist, verhält sich dieses wie ein Objekt der Basisklasse Kein Polymorphismus! Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 548

Polymorphismus in C++ Folgerung Bei Vererbung für Zuweisungsoperationen gibt es keinen impliziten Polymorphismus. Ursache C++ ist auf Effizienz getrimmt und die Klasse eines Objekts ist (bei Vererbung) während der Kompilierung nicht immer herauszufinden. Eine durchgängig dynamische Bestimmung zur Laufzeit (wie z.b. in Java) verursacht einen zusätzlichen Aufwand, der häufig nicht nötig ist. Expliziter Polymorphismus Um polymorphes Verhalten und damit eine Klassenbestimmung zur Laufzeit zu erreichen, muss eine Methode explizit mit Hilfe des Schlüsselwortes virtual gekennzeichnet werden. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 549

Virtuelle Klassen Konsequenz virtueller Methoden Klassen, die mindestens eine virtuelle Methode besitzen, werden als virtuelle Klassen bezeichnet. Virtueller Destruktor Sobald Zeiger vom Typ der Basisklasse auf Objekte einer abgeleiteten Klasse verweisen, sollte auch der Destruktor der Basisklasse virtuell sein. Sonst würde nur der Destruktor der Basisklasse ausgeführt werden und alle Erweiterungen von Unterklassen (selbst statische Attribute!) verblieben im Speicher. Bei unterschiedlicher Freispeicherverwaltung in abgeleiteten Klassen müssen natürlich individuelle Destruktoren implementiert werden. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 550

Zuweisung bei virtuellen Methoden Zuweisung Resultat Variable der Basisklasse = Unterklasseninstanz Aufgrund der Wertsemantik der Zuweisung ist das kopierte Objekt weiterhin vom Basisklassentyp, d.h. dass Erweiterungen der Unterklasse verloren gehen. Kein Polymorphismus! Referenzvariable der Basisklasse = Unterklasseninstanz Zeigervariable der Basisklasse = Zeiger auf Unterklasseninstanz Virtuelle Funktionen greifen auf die Implementierung der zur Laufzeit gültigen Klasse zu und weisen damit polymorphes Verhalten auf. Nichtvirtuelle Methoden benutzen weiterhin die Implementierung der Basisklasse. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 551

Abstrakte Klassen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 552

Motivation anhand eines Beispiels Aufgabe Erstellen einer Modellierungssoftware für den Architekturbereich Grundforderungen an Funktionalität Erzeugung verschiedener geometrischer Formen: zunächst Beschränkung auf Kreis, Quadrat und Rechteck, aber später einfache Ergänzung weiterer Formen wünschenswert Implementierung einer Flächenberechnung, sowohl für alle geometrischen Formen einzeln als auch eine kumulative Flächenberechnung für mehrere verschiedene erzeugte Formen. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 553

Erster Entwurf Schritte Objektidentifikation Beschreibung Erkennen von Gemeinsamkeiten Beziehungsanalyse Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 554

Erster Entwurf r (x,y) class Circle { double x, y, r; Schritte Objektidentifikation Beschreibung Erkennen von Gemeinsamkeiten b (x,y) a a b class Rectangle { double x, y, a, b; Beziehungsanalyse a a (x,y) a a class Square { double x, y, a; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 555

Erster Entwurf r (x,y) class Circle { double x, y, r; Schritte Objektidentifikation Beschreibung Erkennen von Gemeinsamkeiten (x,y) a b class Rectangle { double x, y, a, b; Beziehungsanalyse (x,y) a class Square { double x, y, a; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 556

Erster Entwurf r (x,y) class Circle { double x, y, r; Schritte Objektidentifikation Beschreibung Erkennen von Gemeinsamkeiten (x,y) a b class Rectangle { double x, y, a, b; Beziehungsanalyse Erkenntnisse gemeinsame Attribute und Methoden x, y, (x,y) a class Square { double x, y, a; area() Auslagern in gemeinsame Oberklasse Quadrat ist Spezialfall eines Rechtecks Square ist Unterklasse von Rectangle Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 557

Klassenhierarchie r (x,y) class Circle { double x, y, r; Shape class Rectangle { (x,y) a b double x, y, a, b; Rectangle Circle (x,y) a class Square { double x, y, a; Square Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 558

Implementierung von Shape (1) Shape class Shape { double x, y; double area() {? Rectangle Circle Hinweis Aus Gründen der Übersichtlichkeit werden im Folgenden weder Konstruktoren, Setter oder Getter noch Sichtbarkeiten dargestellt. Square In der Regel sind Datenelemente als private oder protected, Methoden und die Ableitung von Klassen dagegen als public anzusehen. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 559

Implementierung Klasse Circle Shape class Shape { double x, y; double area() {? Rectangle Square Circle class Circle : Shape { // erbt x, y und area() double r; // Radius double area() { // verfeinern return 3.14159 * r * r; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 560

Implementierung Rectangle / Square Shape class Shape { double x, y; double area() {? Rectangle Square Circle class Rectangle : Shape { // erbt x, y und area() double a, b; double area() { // verfeinern return a * b; class Square : Rectangle { // erbt a (und b) double area() { return a * a; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 561

Implementierung Klasse Shape (2) Shape class Shape { double x, y; double area() {? Rectangle Square Circle Frage Wie area() implementieren? Zwei Lösungsvorschläge 1. Realisierung nur in Unterklassen? 2. Nullwerte (z.b. neg. Flächen) als Ergebnis? Problem 1. Nicht Aufgabenadäquat 2. Redundant und schlechter Stil Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 562

Abstrakte Methoden Definition Abstrakte Methoden sind Methoden ohne Rumpf, d.h. dass sie nur deklariert aber nicht implementiert werden. Syntax Abstrakte Methoden werden wie normale Methoden deklariert. Zusätzlich wird das Schlüsselwort virtual vorangestellt und dem Funktionskopf der Wert 0 zugewiesen. virtual Rückgabetyp Funktionsname ( Argumentliste ) = 0 Implementierung Abstrakte Methoden werden in abgeleiteten Klassen implementiert. Dabei kann die Implementierung stufenweise entlang der Vererbungshierarchie erfolgen. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 563

Abstrakte Klassen Konsequenz abstrakter Methoden Klassen, die mindestens eine abstrakte Methode enthalten, sind selbst abstrakt. Kennzeichnung Abstrakte Klassen werden nicht explizit als abstrakt gekennzeichnet. Bedeutung Abstrakte Klassen dienen zur Gliederung und Bereitstellung von Funktionalität, die konkret erst von Unterklassen benutzt wird. class Shape { double x, y; virtual double area() = 0; Achtung Von abstrakten Klassen können keine Instanzen gebildet werden! Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 564

Verwendung der Klasse Shape Wunsch Berechnung der Gesamtfläche aller instanziierten geometrischen Formen Voraussetzung Es befinden sich N verschiedene Formen (Objekte) in einem Feld vom Typ Shape, d.h. N Zeiger vom Typ Shape verweisen auf existierende geometrische Formen. Berechnung der kumulierten Fläche double sumarea( Shape* s[], int N ) double sum = 0.0; for ( int i = 0; i < N; i++ ) sum += s[i]->area(); return sum; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 565

Zusammenfassung abstrakte Klassen Der Einsatz abstrakter Klassen ermöglicht: gleichartige Funktionalität, die erst in Unterklassen (meist individuell) konkretisiert werden kann, schon in Oberklassen zu definieren. Durch Verwendung der (abstrakten) Funktionalität der Oberklasse müssen nutzende Applikationen (z.b. aggregierende Funktionen) den Zugriff nur einmal implementieren. Die Auswahl der tatsächlichen Implementierung erfolgt zur Laufzeit durch Polymorphismus Realisierung durch abstrakte Methoden Funktionalität, die unmodifiziert in der Oberklasse und in Unterklassen Verwendung finden kann, nur einmal in der abstrakten Oberklasse bereitzustellen Realisierung durch konkrete Methoden eine automatische Integritätssicherung, da eine Instanzerzeugung erst bei (nicht abstrakten) Unterklassen möglich ist. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 566

Ende der Vorlesung Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 567