Vorlesung Datenstrukturen

Ähnliche Dokumente
C++ - Objektorientierte Programmierung Vererbung

Prinzipien der objektorientierten Programmierung (OOP)

Angewandte Mathematik und Programmierung

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

Vorlesung Datenstrukturen

Einstieg in die Informatik mit Java

Programmierung und Angewandte Mathematik

Vererbung, Polymorphie

Klassen als Datenstrukturen

Einstieg in die Informatik mit Java

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

Objektorientierte Programmierung Studiengang Medieninformatik

Vererbung und Polymorphie

Begriffe 1 (Wiederholung)

01. Grundprinzipien der Vererbung

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

Grundkurs C++ IDE Klassenhierarchien

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

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

Grundkurs C++ IDE Klassenhierarchien

5 Vererbung. Subklassen, Superklassen, Pakete Zugriffsrechte

Objektorientierte Programmierung und Klassen

7. Übung Informatik II - Objektorientierte Programmierung

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Programmieren in Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Grundlagen der Informatik

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

Prof. W. Henrich Seite 1

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

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

Objekte wie Hund und Katz

11 Vererbung und Klassenhierarchie

Beziehungen zwischen Objekten

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

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

Programmieren in C/C++ und MATLAB

Überblick. Überblick zum weiteren Inhalt

Programmieren in Java

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

Java Vererbung. Inhalt

Programmieren in Java

Grundlagen der Informatik Vererbung von Klassen

Überschreiben von Methoden

Repetitorium Informatik (Java)

Einführung in die Programmierung mit C++

11.3 Virtuelle Methoden

Vererbung. Was versteht man unter dem Begriff Vererbung?

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

Programmieren - Vererbung & Polymorphie

Mikrorechentechnik II. Klassen in C++

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

Einführung in das Objektorientierte Programmieren mit C++

Java, OO und UML Fortsetzung

Einführung in die Programmiersprache Java II

Einstieg in die Informatik mit Java

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

3 Objektorientierte Konzepte in Java

Einstieg in die Informatik mit Java

12 Abstrakte Klassen, finale Klassen und Interfaces

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

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

6. Globalübung (zu Übungsblatt 8)

Java für Bauingenieure

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

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

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Tutorial zu Einführung in die Informatik für LogWi- Ings und WiMas Wintersemester 2015/16. 1 Zauberer und Zwerge, Aufgabenteil 1

Objektorientiertes Programmieren mit C++ für Fortgeschrittene

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

C++ - Objektorientierte Programmierung Konstante und statische Elemente

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

14 Abstrakte Klassen, finale Klassen, Interfaces

Programmieren 2 C++ Überblick

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

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Objektorientierte Programmierung. Kapitel 14: Interfaces

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

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

Vererbung. Martin Wirsing. Ziele. Vererbung

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Aufbau von Klassen. class punkt {...

III. Objektorientierte Programmierung. Aufruf einer Methode. Definition einer Methode. Bezug zur aufrufenden Instanz. Instanzen einer Klasse

Angewandte Mathematik und Programmierung

7 Vererbung. Modul Programmieren mit C++ Kapitel Vererbung

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Vererbung & Schnittstellen in C#

Informatik I (D-MAVT)

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

3 Objektorientierte Konzepte in Java

3.3 Konstruktoren und Destruktoren

1 Klassen und Objekte

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

Transkript:

Vorlesung Datenstrukturen Objektorientierung in C++ (2) Beziehungen zwischen Klassen Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 530

Beziehungen zwischen Klassen Assoziation Beschreibt eine allgemeine Beziehung zwischen zwei Klassen, bei der die Objekte beider Klassen völlig unabhängig voneinander existieren. Aggregation (is-part-of-beziehung) Eine Klasse ist Bestandteil (part-of) einer anderen Klasse, kann aber trotzdem unabhängig von dieser existieren. Komposition Bezeichnet einen Spezialfall der Aggregation, bei der die Existenz der übergeordneten Klasse zwingend notwendig ist Vererbung (is-a-beziehung) Beschreibt die (implizite) Beziehung zwischen zwei Klassen, die in einer Vererbungshierarchie stehen. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 531

Objektbeziehung bei GUIs 2. Selektion per Maus er- laubt automa- tisch auch die Funktionalität Verschiebung des Objekts in Papierkorb 1. Das Verzeichnisobjekt Musik ist eine Komposition von Unterobjekten 3. Verschieben des Objekts in den Papierkorb löscht automatisch auch die abhängigen Komponentenobjekte Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 532

Initialisierung von Komponentenobjekten Standardkonstruktor Ein Standardkonstruktor wird nur dann automatisch generiert, falls keine explizite Konstruktordefinition erfolgt. Konzept der Softwareentwicklung Die Ersetzung des Standardkonstruktors durch einen parametrisierten Konstruktor zwingt zum Initialisieren und hilft somit, inkonsistente Zustände zu vermeiden. class Letter { char letter; public: Letter(char c) { letter = c; } }; Potenzielles Problem Wie initialisiert man Komponentenobjekte ohne Standardkonstruktor? class Name { }; Letter z; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 533

Initialisierung von Komponentenobjekten Syntax Nach dem Funktionskopf des Konstruktors wird eine durch Doppelpunkt abgetrennte, kommaseparierte Liste mit den zu initialisierenden Attributen und ihren Argumenten angegeben. Dabei erfolgt die Initialisierung in der Reihenfolge der Attribute. Funktionsweise Es erfolgt jeweils ein Konstruktoraufruf für die in der Liste spezifizierten Attribute vor der Abarbeitung des eigentlichen Konstruktors, womit Komponentenobjekte ohne Standardkonstruktor direkt initialisiert werden können. Parameter Parameter des Konstruktors können in der Initialisierungsliste verwendet werden. Zudem kann durch die explizite Initialisierung aller Parameter gleichzeitig ein Standardkonstruktor generiert werden. Orthogonalität Auch Attribute der Grundtypen können mit dieser Syntax initialisiert werden und besitzen damit implizit einen Konstruktor. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 534

Abfolge Konstruktion & Destruktion Problem Vor allem bei nichttrivialen Beziehungen zwischen Komponentenklassen ist es wichtig zu wissen, in welcher Reihenfolge die einzelnen Attribute einer Klasse konstruiert und wieder destruiert werden. Abfolge einer Konstruktion 1. Alle Attribute werden in der Reihenfolge ihrer Definition konstruiert. 2. Der Konstruktor der Klasse wird aufgerufen. Abfolge einer Destruktion 1. Der Destruktor der Klasse wird aufgerufen. 2. Die Destruktion aller Attribute erfolgt in umgekehrter Reihenfolge ihrer Definition. Felder von Objekten Für jede Feldkomponente wird automatisch der Standardkonstruktor und später auch der Destruktor aufgerufen. Deshalb ist bei Verwendung einer Klasse als Feldkomponente die Existenz eines Standardkonstruktors Voraussetzung! Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 535

Vererbung Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 536

Vererbung Motivation Oft wird die Funktionalität einer Klasse in leicht abgewandelter oder erweiterter Form benötigt. Definition Vererbung Vererbung bezeichnet die Fähigkeit einer Klasse, das Verhalten und die Datenstruktur ihrer Instanzen als Obermenge der Definition einer anderen Klasse oder anderer Klassen zu verwenden. Ziele Wiederverwendung von Struktur und Programmcode Realistischere Modellierung Vereinfachte Wartung Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 537

Vererbung Unterklasse Bezeichnet eine Klasse, die das Verhalten einer anderen Klasse erbt. Einer Unterklasse wird in der Regel eigenes Verhalten hinzugefügt, um einen einzigartigen Objekttyp zu definieren. Den Vorgang der Unterklassenbildung nennt man Ableitung oder Spezialisierung. Basisklasse (Oberklasse) Bezeichnet die Klasse, deren Verhalten vererbt wird. Eine Klasse kann eine oder mehrere Basisklassen aufweisen. Inhalt von Unterklassen In der erbenden Klasse müssen ausschließlich neu hinzugekommene Datenelemente und Methoden definiert bzw. schon vorhandene neu implementiert werden. Zusätzlich ist das Ändern der Zugriffsrechte möglich. Integritätsbedingung Ein Objekt einer Klasse ist implizit auch ein Objekt aller Oberklassen. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 538

Beispiel - Vererbung bei GUIs Allen Eingabevarianten ist gemeinsam, dass sie einen Wert zurückliefern, entweder einen vordefinierten aus einer diskreten Wertemenge oder einen direkt eingegebenen Wert. Alle diese unterschiedlichen Eingabeobjekte besitzen eine von einer Basisklasse Eingabeobjekt geerbte Methode getvalue(), die den aktuellen Wert des Eingabeobjekts zurückliefert. Damit ist es leicht möglich, die äußere Erscheinung eines Programms ohne großen Aufwand zu ändern. Im Fenster sind verschiedene Möglichkeiten zur Werteingabe bei der Entwicklung einer grafischen Benutzeroberfläche skizziert: Radiobuttons, vertikale und horizontale Slider, Pop-Up-Menüs und die direkte Eingabe eines Werts. Eingabeobjekt Radio-Button Slider Textfeld Pop-Up vertikal horizontal Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 539

Vererbung - Syntax Syntax class Unterklasse : [ public private protected ] Basisklasse { Implementierung }; Ableitungsart public Die Zugriffsrechte der Basisklasse werden unverändert übernommen. Ableitungsart protected Aus dem Zugriffsrecht public der Basisklasse wird protected, die anderen Zugriffsrechte werden zu private. Zugriffsrecht protected bedeutet, dass nur die eigene und Unterklassen auf derart deklarierte Attribute und Methoden zugreifen können. Ableitungsart private Zugriffsrechte der Unterklasse sind grundsätzlich private. Das Zugriffsrecht private bedeutet, dass ausschließlich innerhalb einer Klasse auf derartige Komponenten zugegriffen werden kann, d.h. dass auf private Komponenten einer Superklasse in einer Unterklasse nicht zugegriffen werden kann (denn dafür gibts protected). Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 540

Konstruktoren & Destruktoren Beachte Konstruktoren, Destruktoren und der Zuweisungsoperator werden nicht vererbt. Konsequenz Konstruktoren und Destruktoren sollten auch in abgeleiteten Klassen implementiert werden, wobei passende Funktionalität der Superklasse genutzt werden kann. Konstruktorreihenfolge 1. Konstruktion der Superklasse 2. Konstruktion der Unterklasse. Destruktorreihenfolge 1. Destruktion der Unterklasse 2. Destruktion der Superklasse. Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 541

Methoden in Unterklassen Neue Methoden Eine Unterklasse kann gemäß ihrer Semantik um neue Methoden erweitert werden. Redefinition von Methoden Um spezielle Bedürfnisse der Unterklasse zu realisieren, können existierende Methoden auch umdefiniert werden. Dabei überdeckt die Redefinition jedoch nur die Methode der Basisklasse. Mit Hilfe des Scope-Operators :: kann explizit auch innerhalb von Unterklassen auf umdefinierte Methoden der Basisklasse zugegriffen werden. Syntax des Zugriffs auf Basisklassenmethoden Basisklasse :: Methode ( Argumentliste ) Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 542

Attribute in Unterklassen Neue Attribute Die Unterklasse kann gemäß ihrer Semantik um neue Attribute erweitert werden. Redefinition von Attributen Um spezielle Bedürfnisse der Unterklasse zu realisieren, können existierende Attribute auch umdefiniert werden. Eine Redefinition überdeckt jedoch nur das Attribut der Basisklasse. Mit Hilfe des Scope-Operators :: kann analog Methoden auch innerhalb von Unterklassen auf umdefinierte Attribute der Basisklasse zugegriffen werden. Verwendung Im Gegensatz zur Redefinition von Methoden sollte die Redefinition von Attributen vermieden werden! Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 543

Vererbung überladener Methoden Redefinition überladener Methoden Sobald in der Unterklasse eine überladene Methode aus der Basisklasse redefiniert wird, überdeckt diese Definition alle Varianten aus der Basisklasse. Konsequenz Alle überladenen Methoden der Basisklasse müssen bei Notwendigkeit einer Redefinition in der Unterklasse komplett redefiniert werden. class Super { public: void method(int) {... }; void method(float) {... }; void method(int, int) {... }; }; class Sub : public Super { public: void method(int) {... }; // überschreibt alle Überladungen }; Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 544

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