Vererbung Was versteht man unter dem Begriff Vererbung?

Ähnliche Dokumente
Vererbung. Was versteht man unter dem Begriff Vererbung?

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.

Vererbung, Polymorphie

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

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

Programmieren in Java

Programmieren in Java

Einstieg in die Informatik mit Java

Praxis der Programmierung

Java Vererbung. Inhalt

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

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

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Einstieg in die Informatik mit Java

Kapitel 8 Vererbung. Korbinian Molitorisz. IPD Tichy Lehrstuhl für Programmiersysteme

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

Programmierkurs C++ Abstrakte Klassen und Methoden

Einführung in die Programmierung mit C++

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

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

Vererbung und Polymorphie

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Prof. W. Henrich Seite 1

Programmieren in Java

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

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

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

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

Einstieg in die Informatik mit Java

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

Java für Bauingenieure

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

Universität Karlsruhe (TH)

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

Objektorientierte Programmierung Studiengang Medieninformatik

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II

Vererbung & Schnittstellen in C#

Implementieren von Klassen

Vorlesung Datenstrukturen

Programmierkurs Java

Einführung in die Programmiersprache Java II

Abstrakte Basisklassen

3 VERERBUNG ALLGEMEINES

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

Polymorphie. Überschreiben. Definition Eigene Methoden überschreiben Beispiele. Dr. Beatrice Amrhein

Abstrakte Basisklassen

Klassen und Konstruktoren in Java

Programmierpraktikum 3D Computer Grafik

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

Javakurs für Anfänger

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Programmierung Nachklausurtutorium

Th. Letschert OOP 2 2. Geheimnisprinzip und Sichtbarkeitsbeziehungen

Programmieren in C++ Vererbung

Untertypen, Vererbung, Sichtbarkeit A01 OOP. Untertypen, Vererbung, Sichtbarkeit

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

Vererbung. Prof. Dr.-Ing. Thomas Schwotzer

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Programmieren in Java

Einführung in die Programmierung I. 11. Vererbung. Stefan Zimmer

Exceptions und Vererbung

Einstieg in die Informatik mit Java

Programmierung und Angewandte Mathematik

Objektorientierte Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

Vererbung, Polymorphismus

Einführung in die Programmierung

Abstrakte Klassen und Interfaces

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Übersicht. Bisherige Verwendung von Klassen Vererbung. Zeiger auf Objekte (abgeleiteter) Klassen Virtuelle Funktionen Konstruktoren/Destruktoren

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

Grundlagen der Informatik

Vorkurs Informatik WiSe 15/16

Fragen zur OOP in Java

Faustregeln zu Zusicherungen

Programmieren 1 09 Vererbung und Polymorphie

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Programmieren 2 Java Überblick

Vererbung. Definition Felder Konstruktor Methoden Beispiel. Dr. Beatrice Amrhein

Einführung in die Programmiersprache Java II

Java I Vorlesung Vererbung und Sichtbarkeit

Javakurs für Anfänger

Geschachtelte Klassen

Grundkurs C++ IDE Klassenhierarchien

Objektorientierte Programmierung mite**

Vererbung P rogram m ieren 2 F örster/r iedham m er K apitel 11: V ererbung 1

Praktikum. SEP: Java-Programmierung WS 2018/19. Modularisierung. Thomas Lemberger und Martin Spießl

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

OOP. Tagesprogramm. Beziehungen zwischen Typen Vererbung Sichtbarkeit

Delegaten. d. h. eine Tätigkeitsanforderung wird weitergeleitet

Ableiten konkreter Klassen

Grundkurs C++ IDE Klassenhierarchien

Transkript:

Was versteht man unter dem Begriff Vererbung? Elternkonstrukt - Datenelemente - Methoden o Deklaration o Definition Kindkonstrukt... Main... Elternkonstrukt b = new Kindkonstrukt() b.fn() Komponenten & Frameworks Seite 1

Vererbungsvarianten - Schnittstellenvererbung - Deklaration wird vererbt, so dass Kindkonstrukt Definition vornehmen muss - Implementierungsvererbung - Deklaration und Definiton wird vererbt, so dass Kindkonstrukt die Methode (Implementierung) direkt verwenden kann oder Implementierung überschreiben kann - Substituierbarkeit - Verwendung eines Kindobjektes im Sinne des Basiskonstruktes (Kovarianz) - Bsp.: Basiskonstrukt b = new Kindkonstrukt() - Polymorphismus Komponenten & Frameworks Seite 2

Vererbung und Wiederverwendung - Implementierungsvererbung Durch Bereitstellung einer Implementierung im Basiskonstrukt kann diese im abgeleiteten Konstrukt wieder verwendet und bei Bedarf sogar angepasst werden. Der Nachteil ist hierbei die enge Kopplung der beiden Konstrukte. Insbesondere führen nachträgliche Änderungen an der Implementierung des Basiskonstruktes zu Problemen. - Schnittstellenvererbung und Substituierbarkeit - Wiederverwendbarkeit von Abläufen und Architekturen - Programmieren auf Schnittstellen hin - Plug-in-Architektur (Bsp. Eclipse) Komponenten & Frameworks Seite 3

Alternativen zur Implementierungsvererbung class A public void fn() Wie kann die Methode fn() (wieder-) verwendet werden? - Aufruf nur über Instanz möglich (Verwendung) - Vererbung oder Objektkomposition class A public void fn() class B public void fn() class B A a = new A(). a.fn() Komponenten & Frameworks Seite 4

Problem der zerbrechlichen Basisklasse in Java class B_alt{public void fn(){system.out.println("b");}} class B_neu{public void fn(){this.delete(); } public void delete(){system.out.println("delete");} } //class C extends B_alt{ class C extends B_neu{ public void delete(){system.out.println("loesche Platte");} } public class A { public static void main(string[] args) { C c = new C(); c.fn();} } Komponenten & Frameworks Seite 5

Zerbrechliche Basisklasse @Override (Java!) - Annotation @Override - kann bei Methoden in abgeleiteter Klasse verwendet werden - bedeutet, dass die annotierte Methode eine geerbte Methode überschreibt - Fehlermeldung falls Methode mit gleicher Signatur nicht in Basisklasse existiert - Garantiert, dass Entwickler wirklich Methoden überschreiben und nicht aus Versehen Methoden mit falschen Parametern überladen - Workaround für Problem der zerbrechlichen Basisklasse - falls Basiklasse nachträglich modifiziert und @Override in abgeleiteter Klasse nicht gesetzt => Hinweis auf mögliches Problem per Compilerwarnung Komponenten & Frameworks Seite 6

Vererbungsvarianten in C# - Methoden sind - virtuell - abstrakt - nicht virtuell - Konstrukte - Klasse (keine Mehrfachvererbung) - Struktur (nur Vererbung von Interfaces) - Abstrakte Basisklasse (keine Mehrfachvererbung) - Interface (kann von Interface erben) - Ableitung durch Benennung der Basiskonstrukte - Lösung des Problems der zerbrechlichen Basisklasse - neue Schlüsselworte: new (verdecken) und override (überschreiben) Komponenten & Frameworks Seite 7

Vererbung - Objekte der abgeleiteten Klasse haben (erben) alle Elemente der Basisklasse - Abgeleitete Klasse hat keinen Zugriff auf private Elemente der Basisklasse (siehe protected) - keine Mehrfachvererbung (keine reine Implementierungsvererbung d. h. private-, protected- Ableitung wie in C++) - nicht vererbt werden: Konstruktoren - Syntax: class Abgeleitet : Basis {Klassenkoerper} - Substituierbarkeit Instanzen der abgeleiteten Klasse können an allen Stellen verwendet werden, an denen eine Instanz der Basisklasse erwartet wird jedoch nicht umgekehrt Komponenten & Frameworks Seite 8

Polymorphismus Vererbung class GeometrischesObjekt { public virtual void zeichnen() {Console.WriteLine("G");} } class Dreieck : GeometrischesObjekt { public override void zeichnen() // new? {Console.WriteLine("D");} }... GeometrischesObjekt g1 = new Dreieck(); g1.zeichnen(); Komponenten & Frameworks Seite 9

Virtuelle Funktionen - Kennzeichnung einer Methode mit dem Schlüsselwort virtual macht diese zu einer polymorphen Methode (späte Bindung) - override (= aufheben, übersteuern) kennzeichnet bewusstes Überschreiben einer virtuellen Methode - wird eine virtuelle Methode in der abgeleiteten Klasse nicht mit override gekennzeichnet, so wird beim Zugriff über Basisklassenreferenzen die Basisklassenmethode verwendet(entspricht new) - wird in abgeleiteter Klasse eine Methode mit gleicher Signatur definiert erzeugt der Compiler eine Warnung falls weder new noch override verwendet wurde - virtuelle Funktion ist immer die Wurzel der virtuellen Weitergabe Komponenten & Frameworks Seite 10

Verdecken von Methoden - werden in abgeleiteter Klasse Methoden mit gleicher Schnittstelle wie in Basisklasse mit new definiert, so verdecken diese die Basisklassenmethode - Die Markierung mit new verhindert eine versehentliche Neudefinition (kein polymorpher Aufruf) Überschreiben (übersteuern) von Methoden - werden in abgeleiteter Klasse Methoden mit gleicher Schnittstelle wie in Basisklasse mit override definiert, so überschreiben diese die Basisklassenmethode (muss virtuell in Basisklasse sein) => Polymorphismus wird wirksam Komponenten & Frameworks Seite 11

Abstrakte Klassen - Abstrakte Klassen ermöglichen die Deklaration abstrakter Methoden, können auch nicht abstrakte Methoden haben - abstrakte Methoden dürfen keinen Funktionskörper haben - Syntax-Beispiel: abstract public void fn(); - abstrakte Methoden müssen in allen abgeleiteten Klassen mit Schlüsselwort override (da sonst verdeckt) definiert werden - abstrakte Methoden sind automatisch virtuell - von abstrakter Klasse kann nicht direkt eine Instanz erstellt werden - falls eine Methode abstrakt ist, muss auch die Klasse als abstrakt deklariert sein Komponenten & Frameworks Seite 12

Zugriffsmodifikatoren - Regeln die Zugriffsrechte auf Klassen und Strukturen sowie auf deren Elemente - Zugriffsmodifikatoren für Elemente - public = keine Beschränkung - private = Zugriff nur über Methoden derselben Klasse erlaubt - protected = wie private jedoch zusätzlich Methoden der abgeleiteten Klasse - internal = Zugriff über alle Methoden der Assembly - protected internal = protected ODER internal - Defaultwert: private - Das Zugriffsrecht ist Klassen- und nicht Instanzbezogen - werden für jedes Element angegeben (Bsp.: public int i; private void fn(){}) Komponenten & Frameworks Seite 13

Zugriffsmodifikatoren auf Assemblyebene - regeln den Zugriff auf Klassen und Strukturen aus Sicht einer Assembly - Zugriffsmodifikatoren auf Assemblyebene - public = keine Beschränkung für andere Assemblies - internal = Zugriff ist nur innerhalb derselben Assembly erlaubt (Anm.: Interface kann Zugriffsschutz internal haben) - Defaultwert: internal Komponenten & Frameworks Seite 14