Generische Polymorphie in Java-

Ähnliche Dokumente
19 Collections Framework

19 Collections Framework

12 Collections Framework. Interfaces Maps and Collections. Collection Interface. Überblick. Collection = Containterklasse, die andere Objekte enthält.

JAVA KURS COLLECTION

Einstieg in die Informatik mit Java

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

II.4.6 Collections - 1 -

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

Hashmap: Video Erklärung

Objektorientierte Programmierung. Kapitel 21: Einführung in die Collection Klassen

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Teil V. Generics und Kollektionen in Java

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

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

Java Einführung Collections

II.4.4 Exceptions - 1 -

Selbststudium OOP7 & ALG2 Auftrag

Abstrakte Datentypen und Java

Programmierkurs Java

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

1. Welches Interface ist nicht von Collection abgeleitet? A. B. C. D. List Set Map SortedSet. 2. Welche Aussagen sind richtig?

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

II.4.5 Generische Datentypen - 1 -

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

Mengen und Multimengen

Mengen und Multimengen

Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java

Java Generics & Collections

Kapitel 6: Java Collection Teil I

17. Java Collections. Daten Organisieren. Generische Liste in Java: java.util.list. Typ Parameter (,,Parametrischer Polymorphisums )

Algorithmen und Datenstrukturen

Propädeutikum Programmierung in der Bioinformatik

Software Entwicklung 1

Java Collections Framework (JCF)

Objektorientierte Implementierung

Software Entwicklung 1

Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen

Kapitel 5: Iterierbare Container

Kapitel 7: Java Collection Teil I

ALP II Dynamische Datenmengen

Objektorientierte Programmierung

Programmierkurs Java

Java I Vorlesung Collections

Programmiertechnik II

OCP Java SE 8. Collections

Nützliche Utility-Klassen des JDK

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

Vom objektorientierten Entwurf zur Implementierung in Java. 2. Dezember 2014

Teil II) Objektorientierte Implementierung 10) Verfeinern von UML-Assoziationen mit dem Java-2 Collection Framework

Programmieren in Java

Vorkurs Informatik WiSe 15/16

XIII: Verkettete Listen

Programmiertechnik II

java.util. Sebastian Draack Department Informations- und Elektrotechnik Department Informations- und Elektrotechnik JAVA Collection-API

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Collections. Arthur Zaczek

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Programmiermethodik 3. Klausur Lösung

ADT: Java Collections und ArrayList

Software Entwicklung 1

Universität Karlsruhe (TH)

3. Übungsbesprechung Programmkonstruktion

Java Schulung. Objektorientierte Programmierung in Java Teil V: Die Java Collection Klassen. Prof. Dr. Nikolaus Wulff

Vorlesung Programmieren

Wo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 338

4. Objektorientierte Programmierung mit C++

Programmieren 2 16 Java Collections und Generizität

12 Abstrakte Klassen, finale Klassen und Interfaces

Vorlesung Informatik 2

Collections. Arthur Zaczek. Nov 2015

Realisierungsmöglichkeiten für parametrische Polymorphie

Programmieren in Java

Einführung in die Programmierung Generische Programmierung. Thomas R. Gross. Department Informatik ETH Zürich

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Grundkonzepte java.util.list

Info B VL 14: Java Collections/Reflections

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]

Algorithmen und Datenstrukturen CS1017

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

Programmieren in Java -Eingangstest-

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

B2.1 Abstrakte Datentypen

Software Entwicklung 1

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Programmiertechnik II

Grundlagen der Informatik 0

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

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Programmierung WS12/13 Lösung - Präsenzübung M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Programmieren I. Kapitel 13. Listen

Transkript:

Generische Polymorphie in Java- Johannes Waldmann (HTWK Leipzig)

Plan Beispiel Collections, Iteratoren, Maps Schnittstellen und Implementierungen Genaueres zum Typsystem Details zu Implementierungen zur Didaktik

Anagramme (Aufgabe) Aufgabe: finde alle Anagramme in einem Eingabestrom E! Definition: Wort u ist Anagramm von Wort v, geschrieben u v, falls man v durch Permutiere (Umstellen, unter Beachtung der Vielfachheit) d Buchstaben von u erhält. Exakte Formulierung: Bestimme die Äquivalenzklassen von E/ mit mehr als einem Element! (ist klassische Übungsaufgabe aus: Jon Bentle Programming Pearls, ACM Press 1995, 2000, http://www.cs.bell-labs.com/cm/cs/pearls/

Anagramme (Ansatz) Bestimme zu jedem Wort u der Eingabe das lexikografisch kleinste v mit u v static String key (String w) { char [] k = w.tochara Arrays.sort(k); return new String (k); und benutze v als Schlüssel für die Klasse von Hilfsdatenstruktur book ist eine (endliche, partie Abbildung von String (Schlüssel) nach Menge von Strings (Äq-Klassen). static SortedSet<Set<String>> anagrams (Set<String> ws) { Map<String, Set<String>> book = build_b return groups (book);

Anagramme (Details) static Map<String, Set<String>> build_book (Set<Stri Map<String, Set<String>> book = new HashMap<String, Set<String>>(); for (String w : ws) { String k = key (w); Set<String> prev = book.get(k); if (null == prev) { prev = new HashSet<String>(); prev.add(w); book.put(k, prev); return book;

Collections: Überblick Schnittstellen: Collection<E> List<E> Set<E> SortedSet<E> Implementierungen: LinkedList<E>, ArrayList<E> HashSet<E> TreeSet<E> Listen: Zugriff über Index, Mengen: Zugriff über Relationen (equals, comp auf Elementen beachte: Schnittstellen-Vererbung, aber keine Implementierungs-Vererbung!

Collections: Detail interface Collection<E> { boolean isempty (); int size (); boolean add (E o); boolean contains (E o); interface List<E> extends Collection<E> { E get (int i); void add (int i, E o); interface Set<E> extends Collection<E> {

Collections und Iteratoren interface Collection<E> {... Iterator<E> iterator(); interface Iterator<E> { boolean hasnext (); E next (); Collection<E> c =... for (Iterator<E> it = c.iterator(); it.hasnext (); ) E x = it.next ();... ab Java-1.5 einfach so: for (E x : c) {...

Maps (Überblick) Abbildungen mit endlichem Definitionsbereich interface Map<K,V> { V get (K key); void put (K key, V boolean isempty (); int size (); Collection<V> values (); Set<K> keyset (); Schnittstellen: Map<K,V> SortedMap<K,V> Implementierungen: HashMap<K,V> TreeMap<K,V>

Schnittstelle vs. Implementieru Prinzip des information hiding: Programme sollten so wenig wie möglich über I verraten, z. B: welcher konkrete Datentyp benu wird. In Deklaration (Typname Bezeichner = Initialwe Typname soll immer abstrakt (Schnittstelle) sei // schlecht (konkreter Typ ist sichtbar) HashSet<String> c = new HashSet<String> ( // gut (nur abstrakter Typ ist sichtbar) Set<String> c = new HashSet<String> (); i

Schnittstellen (II) interface Map<K,V> {... Set<Map.Entry<K,V>> entryset (); interface Entry<K,V> { K getkey (); V getvalue (); versteckt Implementierung der Menge und der static <K,V> Map<V,K> invert (Map<K,V> f) { Map<V,K> g = new HashMap<V,K> (); for (Map.Entry<K,V> e : f.entryset()) { g.put (e.getvalue(), e.getkey()); return g; i

Polymorphie Idee: Polymorph = vielgestaltig: ein Programm( ist auf verschiedene Daten(-typen) anwendbar. Anwendung: Wiederverwendung. (ad-hoc-polymorphie: Überladen von Bezeichnern) generische Polymorphie (hier gesehen) Vererbungs-Polymorphie generische Polymorphie in Java seit 1.5 (= 5.0) Vorläufer: Generic Java/Pizza, Templates in C+ polymorph getypter Lambda-Kalkül (Haskell, M i

Typ-Prüfung für generische Polymo nur zur Laufzeit (LISP usw.) zur Übersetzungszeit: bei Anwendung polymorpher Funktionen (d. h. nach Macro/Template-Expansion in C zur Entwurfszeit: bei Schreiben der polymorphen Funktionen (Haskell, ML, Java-1.5) Design-Frage (scheinbar): zwischen Flexibilität und Sicherheit i

Generische Typen in Java-1.5 strenge Unterscheidung zw Typschablone u Schablone mit passender Argumentliste (= von Typen) ergibt Typ in Objekt-Deklarationen/Konstruktor-Aufrufe dürfen (wie bisher) nur Typen (= instantiiert Schablonen) benutzt werden. Klassen/Schnittstellen-Schablone: interface Map<K,V> {... Methodenschablone (Instantiierung durch Com static <K,V> Map<V,K> invert (Map<K,V> f) i

Eingeschränkte Schablonen-Param interface Foo <P> {... // <-- beliebig // nur P, die Q implementieren: interface Foo <P extends Q> {... // nur Ober-Schnittstellen von R: interface Foo <P super Q> {... benutzt Hierarchie auf Schnittstellen. Jede Schnittstelle ist einstellige Relation (auf Ty die Hierarchie besteht aus Implikationen. Erweiterung: Schnittstellen sind mehrstellige Relationen (multi parameter type classes in Ha i

Details zu Implementierungen Standard-Datentypen und Algorithmen (verkettete Listen, Hashtabellen, balancierte Suchbäume) Aha!-Algorithmen (Jon Bentley: Programmin Pearls) z. B. für Rotation zyklischer Listen (Collections.rotate) OO-Entwurf(smuster), z. B. Delegation TreeSet<E> -> TreeMap<E,Object>, TreeMap<K,V> -> Entry<K,V> i

Zur Didaktik derzeit Java-1.5 als (wesentlicher) Teil von Objektorientierte Konzepte (4. Sem) bzw. als (kleinerer) Teil von Compilerbau (7. Sem) (geplant: Prinzipien von Programmiersprachen, Sem)... oder früher? polymorphe Typen gibt es sowieso schon s Semester sowohl als Modell (Liste, Stack, Q als auch real (Array, Zeiger) Trennung abstrakter/konkreter Datentyp wir Anfang an gelehrt, spätestens in Softwarete Praktikum benötigt, und kann in der Sprach abgebildet werden i