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

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

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Vererbung, Polymorphie

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

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Einstieg in die Informatik mit Java

Programmierung Nachklausurtutorium

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

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

Javakurs für Anfänger

Programmieren in Java

Programmieren in Java

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

Programmiertechnik Objektorientierung

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

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

Objektorientierte Programmierung III

Java für Bauingenieure

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

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

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 567

Programmieren in Java

Javakurs für Anfänger

Vorlesung 8. Sitzung Grundlegende Programmiertechniken

Java Vererbung. Inhalt

Vorlesung Datenstrukturen

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

Einführung in die Programmierung

Vererbung, Polymorphismus

Vererbung und Polymorphie

Praxis der Programmierung

Vererbung. Florian Adamsky, B. Sc. (PhD cand.) Softwareentwicklung im WS 2014/15.

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

Java Einführung Vererbung und Polymorphie. Kapitel 13

Abschnitt 12: Vererbung und Polymorphismus

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

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

Einführung in die Programmierung

Objektorientierte Programmierung. Kapitel 14: Interfaces

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

Vorkurs Informatik WiSe 15/16

Vererbung. Generalisierung und Spezialisierung Vererbung und Polymorphismus

Algorithmen und Datenstrukturen 07

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Vererbung

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

Vererbung und Polymorphie

Tafelübung 07 Algorithmen und Datenstrukturen

OOP und Angewandte Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Objektorientierte Programmierung OOP

Objektorientierte Programmierung und Klassen

Javakurs für Anfänger

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

Wiederholung. Klassenhierarchie:

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

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

4. Vererbung Die Klasse Object. Die Klasse Object

6. Globalübung (zu Übungsblatt 8)

12 Abstrakte Klassen, finale Klassen und Interfaces

Grundelemente objektorientierter Sprachen (1)

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einstieg in die Informatik mit Java

2. Vererbung und Kapselung

Grundelemente objektorientierter Sprachen (1)

Algorithmen und Datenstrukturen

Statische Methoden, Vererbung, Benutzereingabe

Teil 2: Weitere Aspekte der Objektorientierung

Programmiertechnik Vererbung & Polymorphismus für Fortgeschrittene

Programmierung und Angewandte Mathematik

Klassen und ihre Beziehungen III: Mehrfache Vererbung, Rollen, Schnittstellen und Pakete

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

Programmieren in Java

Einführung in die Programmiersprache Java II

Statische Methoden, Vererbung, Benutzereingabe

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

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

Programmierkurs Java

Grundelemente objektorientierter Sprachen (1)

Vererbung. Martin Wirsing. Ziele. Vererbung

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

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

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

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

Klassen und Konstruktoren in Java

01. Grundprinzipien der Vererbung

Java, OO und UML Fortsetzung

Statische Methoden, Vererbung, Benutzereingabe

Kapitel 4: Klassen und Unterklassen

Einführung in die Programmierung mit C++

Kapitel 2: OO Grundlagen

Begriffe 1 (Wiederholung)

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

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

Abstrakte Klassen und Interfaces

Transkript:

Vererbung 1

11.1 Motivation und Begriffsdefinitionen 11.2 Vorgehensweise und Implementierung 11.3 Arten von Vererbung 11.4 Konstruktoren 11.5 Abstrakte Klasse 11.6 Verschattung 11.7 Wurzelklasse Object 11.8 Zugriffsrechte und Sichtbarkeit 11.9 Schnittstelle 2

Menge ähnlicher, aber verschiedener Objekte Fußballfans Schuhefans Eigenschaften Name Alter Lieblingsverein Verhaltensweisen Schlafen Essen Fußball schauen Gemeinsamkeiten Gemeinsamkeiten Unterschiede Unterschiede Eigenschaften Name Alter Anzahl der Schuhpaare Verhaltensweisen Schlafen Essen Schuhe kaufen 3

Motivation Analyse auf Metaebene Analyse der beiden Gruppen Einige Unterschiede => Zusammenfassen in eine Klasse geht nicht! Viele Gemeinsamkeiten => Aufspalten in zwei getrennte Klassen bewirkt hohe Redundanz Wie werden derartige Sachverhalte programmiert? Möglichst wenig Redundanz Unterschiede deutlich machen 4

Motivation - Lösungsidee Lösungsidee Zentrale Definition der Gemeinsamkeiten (generalisieren allgemeine Klasse - Oberklasse) Spezialisierte Klasse (Unterklasse) ± Dokumentation der Unterschiede (zusätzliche Attribute und/oder Methoden) ± Gemeinsamkeiten geerbt von zentraler Definition (Methoden können überschrieben bzw. redefiniert werden) 5

Beispiel Lösungsidee Extrahieren gemeinsamer Merkmale Mensch Eigenschaften Name Alter Verhaltensweisen Schlafen Essen Eigenschaften Lieblingsverein Verhaltensweisen Fußball schauen Fußballfan Schuhefan Eigenschaften Anzahl d. Schuhpaare Verhaltensweisen Schuhe kaufen 6

Vererbung im UML-Klassendiagramm Mensch - name - alter schlafen() essen() Fußballfan Schuhefan - lieblingsverein - anzahlschuhpaare fussballschauen() schuhekaufen() 7

Bedeutung von Vererbung Grundidee Beschreibt Ähnlichkeit zwischen Klassen Spezialfall einer Beziehung zwischen Klassen ± Jedes Objekt der Unterklasse ist ein (is a) Objekt der Oberklasse Strukturiert Klassen in Hierarchie von Abstraktionsebenen Ermöglicht Definition einer neuen Klasse auf Basis bereits bestehender Klassen (Wiederverwendung!) Wesentlicher Mechanismus, der objektorientierte Sprachen von funktionalen/prozeduralen Sprachen unterscheidet! 8

Begriffe Mensch - name - alter schlafen() essen() Superklasse Oberklasse Elternklasse Generalisierung ist abgeleitet von erbt von spezialisiert ist übergeordnet zu vererbt an generalisiert Fußballfan - lieblingsverein fussballschauen() Schuhefan - anzahlschuhe schuhekaufen() Subklasse Unterklasse Kindklasse abgeleitete Klasse Spezialisierung 9

11.1 Motivation und Begriffsdefinitionen 11.2 Vorgehensweise und Implementierung 11.3 Arten von Vererbung 11.4 Konstruktoren 11.5 Abstrakte Klasse 11.6 Verschattung 11.7 Wurzelklasse Object 11.8 Zugriffsrechte und Sichtbarkeit 11.9 Schnittstelle 10

Vorgehensweise Zwei mögliche Vorgehensweisen: Bottom-up: Vom Speziellen zum Allgemeinen Top-down: Vom Allgemeinen zum Speziellen Wann nimmt man was? Bottom-up: Wenn Gemeinsamkeiten erst in teilfertiger Lösung auffallen Top-down: Wenn man schon vorab weiß, dass es Gemeinsamkeiten gibt 11

Vorgehensweise Bottom-up 1. Zunächst einzelne Klassen modellieren 2. Redundanzen feststellen 3. Gemeinsamkeiten auslagern in Oberklasse 4. Ursprüngliche Klassen von Oberklasse ableiten und "ausmisten" Mensch - name - alter schlafen() essen() Fußballfan - name - alter - lieblingsverein schlafen() essen() fussballschauen() Schuhefan - name - alter - anzahlschuhpaare schlafen() essen() schuhekaufen() 12

Vorgehensweise Top-down 1. Erst die Gemeinsamkeiten in zentraler Oberklasse definieren 2. Spezialisierende Klassen definieren, von Oberklasse ableiten 3. Dann die Spezifika der abgeleiteten Klassen definieren 4. Gegebenenfalls Zahl der abgeleiteten Klassen sukzessive erweitern Mensch - name - alter schlafen() essen() Fußballfan - lieblingsverein Schuhefan - anzahlschuhpaare fussballschauen() schuhekaufen() 13

Übung Vererbungsstruktur entwerfen Live Übung Bearbeiten Sie Aufgabe 1 des Blatts Live Übung Vererbung Sie haben 5 Minuten Zeit. 14

Vererbung in Java Unterklasse wird durch das Schlüsselwort extends nach dem Klassennamen und gefolgt von dem Namen der Oberklasse spezifiziert Jede Klasse kann genau eine Oberklasse besitzen Oberklasse weiß nicht welche Unterklassen zu ihr gehören Konstruktoren, Methoden oder Attribute können mit dem Schlüsselwort protected deklariert werden von allen Unterklassen und von allen Klassen innerhalb desselben Pakets kann darauf zugegriffen werden Achtung: Semantik von protected ist anders als in z.b. C++ 15

Sichtbarkeiten im Überblick Modifier Klasse Paket Unterklasse Welt public Ja Ja Ja Ja protected Ja Ja Ja Nein kein Attribut Ja Ja Nein Nein private Ja Nein Nein Nein http://docs.oracle.com/javase/tutorial/java/javaoo/accesscontrol.html Attribute in der Regel private außer guter Grund für protected oder public Methoden in der Regel public außer guter Grund für protected oder private 16

Implementierung Definition der Oberklasse public class Person { // Gemeinsame Eigenschaften aller Unterklassen private String name; private int age; } // Gemeinsame Funktionalität aller Unterklassen public String sleep() { return "sleep: Chrrrrr... chrrrr..."; } public String eat() { return "eat : Mmmh, lecker."; } 17

Implementierung Unterklasse definieren (1) public class Fussballfan extends Person { // Neues Attribut private String favoriteclub; } // Neue Funktionalität public String watchsoccergame() { } return "play : ja... Ja... TOOOOOOOR!!!"; 18

Implementierung Unterklasse definieren (2) public class Schuhefan extends Person { // Neues Attribut private int pairsofshoes; } // Neue Funktionalität public String buyshoes() { } pairsofshoes++; return "shop : DIE sind ja schick..., " + "Paar Nummer" + pairsofshoes; 19

Implementierung Hauptklasse definieren public class Main { public static void processperson(person person) { person.eat(); } public static void main(string[] args) { } } Fussballfan ff = new Fussballfan(); Schuhefan sf = new Schuhefan(); System.out.println("Das macht Fussballfan:"); ff.sleep(); ff.watchsoccergame(); processperson(ff); System.out.println(); System.out.println("Das macht Schuhefan:"); sf.sleep(); sf.buyshoes(); processperson(sf); System.out.println(); 20

Implementierung Ausgabe Ausgabe des Hauptprogramms Das macht Fussballfan: sleep: Chrrrrr... chrrrr... eat : Mmmmh, lecker. play : Ja... JAA... TOOOOOOOR!!! Das macht Schuhefan: sleep: Chrrrrr... chrrrr... eat : Mmmmh, lecker. shop : DIE sind ja schick... 21

Übung Vererbung in Java Live Übung Bearbeiten Sie Aufgabe 2 des Blatts Live Übung Vererbung Sie haben 5 Minuten Zeit. 22

11.1 Motivation und Begriffsdefinitionen 11.2 Vorgehensweise und Implementierung 11.3 Arten von Vererbung 11.4 Konstruktoren 11.5 Abstrakte Klasse 11.6 Verschattung 11.7 Wurzelklasse Object 11.8 Zugriffsrechte und Sichtbarkeit 11.9 Schnittstelle 23

Arten von Vererbung Einfachvererbung Unterklasse erbt von genau einer Oberklasse Mehrfachvererbung Unterklasse erbt von mehr als einer Oberklasse Einfachvererbung Mehrfachvererbung Oberklasse Oberklasse 1... Oberklasse n In Java ist Erben von mehreren Klassen nicht möglich! Unterklasse Unterklasse 24

Einfachvererbung über mehrere Stufen Lebewesen Tier Pflanze Gliederfüßer... Wirbeltier Fisch... Säugetier... Vogel Mensch...... 25

Einfach- und Mehrfachvererbung Einfachvererbung Amphibienfahrzeug Landfahrzeug Wasserfahrzeug Amphibienfahrzeug Mehrfachvererbung 26

Was wird vererbt? Unterklasse erbt von Oberklasse die Operationen (das Verhalten) die Attribute (die möglichen Zustände) die Semantik! (d.h. anstelle eines Objekts der Oberklasse kann immer auch ein Objekt einer beliebigen Unterklasse verwendet werden! => Substitutionsprinzip) Beispiele in Java: Person p = new Man(); p = new Woman(); 27

Syntaktische Vererbung Mensch Instanzen von M1 M3 M2 M4 M5 erbt von Frau Instanzen von M6 F1 M7 F2 M8 F3 28

Semantische Vererbung Mensch Instanzen von M1 M3 M2 M4 M5 erbt von Mitglied von (member of; Klassenextension) M6 M7 M8 Frau Instanzen von F1 F2 F3 29

11.1 Motivation und Begriffsdefinitionen 11.2 Vorgehensweise und Implementierung 11.3 Arten von Vererbung 11.4 Konstruktoren 11.5 Abstrakte Klasse 11.6 Verschattung 11.7 Wurzelklasse Object 11.8 Zugriffsrechte und Sichtbarkeit 11.9 Schnittstelle 30

Konstruktoren Folgerungen aus semantischer Vererbung: In jedem Objekt der Unterklasse steckt ein Objekt der Oberklasse Wird initialisiert über Konstruktor der Oberklasse ± Explizit Über Aufruf des Konstruktor der Oberklasse aus dem Konstruktor der Unterklasse heraus super() bzw. super(name, age) Muss erste Anweisung im Konstruktor der Unterklasse sein! ± Implizit Wenn Konstruktor der Oberklasse nicht explizit aufgerufen wird Implizit eingefügter Aufruf des Standardkonstruktors der Oberklasse Gleichbedeutend mit super() in der ersten Zeile des Konstruktors der Unterklasse 31

Konstruktoren mit super() public Person (String name, int age) { } this.name = name; this.age = age; public Fussballfan (String name, int age, String favoriteclub) { Mensch - name - alter Mensch(String, int) schlafen() essen() } super (name, age); this.favoriteclub = favoriteclub; public Schuhefan (String name, int age) { } super(name, age); pairsofshoes = 0; Fußballfan - lieblingsverein Mann(String,int,bool.) fussballgucken() Schuhefan - anzahlschuhe Frau(String, int) schuhekaufen() 32

Konstruktoren mit this() Zur Erinnerung Aufruf eines anderen Konstruktor der gleichen Klasse: this() Muss als erste Anweisung im Konstruktorrumpf stehen Nützlich, um Redundanzen in den Konstruktoren zu vermeiden Beispiel: public Schuhefan (String name, int pairsofshoes) { this.name = name; this.pairsofshoes = pairsofshoes; } public Schuhefan (String name) { this (name, 0); } 33

Übung Konstruktoren Live Übung Bearbeiten Sie Aufgabe 3 des Blatts Live Übung Vererbung Sie haben 5 Minuten Zeit. 34