Programmieren in Java

Ähnliche Dokumente
Programmieren in Java

Software Entwicklung 1

Programmieren in Java

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

Software Entwicklung 1

Kapitel 5: Iterierbare Container

Programmierkurs Java

Programmieren in Java

ALP II Dynamische Datenmengen

II.4.6 Collections - 1 -

Programmieren in Java

Programmieren in Java

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

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

II.4.4 Exceptions - 1 -

3. Übungsbesprechung Programmkonstruktion

Inner Class. 1 public class OuterClass { 2 private int var; 3 public class InnerClass { 4 void methoda() {}; 5 } 6 public void methodb() {}; 7 }

II.4.2 Abstrakte Klassen und Interfaces - 1 -

Programmieren in Java

Neuere Sprachelemente in Java

Übung zur Vorlesung Programmierung

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

Überblick. Rekursive Methoden. Backtracking. Memorization. Einfache rekursive Datenstrukturen. Aufzählen, Untermengen, Permutationen, Bitmengen

II.4.5 Generische Datentypen - 1 -

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

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Tutoraufgabe 1 (FunctionalSet):

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Programmieren in Java

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

Programmieren in Java

Universität Karlsruhe (TH)

Enhanced Collection API

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

Programmieren in Java -Eingangstest-

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

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

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

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

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

Tutoraufgabe 1 (Collections):

Programmierzertifikat Objekt-Orientierte Programmierung mit Java

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

Objektorientierte Programmierung

Programmieren in Java

Abschnitt 10: Datenstrukturen

Interfaces und Generics

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Programmieren in Java

Vorkurs Informatik WiSe 15/16

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

Einstieg in die Informatik mit Java

Klausur zur Vorlesung Einführung in die Programmierung

Algorithmen und Datenstrukturen CS1017

Programmieren in Java

! 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

Generisches Programmieren. Generisches Programmieren

Programmieren in Java

Kapitel 5: Interfaces

Methoden und Wrapperklassen

Mengen und Multimengen

12 Abstrakte Klassen, finale Klassen und Interfaces

Wiederholung aus SWE2

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

Programmierung WS14/15 Lösung - Präsenzübung C. Aschermann, F. Frohn, J. Hensel, T. Ströder

Prüfung Softwareentwicklung II (IB)

Programmieren in Java

Theorie zu Übung 8 Implementierung in Java

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Wir wollen in einer Bank die Konten der Kunden modellieren (um sie dann entspr. zu verarbeiten

Programmieren in Java

14 Abstrakte Klassen, finale Klassen, Interfaces

Programmieren 2 16 Java Collections und Generizität

Vorlesung 07: Collections. Peter Thiemann SS 2010

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

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

n 1. Grundzüge der Objektorientierung n 2. Methoden, Unterprogramme und Parameter n 3. Datenabstraktion n 4. Konstruktoren n 5. Vordefinierte Klassen

Prof. Dr. Uwe Schmidt. 30. Januar 2017

Lösungshinweise/-vorschläge zum Übungsblatt 8: Software-Entwicklung 1 (WS 2017/18)

Probeklausur zur Vorlesung

14 Abstrakte Klassen, finale Klassen, Interfaces

Programmiermethodik 2. Klausur Lösung

Tutoraufgabe 1 (Implementierung eines ADTs):

Java I Vorlesung 6 Referenz-Datentypen

Java I Vorlesung Generics und Packages

Programmiermethodik 3. Klausur Lösung

ADT: Java Collections und ArrayList

Algorithmen und Datenstrukturen

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Funktionales Programmieren mit objektorientierten Sprachen

Einstieg in die Informatik mit Java

Vorkurs Informatik WiSe 17/18

Informatik II Musterlösung

Transkript:

Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19

Inhalt Generics Generische Klassen und Interfaces Exkurs: Wrapperklassen Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 2 / 19

Generische Klassen und Interfaces Generische Klassen und Interfaces Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 3 / 19

Generische Klassen und Interfaces Generics Generische Klassen, Interfaces und Methoden erlauben die Abstraktion von den konkreten Typen der Objekte, die in Instanzvariablen und lokalen Variablen gespeichert werden oder als Parameter übergeben werden. Hauptverwendungsbereiche: Containerklassen (Collections) Abstraktion eines Deklarationsmusters Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 4 / 19

Generische Klassen und Interfaces Generisches Paar 1 public class GenericPair<X,Y> { 2 private X fst; 3 private Y snd; 4 GenericPair(X fst, Y snd) { 5 this.fst = fst; 6 this.snd = snd; 7 } 8 public X getfst() { 9 return this.fst; 10 } 11 public Y getsnd() { 12 return this.snd; 13 } 14 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 5 / 19

Generics Generische Klassen und Interfaces Generische Listen IList<X> MT<X> Cons<X> fst : X rst : IList<X> IList<X> ist ein generisches Interface MT<X> und Cons<X> sind generische Klassen X ist dabei eine Typvariable X steht für einen beliebigen Referenztyp (Klassen- oder Interfacetyp), nicht für einen primitiven Typ Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 6 / 19

Generische Klassen und Interfaces Implementierung: Generische Listen 1 // Listen mit beliebigen Elementen 2 interface IList<X> { 16 } 1 // Variante leere Liste 2 class MT<X> implements IList<X> { 3 public MT() {} 16 } 1 // Variante nicht leere Liste 2 class Cons<X> implements IList<X> { 3 private X fst; 4 private IList<X> rst; 5 6 public Cons (X fst, IList<X> rst) { 7 this.fst = fst; 8 this.rst = rst; 9 } 27 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 7 / 19

Generische Klassen und Interfaces Verwendung von generischen Listen Liste von int bzw. Integer Achtung: Typvariablen können nur für Referenztypen stehen! Anstelle von primitiven Typen müssen die Wrapperklassen verwendet werden (Konversion von Werten automatisch dank Autoboxing) 1 // Aufbau der Liste 2 IList<Integer> i1 = new MT<Integer> (); 3 IList<Integer> i2 = new Cons<Integer> (32168, i1); 4 IList<Integer> i3 = new Cons<Integer> (new Integer ( 32768 ), i2); 5 IList<Integer> i4 = new Cons<Integer> (new Integer ( 14), i3); Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 8 / 19

Exkurs: Wrapperklassen Exkurs: Wrapperklassen Für jeden primitiven Datentyp stellt Java eine Klasse bereit, deren Instanzen einen Wert des Typs in ein Objekt verpacken. Beispiele primitiver Typ int double boolean Wrapperklasse java.lang.integer java.lang.double java.lang.boolean Klassen- und Interfacetypen heißen (im Unterschied zu primitiven Typen) auch Referenztypen. Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 9 / 19

Exkurs: Wrapperklassen Methoden von Wrapperklassen Wrapperklassen beinhalten (statische) Hilfsmethoden und Felder zum Umgang mit Werten des zugehörigen primitiven Datentyps. Vorsicht: Java konvertiert automatisch zwischen primitiven Werten und Objekten der Wrapperklassen. (autoboxing) Beispiel: Integer (Auszug) 1 static int MAX VALUE; // maximaler Wert von int 2 static int MIN VALUE; // minimaler Wert von int 3 4 Integer (int value); 5 Integer (String s); // konvertiert String > int 6 7 int compareto(integer anotherinteger); 8 int intvalue(); 9 static int parseint(string s); Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 10 / 19

Iterator Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 11 / 19

Erinnerung: Das Iterator Interface (abgekürzt) 1 public interface Iterator<E> { 2 / 3 @return {@code true} if the iteration has more elements 4 / 5 boolean hasnext(); 6 7 / 8 @return the next element in the iteration 9 / 10 E next(); 11 12 / 13 Removes from the underlying collection the last element returned 14 by this iterator (optional operation). This method can be called 15 only once per call to {@link #next}. 16 / 17 void remove(); 18 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 12 / 19

Iterable Ein Iterator kann aus jedem Referenztyp gewonnen werden, der das Interface java.lang.iterable<x> implementiert. Jede Collection implementiert Iterable. Ein Array [T] implementiert Iterable<T> Iterable wird auch für foreach-schleifen benötigt. 1 public interface Iterable<T> { 2 3 / 4 @return an Iterator over a set of elements of type T. 5 / 6 Iterator<T> iterator(); 7 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 13 / 19

Aufgabe: Implementiere Iterator mit IList Definiere IList mit Methoden empty(), getelement() und getrest(). Um einen Iterator zu stellen, muss IList auch die iterator() Methode implementieren. Daher ist IList<X> eine Erweiterung von Iterable<X>. 1 public interface IList<X> extends Iterable<X> { 2 boolean empty(); 3 X getelement(); 4 IList<X> getrest(); 5 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 14 / 19

Implementierung des Iterators Immutable Wrapper 1 public class IListIterator<E> implements Iterator<E> { 2 private IList<E> list; // current position in the list 3 public IListIterator(IList<E> list) { this.list = list; } 4 5 public boolean hasnext() { 6 return!list.empty(); 7 } 8 9 public E next() { 10 if (list.empty()) { 11 throw new IllegalStateException( Iterator called next on empty collection ); 12 } 13 E element = list.getelement(); 14 list = list.getrest(); 15 return element; 16 } 17 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 15 / 19

Implementierung der Listenklassen 1 public class Nil<X> 2 implements IList<X> { 3 4 public Iterator<X> iterator() { 5 return new IListIterator<X>(this); 6 } 7 8 9 10 11 public Nil() { 12 } 13 14 15 } 1 public class Cons<X> 2 implements IList<X> { 3 4 public Iterator<X> iterator() { 5 return new IListIterator<X>(this); 6 } 7 8 private final X element; 9 private final IList<X> rest; 10 11 public Cons(X elem, IList<X> rest) { 12 this.element = elem; 13 this.rest = rest; 14 } 15 } Gleiche Implementierung von iterator()! Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 16 / 19

Implementierung der Listenklassen 1 public class Nil<X> 2 implements IList<X> { 3 // see above 4 5 public boolean empty() { 6 return true; 7 } 8 9 public X getelement() { 10 return null; 11 } 12 13 public IList<X> getrest() { 14 return null; 15 } 16 } 1 public class Cons<X> 2 implements IList<X> { 3 // see above 4 5 public boolean empty() { 6 return false; 7 } 8 9 public X getelement() { 10 return this.element; 11 } 12 13 public IList<X> getrest() { 14 return this.rest; 15 } 16 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 17 / 19

iterator als default Methode Die Implementierung von iterator war dieselbe in den Klassen Nil<X> und Cons<X>. Die Implementierung einer public Methode kann auch ins Interface geschoben werden. Das Schluesselwort default zeigt an, dass es sich um eine vordefinierte Implementierung handelt, die gilt, wenn sonst keine Implementierung definiert ist. 1 public interface IList<X> extends Iterable<X> { 2 boolean empty(); 3 X getelement(); 4 IList<X> getrest(); 5 default Iterator<X> iterator() { 6 return new IListIterator<X>(this); 7 } 8 } Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 18 / 19

Fragen? Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 19 / 19