Java Generics & Collections

Ähnliche Dokumente
Java Einführung Collections

Objektorientierte Programmierung

Gebundene Typparameter

Einführung in die Programmierung

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

1 Polymorphie (Vielgestaltigkeit)

Java: Vererbung. Teil 3: super()

Einführung in die Java- Programmierung

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

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

Prinzipien Objektorientierter Programmierung

U08 Entwurfsmuster (II)

Objektorientierte Programmierung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Javakurs zu Informatik I. Henning Heitkötter

Programmierkurs Java

Testen mit JUnit. Motivation

Java Kurs für Anfänger Einheit 5 Methoden

Scala kann auch faul sein

Programmieren in Java

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

Große Übung Praktische Informatik 1

1 Mathematische Grundlagen

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

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

Softwarelösungen: Versuch 4

Funktionale Programmierung mit Haskell

Client-Server-Beziehungen

Factory Method (Virtual Constructor)

Java Einführung Abstrakte Klassen und Interfaces

4. AuD Tafelübung T-C3

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

JAVA KURS COLLECTION

Vererbung & Schnittstellen in C#

Computeranwendung und Programmierung (CuP)

Graphic Coding. Klausur. 9. Februar Kurs A

Programmieren Tutorium

Datenstrukturen in Java

BEISPIELKLAUSUR Softwareentwicklung:

Diana Lange. Generative Gestaltung Operatoren

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Liste Programmieren Java Überblick

19 Collections Framework

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

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Algorithmen und Datenstrukturen

Modellierung und Programmierung 1

OO Softwareentwicklung

Die Java Stream API. Funktionale Programmierung mit der Stream API des JDK 1.8. Prof. Dr. Nikolaus Wulff

Unsere Webapplikation erweitern

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

Einstieg in die Informatik mit Java

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

7 Rechnen mit Polynomen

Testklausur 1 zur Vorlesung. Modellierung und Programmierung I. Dr. Monika Meiler Zeit: 60 Minuten

GI-Technologien zur Umsetzung der EU-Wasserrahmenrichtlinie (WRRL): Wissensbasen. Teil 1: Einführung: Wissensbasis und Ontologie.

Einführung in die Programmierung

Rundung und Casting von Zahlen

12) Generische Datenstrukturen

Einführung in die Programmierung

WinWerk. Prozess 6a Rabatt gemäss Vorjahresverbrauch. KMU Ratgeber AG. Inhaltsverzeichnis. Im Ifang Effretikon

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

EndTermTest PROGALGO WS1516 A

Kapitel 6. Vererbung

Objektorientierte Programmierung OOP

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Datenbankmodelle 1. Das Entity-Relationship-Modell

Objektorientiertes JavaScript

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

Übungen zu Softwaretechnik

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

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

UML Klassendiagramm. Igor Karlinskiy, Mikhail Gavrish

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Klassendiagramm. Kurzer Überblick über UML - Stand BlaBla

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

Grundzüge der Programmierung. Konzepte der objektorientierten Programmierung (OOP) VERERBUNG

Software Engineering Klassendiagramme Assoziationen

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

Kapitel 6. Vererbung

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Grundlagen von Python

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Kapitel MK:IV. IV. Modellieren mit Constraints

SEP 114. Design by Contract

Design by Contract with JML

Tagesprogramm

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Transkript:

Java Praktikum Effizientes Programmieren (Sommersemester 2015) Dennis Reuling

Agenda 1 2 3 1 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Java Subtyping Teil 1 2 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Ein Beispiel... Java Subtyping Elemente nach einer Definition ordnen: String Integer 2 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

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

Mögliche Lösung Java Auf gemeinsamen Typ zurückziehen, hier Object: Subtyping 3 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

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

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

es Java Subtyping 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Übersicht Java Subtyping 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Vererbung vs Java Subtyping Vererbung Drückt Ist-Ein aus Beispiel: Wenn Eigenschaften übernommen werden und die Subklasse die Oberklasse richtig darstellt 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

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

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

Subtyping Java Subtyping Ist folgender Code korrekt? 9 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Subtyping Java Subtyping Ist folgender Code korrekt? Nein, aufgrund von ( später!) 9 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Subtyping Java Generell: Subtyping Abbildung: Vererbungsbeziehung [2] 10 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Subtyping Java Generell: Subtyping Abbildung: Vererbungsbeziehung [2] Lösung: (mit Subtyping) 10 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

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

- Beispiele Java Subtyping 12 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

- Beispiele Java Subtyping Upper: Tierärzte dürfen nur Tiere behandeln. 12 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

- Beispiele Java Subtyping Upper: Tierärzte dürfen nur Tiere behandeln. Lower: Tierärzte dürfen nur Tiere und alle Supertypen behandeln (Katzen). 12 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

- Beispiele Java Subtyping 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

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

Wiederholung Java Subtyping Abbildung: Vererbungsbeziehung [2] Warum Object als gemeinsame Superklasse? 14 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Grundlegendes Java Subtyping 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Beispiele Java Subtyping Unbound - vorher Unbound - nachher Upper - vorher Upper - nachher 16 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

(Auszug) Java Subtyping 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

(Auszug) Java Subtyping 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Java Einführung Schnittstellen Set List Queue Deque Map Implementation Teil 2 18 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

es Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 Java sowie allgemeingültige Schnittstellen 18 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Übersicht Java Einführung Schnittstellen Set List Queue Deque Map Implementation Abbildung: Java Schnittstellen [2] 19 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Interface Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Set Java Beschreibung Sets sind Kollektionen, die keine Duplikate enthalten dürfen. Einführung Schnittstellen Set List Queue Deque Map Implementation Methoden Keine Erweiterung zu allgemeiner Collection 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Gleichheit Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

List Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Ordnung Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Queue Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Deque Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Map Java Einführung Schnittstellen Set List Queue Deque Map Implementation 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 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Map - Beispiele Java Geordnet nach natürlicher Ordnung (Int): Einführung Schnittstellen Set List Queue Deque Map Implementation Komplexe Sachverhalte durch Verschachtelung: 28 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Implementierungen Java Einführung Schnittstellen Set List Queue Deque Map Implementation Abbildung: Java Implementierungen [5] 29 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

Java Teil 3 30 / 30 Praktikum Effizientes Programmieren (Sommersemester 2015)

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