OOP. Tagesprogramm. Kovariante Probleme. Überladen. Multimethoden. Visitor

Ähnliche Dokumente
Kovariante Probleme Beispiel (1)

Beispiel für überladene Methode

4. Vererbung Die Klasse Object. Die Klasse Object

Arten von Klassen-Beziehungen

Objektorientierte Konzepte

14. Java Objektorientierung

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Das Ersetzbarkeitsprinzip

OOP. Tagesprogramm. Software-Entwurfsmuster. Factory-Method. Prototype

14. Java Objektorientierung. Klassen, Vererbung, Kapselung

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

Das Ersetzbarkeitsprinzip

II.4.2 Abstrakte Klassen und Interfaces - 1 -

OOP. Tagesprogramm. Dynamische Typinformation. Homogene Übersetzung der Generizität. Generizität und Typumwandlungen

Dynamische Typinformation A01 OOP. Dynamische Typinformation

Polymorphie. 15. Java Objektorientierung II

Polymorphie. 15. Java Objektorientierung II

Klassenbeziehungen & Vererbung

14. Java Objektorientierung

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Faustregeln zu Zusicherungen

Ausnahmebehandlung in Java

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

II.4.5 Generische Datentypen - 1 -

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Arten von Klassen-Beziehungen

OOP. Tagesprogramm. Aspekte und Annotationen. Software-Entwurfsmuster. Factory-Method. Prototype

OOP. Tagesprogramm. Beziehungen zwischen Typen Vererbung Sichtbarkeit

Listing 1: Cowboy. Listing 2: Woody

Zweck: sequentieller Zugriff auf Elemente eines Aggregats. mehrere Abarbeitungen des Aggregatinhalts

Zweck: sequentieller Zugriff auf Elemente eines Aggregats

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

Java Einführung Vererbung und Polymorphie. Kapitel 13

Client-Server-Beziehungen

Realisierungsmöglichkeiten für parametrische Polymorphie

Sind Kühe Tiere? oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert

Tafelübung 07 Algorithmen und Datenstrukturen

1. In welchen Formen (mindestens zwei) kann man durch das Ersetzbarkeitsprinzip Wiederverwendung erzielen?

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

Einführung in die Systemprogrammierung

Tücken der dynamischen Bindung

Ersetzbarkeit und Verhalten

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

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

1. Abstrakte Klassen

Gebundene Typparameter

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

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Programmieren 2 Java Überblick

Client-Server-Beziehungen

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

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

Algorithmen und Datenstrukturen 07

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

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

FAKULTÄT FÜR INFORMATIK

Einstieg in die Informatik mit Java

Die abstrakte Klasse Expression:

14 Abstrakte Klassen, finale Klassen, Interfaces

Einführung in die Programmierung Wintersemester 2008/09

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

14 Abstrakte Klassen, finale Klassen, Interfaces

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

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

Java Vererbung. Inhalt

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

II.4.1 Unterklassen und Vererbung - 1 -

12 Abstrakte Klassen, finale Klassen und Interfaces

II.4.1 Unterklassen und Vererbung - 1 -

9. Vererbung und Polymorphie. Informatik Vererbung und Polymorphie 1

Klassen, Vererbung, Benutzereingabe

Algorithmen und Datenstrukturen

Objektorientierte Sprachen

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

Client-Server Beziehungen

Software-Entwurfsmuster

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

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

Factory Method (Virtual Constructor)

Einstieg in die Informatik mit Java

Programmieren I. Kapitel 8. Vererbung

Programmierkurs Java

Arten des universellen Polymorphismus

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

Sind Kühe Tiere? oder Was lehrt uns die Objektorientierung? Prof. Dr. Th. Letschert

Universität Karlsruhe (TH)

Objektorientierte Programmierung

Kapitel 5: Interfaces

Syntax. int a; public A() {...} public void F() {...} }

Informatik II (D-ITET) Übungsstunde 6

Interaktionen zwischen Objekten durch Senden von Nachrichten und Reagieren auf empfangene Nachrichten

Vererbung & Schnittstellen in C#

Transkript:

1 2016-12-07 Tagesprogramm Kovariante Probleme Überladen Multimethoden Visitor

2 2016-12-07 Kovariante Probleme Einfache Typhierarchie abstract class Futter {... class Gras extends Futter {... class Fleisch extends Futter {...

3 2016-12-07 Kovariante Probleme Dyn. Typabfrage für kovariantes Problem abstract class Tier { public abstract void friss(futter x);... class Rind extends Tier { public void friss(futter x) { if (x instanceof Gras) {... else erhoehewahrscheinlichkeitfuerbse(); class Tiger extends Tier { public void friss(futter x) { if (x instanceof Fleisch) {... else fletschezaehne();

4 2016-12-07 Überladen Überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss(futter x); class Rind extends Tier { public void friss(gras x) {... public void friss(futter x) { if (x instanceof Gras) friss((gras)x); else erhoehewahrscheinlichkeitfuerbse();

5 2016-12-07 Überladen Überladen = statisches Binden nur deklarierte Typen für Überladen entscheidend: Rind rind = new Rind(); Futter gras = new Gras(); rind.friss(gras); // Rind.friss(Futter x) rind.friss((gras)gras); // Rind.friss(Gras x) Achtung: deklarierten Typ von rind betrachten: Tier rind = new Rind(); Futter gras = new Gras(); rind.friss(gras); // Rind.friss(Futter x) rind.friss((gras)gras); // Rind.friss(Futter x)!!

6 2016-12-07 Überladen Aufgabe: Mächtigkeit von Überladen Such Sie in Gruppen zu zwei bis drei Personen Antworten auf folgende Frage: Aus welchen Gründen entspricht die Ausführung überladener Methoden oft nicht unserer Intuition? Zeit: 2 Minuten

7 2016-12-07 Überladen Empfehlungen für Überladen Überladen generell fehleranfällig eher vermeiden Überladen in verschiedenen Klassen schwer sichtbar Überladen von Methoden aus Oberklasse stets vermeiden Unterscheidung zwischen statischem und dynamischem Binden soll nicht entscheidend sein für je zwei überladene Methoden soll gelten: Unterscheidung an Hand einer Parameterposition, wobei Parametertypen keinen gemeinsamen Untertyp haben oder alle Parametertypen einer Methode spezieller als die der anderen, und allgemeinere Methode verzweigt nur auf speziellere, falls möglich

8 2016-12-07 Multimethoden Multimethoden = dynamisches Binden Multimethoden entsprechen syntaktisch überladenen Methoden, aber Bindung erfolgt anhand dynamischer Typen dadurch oft einfachere Programme möglich: class Rind extends Tier { public void friss(gras x) {... public void friss(futter x) { erhoehewahrscheinlichkeitfuerbse(); Achtung: NICHT in Java!!! (in Java nur Überladen mit statischem Binden)

9 2016-12-07 Visitor Simulation von Multimethoden (1) abstract class Tier { public abstract void friss(futter futter);... class Rind extends Tier { public void friss(futter futter) { futter.vonrindgefressen(this); class Tiger extends Tier { public void friss(futter futter) { futter.vontigergefressen(this);

10 2016-12-07 Visitor Simulation von Multimethoden (2) abstract class Futter { public abstract void vonrindgefressen(rind rind); public abstract void vontigergefressen(tiger tiger); class Gras extends Futter { public void vonrindgefressen(rind rind) {... public void vontigergefressen(tiger tiger) { tiger.fletschezaehne(); class Fleisch extends Futter { public void vonrindgefressen (Rind rind) { rind.erhoehewahrscheinlichkeitfuerbse(); public void vontigergefressen(tiger tiger) {...

11 2016-12-07 Visitor Komplexität Nachteil simulierter Multimethoden: Anzahl der Methoden M Tierarten, N Futterarten M N inhaltliche Methoden Generell fürnbindungen:n 1,N 2,...,N n Möglichkeiten N 1 N 2 N n inhaltliche Methoden insgesamtn 1 +N 1 N 2 + +N 1 N 2 N n Methoden echte Multimethoden verwenden daher Komprimierungstechniken und Vererbung Eindeutigkeit bei Vererbung muss garantiert werden: void frissdoppelt(futter x, Gras y) {... void frissdoppelt(gras x, Futter y) {... void frissdoppelt(gras x, Gras y) {... // notwendig