Vererbung, Polymorphismus

Ähnliche Dokumente
Vererbung, Polymorphismus

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einstieg in die Informatik mit Java

Kurs OPR. Objektorientierte Programmierung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Javakurs für Anfänger

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

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

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

Programmieren in Java

3 Objektorientierte Konzepte in Java

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

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

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

Einführung in die Programmierung

Java I Vorlesung Vererbung und Sichtbarkeit

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

Vererbung & Schnittstellen in C#

Algorithmen und Datenstrukturen 07

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

3 Objektorientierte Konzepte in Java

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

Interfaces und Vererbung

Repetitorium Informatik (Java)

Javakurs für Anfänger

Java, OO und UML Fortsetzung

Java Vererbung. Inhalt

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

13. Tutorium zu Programmieren

11.3 Virtuelle Methoden

Programmieren in Java

Überschreiben von Methoden

Faustregeln zu Zusicherungen

5.6 Vererbung. Vererbung

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

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Teil 2: OOP und JAVA (Vorlesung 11)

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

Einstieg in die Informatik mit Java

Vererbung. Martin Wirsing. Ziele. Vererbung

Einführung in die. objektorientierte Programmierung

3. Konzepte der objektorientierten Programmierung

SWE1 / Übung 9 ( )

Vererbung. Was versteht man unter dem Begriff Vererbung?

Klassenbeziehungen & Vererbung

Einführung in C++ Vererbung und Polymorphismus

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

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

Algorithmen und Datenstrukturen

Java I Vorlesung 6 Referenz-Datentypen

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

Typumwandlungen bei Referenztypen

Repetitorium Informatik (Java)

Präsentation Interfaces

> Vererbung, Die Austauschbarkeit

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

Probeklausur: Programmierung WS04/05

Java für Computerlinguisten

Objektorientierte Programmierung mit Java. Grundlagen Übersicht. Programmiersprachen

Java Einführung Methoden in Klassen

Javakurs 2013 Objektorientierung

Java Einführung Klassendefinitionen

Theorie zu Übung 8 Implementierung in Java

Programmieren I. Kapitel 8. Vererbung

Algorithmen und Programmierung II

Klassen mit Instanzmethoden

1 Polymorphie (Vielgestaltigkeit)

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

Angewandte Mathematik und Programmierung

5. Abstrakte Klassen

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Vorlesung Datenstrukturen

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Java Kurs für Anfänger Einheit 5 Methoden

4 Vererbung, Polymorphie

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Abschnitt 9: Schnittstellen: Interfaces

Wiederholung zur Vorlesung Programmieren

Objektorientierte Programmierung

Objektorientierte Programmierung OOP

7 Vererbung. Modul Programmieren mit C++ Kapitel Vererbung

Grundlagen der Informatik Objektorientierte Software-Entwicklung

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

Java: Vererbung. Teil 3: super()

Probeklausur: Programmierung WS04/05

Transkript:

Vererbung, Polymorphismus INE2 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1

Um was geht es? Automobilbau Firma produziert Limousine Kunde möchte Kombi Wielösen? Möglichkeiten Neudesign von Grund auf möglichst viel übernehmen Limusine ist schon modular entwickelt - Umwandlung zu Kombi einfach 2

... um was geht es? Lösung Autokonzern entwickelt Grundplattform Auf Plattform verschiedene Marken und Modelle Individualisierung unterschiedliche Ausrüstung Erweiterungen unterschiedliche Motorisierung Anpassungen etc. Vorteile Enwicklungskosten besser amortisieren neue Modelle schneller marktreif 3

... um was geht es? Ziele Software-Entwicklung möglichst aus bestehenden Bausteinen (Klassen) aufbauen bei Bedarf Bausteine an spezifische Anforderungen anpassen Anpassen von Software modifizieren erweitern Lösung1 Anpassenin Quelle oft schwierig: Quelle umfangreich, nicht verfügbar, Einfluss auf bestehende Anwendungen, etc. Lösung2 OOP verwendete Software-Bausteine belassen wie sie sind Ergänzungen und Änderungen durch Vererbung und Erweiterung 4

... um was geht es? Objektorientierte Programmierung ermöglicht Anpassung von Quellen ohne Quellen zu haben Open-Closed Prinzip Software-Einheiten - offen für Erweiterungen - geschlossen für Modifikationen bestehende Bausteine nicht verändern Modifikation der Funktionalität über Erweiterung OOP Mechanismus für Erweiterung und Anpassung Vererbung 5

Lernziele Siekönnen erklären um was es bei der Vererbung geht Vererbung in einfachen Applikationen anwenden die Begriffe "übeschreiben" und "überladen" erklären und diskutieren für die Vererbung wichtige Zugriffsmodifikatoren aufzählen und diskutieren die Klassenhierarchie und Casting erklären und richtig anwenden erklären, wie Konstruktoren in der Klassenhierarchie aufgerufen werden bzw. aufgerufen werden müssen "final" im Zusammenhang mit Vererbung erklären und anwenden den Begriff "Polymorphismus" erklären 6

Inhalt Vererbung: Erweiterung/ Anpassung Zugriffsmodifikatoren Vererbungshierarchie Konstruktoren Finale Klassen, Methoden und Attribute Polymorphismus 7

Entwurfsgrundsatz Vererbung nur verwenden, wenn "ist ein"-beziehung vorhanden Beispiel - i.o. Billard-Kugel ist eine Kugel - aber Billard-Kugel ist kein Ballon 8

Vererbung Erweiterung Zwei Klassen: Kugel und Ballon Kugel fixer Radius Ballon gleich wie Kugel aber veränderbarer Radius Klasse Ballon erweitert Klasse Kugel Klasse Ballon ist von Klasse Kugel abgeleitet Terminologie Klasse Kugel Oberklasse(superclass) von Klasse Ballon Klasse Ballon Unterklasse(subclass) von Klasse Kugel Kugel superclass, Oberklasse, Basisklasse Zeichen für Vererbung Ballon subclass, Unterklasse, abgeleitete Klasse 9

Vererbung in Java: extends KlasseBallonerbtvon Kugel public class Kugel { protected int x, y, r = 10; public Kugel(int x, int y) { this.x = x; this.y = y; public void draw(graphics g) { g.filloval(...); public class Ballon extends Kugel { public Ballon(int x, int y) {... public void changeradius(int deltar) { r += deltar; 10

Vererbung Erweiterung Klasse Ballon erbt von Klasse Kugel Attribute (Instanz- und Klassenvariablen) Methoden (Operationen) Attribute und Methoden von Klasse Kugel - in Klasse Ballon zugreifbar Java Einfachvererbung es kann nur von einer Klasse geerbt werden C++ unterstützt Mehrfachvererbung Kugel Kugel Ballon Methoden Ballon 11

... Vererbung Erweiterung Unterklasse erhält keine Kopie der Variablen und Methoden der Oberklasse erhält Zugriff auf Variablen und Methoden der Oberklasse kann zusätzliche Instanzvariablen und Methoden deklarieren Achtung - jedes Objekte besitzt eine eigene Kopien der Instanzvariablen von Ober- und Unterklasse Allgemeine Deklaration einer Unterklasse class Subclass extends Superclass { Instanzvariablen-Deklaration Konstruktor-Deklarationen Methoden-Deklarationen 12

Vererbung Anpassung Zwei Klassen: Kugel und BillardKugel Kugel keine "Dekoration" BillardKugel gleich wie Kugel aber mit "Zahl" angezeigt - Methode draw() anpassen Methode draw() wird überschrieben draw() gleiche Signatur in Unterklasse wie in Oberklasse Kugel Kugel BillardKugel Methode BillardKugel 13

... Vererbung Anpassung Klasse BillardKugel überschreibt draw() public class Kugel { protected int x, y, r = 10; public Kugel(int x, int y) { this.x = x; this.y = y; public void draw(graphics g) { g.filloval(...); 14 public class BillardKugel extends Kugel { private int number; public BillardKugel(int x, int y, int n) {... number = n; @Override public void draw(graphic g) { g.filloval(...); g.drawstring(...);

Überschreiben von Methoden Methode in Unterklasse gleiche Signatur wie in Oberklasse Methode in Oberklasse wird überschrieben - d.h. Methode aus Unterklasse wird ausgeführt Ursprüngliche Methode in Oberklasse kann mit Objektname super aufgerufen werden - super aktuelles Objekt, aber als Objekt der Oberklasse interpretiert Beispiel 15 @Override public void draw(graphic g) { super.draw(g); // statt g.filloval(...); g.drawstring(...);

... Überschreiben von Methoden Vorsicht falls Signaturen nicht gleich Methode wird überladen in Unterklasse existieren nun beide Methoden Merke Überladen (overloading)!= Überschreiben (overriding) 16

Überschreiben von Attributen Überschreiben von Attributen Klasse Instanzvariable mit gleichem Namen wie in Oberklasse Instanzvariable aus Oberklasse in Unterklasse nicht mehr sichtbar - wird shadowing (Überschatten) genannt Möglichst vermeiden! führt oft zu Problemen 17

Zugriffsmodifikator protected Methoden/Instanzvariablen mit protected sind in allen Unterklassen sichtbar Übersicht Modifikator gleiche Klasse Unterklasse andere Klasse private ja nein nein protected ja ja nein public ja ja ja Grundsatz minimal mögliche/sinnvolle Sichtbarkeit wählen 18

Klassen-Vererbungshierarchie Vererbungs-Hierarchie Klasse ohne explizite Oberklasse - erbt implizit von Object jede Unterklasse kann erweitert werden baumartige Hierachie von Unterklassen sogenanntes Klassendiagramm Beispiel UML-Klassendiagramm 1) der Klasse Kugel 19 1) UML: unified modelling language

Casting up In Klassenhierarchie eine Referenz nach oben "casting up" "safe casting" unproblematisch Ballon meinballon = new Ballon(); Kugel meinekugel = meinballon; meinekugel.changeradius(...); meinballon meinekugel Objekt vom Typ Ballon 20

Casting down In Klassenhierarchie eine Referenz nach unten "casting down" unsafe casting expliziter Typecast notwendig Kugel meinekugel = new Ballon(); Ballon meinballon = (Ballon)meineKugel; Achtung: - meinekugel muss Ballon-Objekt sein - andernfalls ClassCastException meinekugel meinballon 21 Objekt vom Typ Ballon

Die Oberklasse Object JedeKlassein Java erbtvon Object automatisch und implizit Object Kugel Zwei Methoden in allen Subklassen verfügbar // Rerturns string representation of object String tostring(); // Indicates whether some other object is "equal to" // this one boolean equals(object obj); 22

Methoden aus Oberklasse Methoden aus Oberklasse können wie eigene Methoden aufgerufen werden müssen protected oder public sein 23

Konstruktoren Erzeugen eines Objekts entsprechender Konstruktor wird ausgeführt es können mehrere Konstruktoren vorhanden sein Neu: Erzeugen eines Objektes einer Unterklasse entsprechender Konstruktor der Oberklasse muss aufgerufen werden Initialisierung der Instanzvariablen public Class Kugel {... public Kugel(int x, int y) { this.x = x; this.y = y;... public Class BillardKugel extends Kugel { int number; public BillardKugel(int x, int y, int n) {????? number = n; 24

Konstruktoren ohne Parameter Oberklasse: Konstruktor ohne Parameter wird automatisch ausgeführt wird vor dem Konstruktor der Unterklasse ausgeführt public class Kugel {... public Kugel() {... this.x = 10; this.y = 10; public class BillardKugel extends Kugel { int number; public BillardKugel(int x, int y, int n) { number = n; 25

Konstruktoren mit Parameter Oberklasse: Konstruktoren mit Parameter müssen vom Programmierer ausgeführt werden muss erste Anweisung im Konstruktor der Unterklasse sein Aufruf: super(parameterliste); public Class Kugel {... public Kugel(int x, int y) {... this.x = x; this.y = y; public Class BillardKugel extends Kugel { int number; public BillardKugel(int x, int y, int n) { super(100, 100); number = n; 26

Konstruktoren Beispiel Objekt Zeppelin erzeugen Ausführung Konstruktoren 1. Object(); 2. Kugel(); 3. Ballon(); 4. Zeppelin(); Ausführung Hinweis Reihenfolge Aufruf - von unten nach oben Ausführung - von oben nach unten Aufruf 27

final: Attribute und Methoden Überschreiben verhindern Variablen und Methoden als final deklarieren können nicht überschrieben werden Beispiel public final static int DEFAULTX = 100; public final int DEFAULT_NUM = 10; public final void setpost(int x, int y) { this.x = x; this.y = y; Hinweis: final static - entspricht Konstanten in anderen Sprachen 28

final: Klassen Klassen können als final deklariert werden Klasse kann nicht erweitert werden alle Methoden der Klasse sind damit auch final Beispiel public final class BillardKugel extends Kugel {... Erschwert/verhindert Erweiterung eher sparsam einsetzen Beispiel: Klasse System ist als final deklariert 29

Polymorphismus Polymorphismus Vielgestaltigkeit Eigenschaft objektorientierter Sprachen Objekttyp bestimmt Wahl der korrekten Methode aus Menge gleichnamiger Methoden Aufruf der korrekten Methode zur Laufzeit entschieden - wird "dynamic binding" genannt Beispiel void draw(graphics g);... Kugel k = new Kugel(100, 100); k.draw(); // Objekttyp Kugel -> draw() aus Klasse Kugel Ballon b = new Ballon(200, 200); b.draw(); // Objekttyp Ballon -> draw() aus Klasse Ballon... 30

Prinzipien Polymorphismus Objekt behält immer Identität der Klasse aus der es instanziert wurde kann nie in ein Objekt einer anderen Klasse konvertiert werden Aufruf einer Methode eines Objektes Methode die mit Klasse des Objektes definiert wurde Kugel int x, y; void draw() Ballon BillardKugel changeradius() void draw() 31