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

Ähnliche Dokumente
11 Objektorientierte Programmierung, Teil 2

Einführung in die Programmierung I. 10. Klassen und Objekte. Stefan Zimmer

Objektorientierte Programmierung Studiengang Medieninformatik

Programmierung Nachklausurtutorium

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

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

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

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

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

Begriffe 1 (Wiederholung)

Javakurs für Anfänger

Javakurs für Anfänger

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

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

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

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

Fragen zur OOP in Java

Arten von Klassen-Beziehungen

Algorithmen und Datenstrukturen 07

Klassen und Konstruktoren in Java

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

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots. falls Zeit: Scheduling 8.11.

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Wiederholung zur Vorlesung Programmieren

9. Vererbung und Polymorphie. Informatik Vererbung und Polymorphie 1

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

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots IT I - VO 5 1

Vererbung, Polymorphismus

IT I: Heute. Nachbetrachtung Wissensüberprüfung. Einführung Vererbung. Roboter in becker.robots. Filialenbelieferung 4.11.

Exceptions und Vererbung

IT I: Heute. Nachbetrachtung Wissensüberprüfungen. Einführung Vererbung. Roboter in becker.robots IT I - VO 5 1

Tafelübung 07 Algorithmen und Datenstrukturen

Programmiertechnik Klassenvariablen & Instantiierung

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

Info B VL 8: Abstrakte Klassen & Interfaces

Einstieg in die Informatik mit Java

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Programmierkurs Java

Programmieren 1 09 Vererbung und Polymorphie

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

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

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Schnittstellen, Vererbung & Polymorphismus für Fortgeschrittene

C++ - Objektorientierte Programmierung Vererbung

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

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

Java für Bauingenieure

Statische Methoden, Vererbung, Benutzereingabe

Programmierpraktikum 3D Computer Grafik

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

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

Teil 2: OOP und JAVA (Vorlesung 11)

Vererbung und Polymorphie

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

Statische Methoden, Vererbung, Benutzereingabe

Vorkurs Informatik WiSe 15/16

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

7. Übung Informatik II - Objektorientierte Programmierung

Programmiertechnik Vererbung & Polymorphismus für Fortgeschrittene

Vererbung, Polymorphie

Ein Vortrag im Rahmen des Wahlpflichtmoduls Fortgeschrittene Programmierung mit JAVA

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

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

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

Java Einführung Vererbung und Polymorphie. Kapitel 13

Beispiel: (Vererbung) Vererbung. Begriffsklärung: (Vererbung) Feststellungen: Vererben von Attributen: Hinzufügen von Attributen:

Java Vererbung. Inhalt

Javakurs für Anfänger

Objektorientierte Programmierung. Kapitel 14: Interfaces

Vererbung. Oberklassen und Unterklassen

3 Objektorientierte Konzepte in Java

II.4.4 Exceptions - 1 -

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

Programmiertechnik Objektorientierung

Vorlesung 8. Sitzung Grundlegende Programmiertechniken

2. Vererbung und Kapselung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Objektorientierung

Einführung in die Systemprogrammierung

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II

Kapitel 6. Vererbung

Einführung in die Programmierung

Statische Methoden, Vererbung, Benutzereingabe

Kapitel 6. Vererbung

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

Programmieren in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objekt-orientierte Programmierung

Wiederholung. Klassenhierarchie:

Transkript:

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

Programmcode wiederverwenden Wenn wir einige Klassen geschrieben haben, werden wir dabei Teile davon öfters hingeschrieben haben Das geht mit copy & paste zwar schnell, ist aber unschön: Das Programm wird unübersichtlich Wenn wir im gemeinsamen Teil was ändern wollen, wird's richtig ärgerlich Die Weitergabe an andere Leute ist auf diese Weise auch unelegant Wir brauchen einen Mechanismus der Sprache, der die Wiederverwendung unterstützt! 2

Programmcode wiederverwenden (2) Wenn wir eine neue Klasse Y schreiben, würden wir vielleicht gerne sagen: Die funktioniert wie Klasse X, mit folgenden Änderungen:... In dieser Allgemeinheit lässt die objektorientierte Programmierung das nicht zu, sondern nur in der Form der Spezialisierung: Y ist eine Ausprägung von X mit folgenden zusätzlichen Eigenschaften:... Wichtige Frage beim Entwurf: Kann ein Objekt der Klasse Y überall da auftreten, wo ein Objekt der Klasse X erwartet wird? 3

Vererbung Diese Spezialisierung nennt man Vererbung Man sagt: Die Klasse Y erbt von der Klasse X X ist Oberklasse von Y Y ist Unterklasse von X (von X abgeleitet) Streng genommen: direkte Ober-/Unterklasse, weil X seinerseits Spezialisierung einer anderen Klasse sein kann, die dann auch Oberklasse von Y ist, aber keine direkte Eine Klasse kann viele, auch direkte, Unterklassen haben, aber (in Java) nur eine Oberklasse 4

Beispiel: algebraische Strukturen Ein Beispiel für eine Spezialisierungshierarchie: Halbgruppe, Monoid, Gruppe, Ring, Körper (letztere beiden bezüglich der Addition) Die Definition ging ja irgendwie so wie vorhin: Ein Y ist ein X mit folgenden weiteren Eigenschaften:... Überall, wo z.b. über eine Gruppe geredet wird, kann ich einen Ring (mit seiner Addition) einsetzen 5

Realisierung in Java (1) Die Umsetzung in Java ist nun geradlinig Als Beispiel werden wir die folgende Klasse erweitern: public class X { int a; X(int a0) { a=a0; X() { this(0); void drucke() { drucke(""); void drucke(string s) { System.out.println(s + a); 6

Realisierung in Java (2) Nun soll eine Klasse Y von X erben. Das geht durch die Angabe extends X hinter dem Klassennamen: public class Y extends X { Im Deklarationsrumpf werden wir gleich reinschreiben, was Y von X unterscheidet vorerst nichts Nebenbei: wenn man kein extends angibt, wird implizit von java.lang.object geerbt, das der Urahn aller Java-Klassen ist 7

Vererbung: Instanzvariablen Da Y alles können soll, was X kann, folgt: Alle in X deklarierten (und nach außen sichtbaren) Instanzvariablen gibt es auch in Y Es können beliebig weitere Instanzvariablen hinzugefügt werden Nutzen wir das gleich für den Konstruktor aus: public class Y extends X { int b; Y(int a0, int b0) { a = a0; // geerbt b = b0; 8

Vererbung: Instanzmethoden Für die Instanzmethoden gilt zunächst dasselbe wie für die Instanzvariablen: Y erbt alle (nach außen sichtbaren) von X und kann beliebig neue deklarieren. public class Y extends X { int b; Y(int a0, int b0) { a=a0; b=b0; void blub() { a=1234; Nun können wir etwa schreiben: Y y1 = new Y(12, 34); y1.drucke(); Die Ausgabe (12) befriedigt aber vermutlich nicht 9

Instanzmethoden überschreiben (1) Eine Unterklasse kann eine Instanzmethode der Oberklasse neu deklarieren (mit gleicher Parameterliste): public class Y extends X { int b; Y(int a0, int b0) { a=a0; b=b0; void drucke(string s) { System.out.println(s + a); System.out.println(s + b); Nun gilt für Objekte der Klasse Y diese Deklaration 10

Instanzmethoden überschreiben (2) Die folgenden Anweisungen geben also a und b aus: Y y1 = new Y(12,34); y1.drucke("y1: "); Und das gilt auch dann, wenn ein Objekt der Klasse Y als Objekt der Klasse X auftritt: X x1 = y1; x1.drucke("x1: "); gibt ebenfalls 12 und 34 aus! 11

Vererbung: super (1) Gerade beim Überschreiben von Instanzmethoden ist es nützlich, die in der Oberklasse deklarierte zu verwenden (Ein Y tut z.b. erst das, was ein X getan hätte und dann noch mehr). Dazu gibt es das Schlüsselwort super, mit dem man auf die Methoden der (direkten) Oberklasse zugreifen kann. Es wird dabei wie eine Objektreferenz verwendet und steht dabei für das Objekt selber. 12

Vererbung: super (2) Damit bekommt unser Y nun folgende Gestalt: public class Y extends X { int b; Y(int a0, int b0) { a=a0; b=b0; void drucke(string s) { super.drucke(s); //war: System.out.println(s + a); System.out.println(s + b); 13

Überladen vs. Überschreiben (1) Ähnliche Worte und auch die Sachverhalte laden zum Verwechseln ein. In unserm Beispiel kommt beides vor Nehmen wir ein Objekt X x1 = new X(12); Nun gibt es zwei Methoden drucke: x1.drucke(); und x1.drucke("x1: "); Das ist Überladung Welche der beiden Methoden genommen wird, wird beim Übersetzen anhand der Parameterliste festgestellt 14

Überladen vs. Überschreiben (2) Die Klasse Y überschreibt nun die Methode mit Parameter, so dass bei x1 = new Y(12, 34); x1.drucke("x1: "); die Deklaration von Y zum Zug kommt. Diese Entscheidung kann nicht beim Übersetzen getroffen werden (da wissen wir noch nichts über den Inhalt von x1), das passiert also während der Ausführung das nennt man dynamische Bindung (des Bezeichners an die Methode) Und nun überlegen, was folgender Aufruf bewirkt: x1.drucke(); 15

Konstruktoren und Vererbung Konstruktoren werden nicht vererbt! Es ist möglich, als erste Anweisung eines Konstruktors mittels super(parameter); einen Konstruktor der (direkten) Oberklasse aufzurufen Tut man das nicht, wird implizit der parameterlose Oberklassenkonstruktor aufgerufen (jede Objekterzeugung kommt also beim Konstruktor von Object vorbei) wenn es den nicht gibt, ist das ein Fehler. Daher sollte man immer einen parameterlosen Konstruktor schreiben, auch wenn der dasselbe tut wie der implizite, wenn es gar keine Konstruktoren gibt: nichts. 16

Was fehlt? Nicht behandelt haben wir die Behandlung von Ausnahmen (Schlüsselwörter try, catch, finally und throws) bevor man ein ernsthaftes Programm schreibt, sollte man das noch lernen Auch nicht behandelt, aber im aktiven Wortschatz verzichtbar sind die Schnittstellen (interface, implements), Zusicherungen (assert) und einige kleinere Dinge Und natürlich die ganzen schönen Java-Bibliotheken wir wissen aber nun genug über Java, um das auf eigene Faust zu erforschen 17