OOP. Tagesprogramm. Generizität

Ähnliche Dokumente
Arten des universellen Polymorphismus

Arten des universellen Polymorphismus

Arten des universellen Polymorphismus

Gebundene Typparameter

Dynamische Typinformation A01 OOP. Dynamische Typinformation

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

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

Vorlesung Inf-B

3. Übungsbesprechung Programmkonstruktion

ALP II Dynamische Datenmengen

Ausnahmebehandlungen am Beispiel

Probleme ohne generische Typen

Programmiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor

Interfaces und Generics

II.4.5 Generische Datentypen - 1 -

Algorithmen und Datenstrukturen. Übersicht. Interfaces und Generics. InsertionSort für Punkte. InsertionSort für Punkte

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

8. Generics Grundlagen der Programmierung 1 (Java)

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

Java I Vorlesung Generics und Packages

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Programmieren in Java

Das Ersetzbarkeitsprinzip

JAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1

Arten von Klassen-Beziehungen

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Klausur: Java (Liste P)

Neuere Sprachelemente in Java

Objektorientierte Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Philipp Güttler Progwerkstatt. Enums, Interfaces und Generics

Programmiermethodik 3. Klausur Lösung

Polymorphie in Java oder Generics und Co.

1 Polymorphie (Vielgestaltigkeit)

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

Programmieren 2 16 Java Collections und Generizität

Einstieg in die Informatik mit Java

II.3.1 Rekursive Algorithmen - 1 -

coder-friendly s generic mug Generische Typen OOPM, Ralf Lämmel

Ausnahmebehandlung in Java

Objektorientierte Programmierung

Programmierkurs Java

int x = 3; int y = 11; public A () { this.x = z; y *= z;

Java Quiz. public static <T> int binarysearch (List<? extends Comparable<? super T>> list, T key);

3. Übungsbesprechung Programmkonstruktion

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Programmieren 2 Java Überblick

Objektorientierte Programmierung

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Datenstrukturen und Abstrakte Datentypen

Closures in Java. Michael Wiedeking. Java Forum Stuttgart Juli MATHEMA Software GmbH (

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Client-Server-Beziehungen

Musterlösung Stand: 5. Februar 2009

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

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

Aufgabenblatt Nr. 5 Generizität und TicTacToe

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Programmieren in Java

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

Arten von Klassen-Beziehungen

6. Globalübung (zu Übungsblatt 8)

Wiederholung aus SWE2

Programmieren in Java

Institut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur

Listing 1: Cowboy. Listing 2: Woody

Kapitel 5: Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Java Einführung Abstrakte Klassen und Interfaces

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Programmiermethodik 2. Klausur Lösung

Schein-/Bachelorklausur Teil 2 am Zulassung: Mindestens 14 Punkte in Teilklausur 1 und 50% der Übungspunkte aus dem 2. Übungsblock.

public static void replace(stringbuffer b) { for (int i = 0; i < b.length(); i++) { char replacechar; switch( b.charat(i) ) {

Ersetzbarkeit und Verhalten

Programmierkurs Java

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Test-Driven Design: Ein einfaches Beispiel

public interface Stack<E> { public void push(e e); public E pop();

Java-Schulung Grundlagen

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

Faustregeln zu Zusicherungen

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Die Schnittstelle Comparable

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

14 Abstrakte Klassen, finale Klassen, Interfaces

Kapitel 8. Generische Klassen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

// compiliert, aber Programmabbruch zur Laufzeit: einesuppe = ((EßbarerPilz)einPilz).kochen();

Objektorientierte Sprachen

Lambda Expressions in Java 8

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Allgemeine Hinweise:

Transkript:

1 2016-11-23 Tagesprogramm Generizität

2 Universeller Polymorphismus enthaltender Polymorphismus durch Untertypbeziehungen: Ersetzbarkeit: unvorhersehbare Wiederverwendung, kann Clients von lokalen Codeänderungen abschotten, nicht immer verwendbar (kovariante Probleme) parametrischer Polymorphismus = Generizität: kaum Einschränkungen (auch für kovariante Probleme), keine Ersetzbarkeit, Parameteränderung wirkt sich auf Clients aus Generizität und Untertypbeziehungen ergänzen einander

3 Generische Interfaces public interface Collection<A> { void add(a elem); Iterator<A> iterator(); public interface Iterator<A> { A next(); boolean hasnext(); Verwendungsbeispiele: Collection<String> Collection<Integer> (enthält void add(string elem)) (enthält void add(integer elem))

4 Generische Klasse public class List<A> implements Collection<A> { private class Node { private A elem; private Node next = null; private Node(A elem) { this.elem = elem; private Node head = null, tail = null; private class ListIter implements Iterator<A> { private Node p = head; public boolean hasnext() { return p!= null; public A next() { if (p == null) return null; A elem = p.elem; p = p.next; return elem; public void add(a x) { if (head == null) tail = head = new Node(x); else tail = tail.next = new Node(x); public Iterator<A> iterator() { return new ListIter();

5 Verwendung generischer Klasse class ListTest { public static void main(string[] args) { List<Integer> xs = new List<Integer>(); xs.add(new Integer(0)); Integer x = xs.iterator().next(); List<String> ys = new List<String>(); ys.add("zerro"); String y = ys.iterator().next(); List<List<Integer>> zs = new List<List<Integer>>(); zs.add(xs); // zs.add(ys);! Compiler meldet Fehler! List<Integer> z = zs.iterator().next();

6 Generische Methode public interface Comparator<A> { int compare(a x, A y); public class CollectionOps { public static <A> A max(collection<a> xs, Comparator<A> c) { Iterator<A> xi = xs.iterator(); A w = xi.next(); while (xi.hasnext()) { A x = xi.next(); if (c.compare(w, x) < 0) w = x; return w;

7 Verwendung generischer Methode List<Integer> xs =...; List<String> ys =...; Comparator<Integer> cx =...; Comparator<String> cy =...; Integer rx = CollectionOps.max(xs, cx); String ry = CollectionOps.max(ys, cy); //... rz = CollectionOps.max(xs, cy);! Fehler!

8 Aufgabe: Generische Methoden Such Sie in Gruppen zu zwei bis drei Personen Antworten auf folgende Frage: Warum verwendet man generische Methoden obwohl Klassen ohnehin generisch sein können? Zeit: 2 Minuten

9 Gebundene Typparameter public interface Scalable { void scale(double factor); public class Scene<T extends Scalable> implements Iterable<T> { public void addsceneelement(t e) {... public Iterator<T> iterator() {... public void scaleall(double factor) { for (T e : this) e.scale(factor);...

10 Rekursive Typparameter public 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;

11 Rekursive gebundene Typparameter class CollectionOps2 { 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;

12 Generizität Ersetzbarkeit X<A> kein Untertyp von X<B> (wenn A und B ungleich) daher List<Student> kein Untertyp von List<Person> aber MyInteger Untertyp von Comparable<MyInteger>

13 Wildcards als Typen void drawall(list<polygon> p) {... Lesen und Schreiben des Inhalts von p aber kein Argument vom Typ List<Square> oder List<Object> void drawall(list<? extends Polygon> p) {... Aufruf mit Argument vom Typ List<Square> erlaubt aber nur Lesen des Inhalts von p (kein Schreiben) void addpolygon(list<? super Polygon> to) {... Aufruf mit Argument vom Typ List<Object> erlaubt aber nur Schreiben des Inhalts von to (kein Lesen)

14 Wildcards und rekursive Typparameter class ComparableList<A extends Comparable<? super A>> extends List<A> { public A max() { Iterator<A> xi = this.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