Gebundene Typparameter



Ähnliche Dokumente
Arten des universellen Polymorphismus

Dynamische Typinformation A01 OOP. Dynamische Typinformation

Typumwandlungen bei Referenztypen

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

Factory Method (Virtual Constructor)

Prinzipien Objektorientierter Programmierung

Einführung in die Programmierung

Client-Server-Beziehungen

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Javakurs zu Informatik I. Henning Heitkötter

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

Algorithmen und Datenstrukturen

Klassenbeziehungen & Vererbung

Objektorientierte Programmierung. Kapitel 12: Interfaces

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

1 Polymorphie (Vielgestaltigkeit)

Objektorientierte Programmierung

Client-Server Beziehungen

Objektorientierte Programmierung

Der lokale und verteilte Fall

Java Generics & Collections

Objektorientierte Programmierung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Java Einführung Abstrakte Klassen und Interfaces

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Programmieren in Java

Java - Programmierung - Objektorientierte Programmierung 1

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

Einführung in die Java- Programmierung

Vererbung & Schnittstellen in C#

Große Übung Praktische Informatik 1

A(T1) A(T2) A(T1) A(T2)

Java: Vererbung. Teil 3: super()

Innere Klassen in Java

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Einführung in die Programmierung Blockkurs Java

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Java Kurs für Anfänger Einheit 5 Methoden

Remote Method Invocation

12) Generische Datenstrukturen

Nathan Burgener. Design by Contract. Modul SWE

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

4. Vererbung Die Klasse Object. Die Klasse Object

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

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

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java

Testen mit JUnit. Motivation

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Themen. Web Service - Clients. Kommunikation zw. Web Services

Musterlösungen zur Klausur Informatik 3

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Applet Firewall und Freigabe der Objekte

12) Generische Datenstrukturen

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Java-Programmierung. Remote Method Invocation - RMI

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

II.4.4 Exceptions - 1 -

Abschnitt 9: Schnittstellen: Interfaces

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

WebService in Java SE und EE

Programmiervorkurs SS 2011 Technische Universität Darmstadt Jan Hendrik Burdinski, Felix Kerger

Javakurs 2013 Objektorientierung

WPF Steuerelemente Listbox, ComboBox, ListView,

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Übersicht Programmablaufsteuerung

Informatik ist viel mehr als Delphi-Programmierung!

Einführung in die Programmierung

Java Einführung Collections

Proseminar: C# und.net. 6. Vortag Generische Klassen. Sebastian Wolf

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Einführung in die Programmierung für Wirtschaftsinformatik

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Modellierung und Programmierung 1

Vorkurs C++ Programmierung

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Java für Computerlinguisten

Kapitel 4. Mehrfachvererbung. Beispiel 1: typische Diamant Struktur. Person. Hiwi

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Generische Datenstrukturen

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Computeranwendung und Programmierung (CuP)

Vorlesung Objektorientierte Programmierung Probeklausur

BEISPIELKLAUSUR Softwareentwicklung:

Einführung in die Java- Programmierung

Studentische Lösung zum Übungsblatt Nr. 7

Java-Schulung Grundlagen

Ich liebe Java && Ich liebe C# Rolf Borst

Transkript:

Gebundene Typparameter interface StringHashable { String hashcode(); class StringHashMap<Key extends StringHashable, Value> { public void put (Key k, Value v) { String hash = k.hashcode();...... Objektorientierte Programmierung, gebundene Generizität 1

Rekursive Typparameter interface Comparable<A> { int compareto (A that); // res. < 0 if this < that // res. == 0 if this == that // res. > 0 if this > that class MyInteger implements Comparable<MyInteger> { private int value; public MyInteger (int v) { value = v; public int intvalue() { return value; public int compareto (MyInteger that) { return this.value - that.value; Objektorientierte Programmierung, gebundene Generizität 2

Rekursive gebundene Typparameter class Collections2 { public static <A extends Comparable<A>> A max (Collection<A> xs) { Iterator<A> xi = xs.iterator(); A w = xi.next(); while (xi.hasnext()) { A x = xi.next(); if (w.compareto(x) < 0) w = x; return w; Objektorientierte Programmierung, gebundene Generizität 3

Keine impliziten Untertypbeziehungen Untertypbeziehung bei expliziter Vererbung Beispiel: class MyList<A> extends List<List<A>> {... es gilt: MyList<Integer> List<List<Integer>> MyList<String> List<List<String>> Integer Comparable<Integer> Untertypbeziehungen auf Typen, die Typparameter ersetzen, implizieren keine generischen Untertypbeziehungen MyList<Student> MyList<Person> MyList<Person> MyList<Student> MyList<Integer> List<List<Comparable<Integer>>> Objektorientierte Programmierung, gebundene Generizität 4

Java-Arrays sind nicht generisch class NoLoophole { public static String loophole (Integer y) { List<String> xs = new List<String>(); List<Object> ys = xs; // compile-time error ys.add(y); return xs.iterator().next(); class Loophole { public static String loophole (Integer y) { String[] xs = new String[10]; Object[] ys = xs; // no compile-time error ys[0] = y; // throws exception return xs[0]; Objektorientierte Programmierung, gebundene Generizität 5

Wildcards als Typen void drawall (List<Polygon> p) {... Lesen und Schreiben von p kein Argument vom Typ List<Square> oder List<Object> void drawall (List<? extends Polygon> p) {... nur Lesen von p Aufruf mit Argument vom Typ List<Square> erlaubt void addpolygon (List<? super Polygon> to) {... nur Schreiben von to Aufruf mit Argument vom Typ List<Object> erlaubt Objektorientierte Programmierung, gebundene Generizität 6

Wildcards und rekursive Typparameter class ComparableList<A extends Comparable<? super A>> extends List<A> { public A max() { Iterator<A> xi = iterator(); A w = xi.next(); while (xi.hasnext()) { A x = xi.next(); if (w.compareto(x) < 0) w = x; return w; Z.B.: ComparableList<U> möglich für Untertyp U von MyInteger Objektorientierte Programmierung, gebundene Generizität 7

Einschränkungen von Java Typparameter A überall erlaubt, wo in Java Typen erlaubt, aber mit Einschränkungen: nicht direkt zur Erzeugung neuer Objekte new A() ist illegal new A[10] ist illegal Typumwandlungen nur erlaubt, wenn gleiche Typparameter in deklariertem Obertyp List<List<String>> x = new MyList<String>(); MyList<String> y = (MyList<String>)x; // erlaubt Object a = new MyList<String>(); MyList<String> b = (MyList<String>)a; // Syntaxfehler! Objektorientierte Programmierung, gebundene Generizität 8

Übersetzung von Generizität homogene Übersetzung: (z. B. Java) generische Klasse in eine nichtgenerische Klasse übersetzt Typparameter durch Schranke oder Object ersetzt Typumwandlungen für Rückgabewerte (immer erfolgreich) heterogene Übersetzung: (z. B. templates in C++) unterschiedliche Klassen für unterschiedliche Typparameterersetzungen erzeugt ( copy and paste ) Vorteile: effizienter; int, char,... direkt verwendbar Nachteile: viele Klassen, schwer simulierbar Objektorientierte Programmierung, gebundene Generizität 9

Arten gebundener Generizität Untertypen gegebener Schranken erlaubt (Java, Eiffel) klar sichtbare Semantik aber geeignete Typhierarchien manchmal schwer festlegbar Eigenschaften implizit (heterogene Übersetzung, C++) flexibel und einfach, da kein gemeinsamer Obertyp nötig aber oft Fehlermeldungen von schlechter Qualität Eigenschaften explizit angegeben (Ada, C++ concepts) noch flexibler, da Umbenennungen möglich aber längerer Programmcode nötig Objektorientierte Programmierung, gebundene Generizität 10