Java Generics & Collections

Ähnliche Dokumente
Java Generics & Collections

JAVA KURS COLLECTION

19 Collections Framework

19 Collections Framework

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

Software Entwicklung 1

Einstieg in die Informatik mit Java

Propädeutikum Programmierung in der Bioinformatik

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

ADT: Java Collections und ArrayList

Software Entwicklung 1

Johannes Unterstein - TINF16 - Java - Sommersemester 2017 JAVA. Weiterführende Spracheigenschaften

1 Einleitung Generizität Syntax... 2

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

Teil V. Generics und Kollektionen in Java

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

OCP Java SE 8. Collections

Vorlesung Programmieren

12 Abstrakte Klassen, finale Klassen und Interfaces

Kapitel 12: Java Collection Teil II

Kapitel 12: Java Collection Teil II

Programmiertechnik II

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Programmieren in Java

Objektorientierte Implementierung

Realisierungsmöglichkeiten für parametrische Polymorphie

Einstieg in die Informatik mit Java

Java Einführung Collections

Probleme ohne generische Typen

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Programmieren in Java

Algorithmen und Datenstrukturen in Java Jiri Spale, Algorithmen und Datenstrukturen in Java 1

Generisches Programmieren. Generisches Programmieren

Nützliche Utility-Klassen des JDK

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

Languages and Tools for Object-Oriented Development Klausur Wintersemester 2007/2008

Programmierkurs Java

Generische Polymorphie in Java-

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

Programmiertechnik II

9. Kapitel GENERICS. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Programmieren in Java

Neuere Sprachelemente in Java

Universität Karlsruhe (TH)

Programmieren 2 16 Java Collections und Generizität

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

Programmiertechnik II

Informatik II Übung 6

Algorithmen und Datenstrukturen

Erste Java-Programme (Java Wiederholung & Vererbung)

Javakurs für Anfänger

Vorlesung Programmieren

Das Interface-Konzept am Beispiel der Sprache Java

Grundlagen der Informatik 0

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

JAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Programmieren in Java

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

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

Vorlesung Informatik 2

Programmieren in Java -Eingangstest-

Grundkonzepte java.util.list

Kapitel 6: Java Collection Teil I

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Abschnitt 10: Typisierte Klassen

Einführung in die Programmiersprache Java III

Kopieren und Vergleichen

Beispielklausur A MPGI 3

Überblick. Java 5. Java 6. Java 7. Referenzen. neue Sprachfeatures Erweiterungen Klassenbibliothek. Erweiterungen Klassenbibliothek

Programmieren in Java

Die abstrakte Klasse Expression:

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Software Entwicklung 1

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 4 ArrayList, PriorityQueue, HashSet und HashMap

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

4. Vererbung Die Klasse Object. Die Klasse Object

Javakurs für Anfänger

Selbststudium OOP7 & ALG2 Auftrag

Programmieren 2 02 Maps, Sets, Defensive Programmierung

Vorlesung Inf-B

Programmieren in Java

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

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

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

Programmieren I. Kapitel 8. Vererbung

Collections. Arthur Zaczek

Kapitel 7: Java Collection Teil I

Objektorientiertes Programmieren mit Java

Grundlagen der Informatik Generische Klassen

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

13 Abstrakte Datentypen

Transkript:

Praktikum Effizientes Programmieren (Sommersemester 2018) Dennis Reuling

1 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018) Agenda

Teil 1 Generics 2 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Ein Beispiel... Elemente nach einer Definition ordnen: String Integer 2 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Ein Beispiel... Elemente nach einer Definition ordnen: String Integer Viel Redundanz Unnötige LOC 2 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Mögliche Lösung Auf gemeinsamen Typ zurückziehen, hier Object: 3 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Mögliche Lösung Auf gemeinsamen Typ zurückziehen, hier Object: Object verhindert aber Typsicherheit Unlesbar für Entwickler, was enthält ranking[]? 3 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Mögliche Lösung Auf gemeinsamen Typ zurückziehen, hier Object: Object verhindert aber Typsicherheit Unlesbar für Entwickler, was enthält ranking[]? Daher 3 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Allgemeines Idee Typparameter einführen, um auf verschiedenen Typen von Objekten (gleich) arbeiten zu können. Geschichte Ursprung: Generic Java (1998) Integriert: seit JDK 5 (2004) Zukunft: Project Valhalla[1] (t.b.a.) 4 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Übersicht Ursprung: Viele Probleme lassen sich ähnlich lösen Daher: Datenstrukturen (später ) oder Methoden teilen sich Eigenschaften Beispiele: - Elemente hinzufügen, sortieren,... - Operationen ausführen, addieren,... Ziele: - Redundanz vermeiden - Typsicherheit gewährleisten - (Methoden) aufrufe sinnvoll verallgemeinern Warum nicht Vererbung? 5 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Vererbung vs Generics Vererbung Drückt Ist-Ein aus Beispiel: Wenn Eigenschaften übernommen werden und die Subklasse die Oberklasse richtig darstellt Generics Drückt Von aus Beispiel: Wenn auf verschiedenen Typen gearbeitet werden kann (soll) Es werden keine Eigenschaften des Typparameter s in der Klasse übernommen 6 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Ein Beispiel zur Typsicherheit Lösung 1: Lösung 2: Welche Lösung ist besser? Warum? 7 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Grundlagen Vorkommen in freier Wildbahn Klasse: Methoden: Attribute: Übliche Typparameter T Typ E Element K Key V Value N Number 8 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Subtyping Ist folgender Code korrekt? 9 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Subtyping Ist folgender Code korrekt? Nein, aufgrund von Type Erasure ( später!) 9 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Subtyping Generell: Abbildung: Vererbungsbeziehung Generics [2] 10 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Subtyping Generell: Abbildung: Vererbungsbeziehung Generics [2] Lösung: Wildcards (mit Subtyping) 10 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wildcards - Allgemein Idee: Typparameter einschränken, um eingrenzen zu können Ansatz: Typhierarchien direkt mit dem Parameter angeben Möglichkeiten: - Upper - Lower - Unbound Darstellung =? 11 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wildcards - Beispiele 12 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wildcards - Beispiele Upper: Tierärzte dürfen nur Tiere behandeln. 12 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wildcards - Beispiele Upper: Tierärzte dürfen nur Tiere behandeln. Lower: Tierärzte dürfen nur Tiere und alle Supertypen behandeln (Katzen). 12 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wildcards - Beispiele Upper: Tierärzte dürfen nur Tiere behandeln. Lower: Tierärzte dürfen nur Tiere und alle Supertypen behandeln (Katzen). Unbound: Tierärzte behandeln alle gleich (schlecht/gut). 12 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wildcards - Verwendung Richtlinie (bei Klassen): IN-Variable: Upper OUT-Variable: Lower Variable nicht nötig bzw Object reicht aus: Unbound IN OUT gleichzeitig: Keine 13 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Wiederholung Abbildung: Vererbungsbeziehung Generics [2] Warum Object als gemeinsame Superklasse? 14 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Grundlegendes Um Typsicherheit(zur Compilezeit) zu gewährleisten, geht Java folgendermaßen vor: 1 Alle Typparameter werden durch die Bounds oder aber Object ersetzt, falls keine Bounds vorhanden. 2 Typkonversionen werden eingefügt, falls nötig 3 Bridge Methods werden zur Erhaltung von Polymorphie eingefügt 15 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Beispiele Unbound - vorher Upper - vorher Unbound - nachher Upper - nachher 16 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Einschränkungen (Auszug) Primitive Typen können nicht verwendet werden (int, float,...) (Ist aber dank Autoboxing meist kein Problem) Typparameter können nicht instanziiert werden Statische Attribute unterstützen keine Typparameter Arrays können nicht aus parametrisierten Typen abgeleitet werden 17 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Einschränkungen (Auszug) Primitive Typen können nicht verwendet werden (int, float,...) (Ist aber dank Autoboxing meist kein Problem) Typparameter können nicht instanziiert werden Statische Attribute unterstützen keine Typparameter Arrays können nicht aus parametrisierten Typen abgeleitet werden Aber: Sie sehen einfach komplexer aus ;-) 17 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Teil 2 18 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Allgemeines Idee Bibliothek, um Gruppen von (zusammengehörigen) Elementen (generisch) zu verwalten. Vorbild / Inspiration: C++ STL Geschichte Ursprung: Package (1997) Integriert: seit JDK 2 (1998) Umsetzung Verwendet sowie allgemeingültige Schnittstellen 18 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Übersicht Abbildung: Java Schnittstellen [2] 19 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Interface Bietet allgemeingültige Aufrufe an Konstruktor-Aufruf wandelt jegliche Collection in die gewünschte um, Beispiel: Basis Methoden: - int size(), boolean isempty(), Iterator<E> iterator() Element-spezifische Methoden: - boolean contains(object element), boolean add (E element), boolean remove(e element) Gruppen-spezifische Methoden: - boolean containsall(collection<?> c), void clear(), Object[] toarray() 20 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Set Beschreibung Sets sind Kollektionen, die keine Duplikate enthalten dürfen. Methoden Keine Erweiterung zu allgemeiner Collection Einschränkungen hinsichtlich Elemente, z.b. Einfügen von bereits vorhandenem Element nicht erlaubt (add liefert false) Semantik der mathematischen Mengenlehre nachgebildet Beispiel (Natürliche Gleichheit) Vorher: Nachher: 21 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Gleichheit Gleichheit muss (selbst) definiert werden, um sinnvoll (und performant) verwenden zu können. Zwei Methoden verfügbar: - boolean equals(object obj): Muss true liefern, wenn zwei Objekte gleich sind Muss eine Äquivalenzrelation sein - int hashcode(): Berechnet einen int-wert, der bei gleichen Objekten den gleichen Wert liefern muss (d.h. wenn equals true liefert) Könnte bei verschiedenen Objekten den gleichen Wert liefern Beispiel: 22 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

List Beschreibung Lists sind Kollektionen, die eine Ordnung besitzen. Methoden Erweiterungen zu allgemeiner Collection: Positionsbezogene(r) - Zugriff - Suche - Iterator - Bereichs-Ansicht Beispiel (Natürliche Ordnung) Vorher: Nachher: 23 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Ordnung Eine Ordnung muss (selbst) definiert werden, um sinnvoll (und performant) verwenden zu können. Zwei Möglichkeiten: - Comparable Interface (in o1) implementieren int compareto(object o2) - Comparator implementieren int compare(t o1, T o2) - Beide liefern: 0, wenn o1 = o2 1, wenn o1 < o2 1, wenn o1 > o2 Beispiel: 24 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Queue Beschreibung Queues sind Kollektionen, die eine Verarbeitungsreihenfolge definieren (üblich FIFO). Methoden Erweiterungen zu allgemeiner Collection: Verbrauch von Elementen: Erstes Element holen und entfernen Kapazitäten können festgelegt werden Beispiel (Kapazität 3) Vorher: Nachher: 25 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Deque Beschreibung Deques sind Queues, die von beiden Seiten manipuliert werden. Methoden Erweiterungen zu Queue: - Letztes Element holen und entfernen - Erstes/Letztes Vorkommen holen und entfernen 26 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Map Beschreibung Maps sind keine Kollektionen, aber teil Teil der Standard Bibliothek. Sie beschreiben eine Abbildung zwischen einem eindeutigen Schlüssel und einem Wert. Methoden Manipulation von Schlüsseln und Werten: put(k key, V value) remove(object key) Teile einer Map können als abgebildet werden: keyset: Alle Schlüssel als Set<K> values: Alle Werte als Collection<V> entryset: Alle Einträge als Set<Map.Entry<K,V>> 27 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Map - Beispiele Geordnet nach natürlicher Ordnung (Int): Komplexe Sachverhalte durch Verschachtelung: 28 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Implementierungen Abbildung: Java Implementierungen [5] 29 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Teil 3 Literatur 30 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)

Weiterführende Literatur 1 Maurice Naftalin, Philip Wadler - and, O Reilly Verlag, 2006 2 Oracle - Java Tutorials (http://docs.oracle.com/javase/tutorial/) 3 Angelika Langer - JavaFAQ (http://www.angelikalanger. com/genericsfaq/javagenericsfaq.html) 4 Project Valhalla (http://openjdk.java.net/projects/valhalla/) 5 Java Cheat Sheet (http://pedrocardoso.eu/ scjp-java-collections-cheat-sheet/) 30 / 1 Praktikum Effizientes Programmieren (Sommersemester 2018)