8. Generics Grundlagen der Programmierung 1 (Java)

Ähnliche Dokumente
Grundlagen der Programmierung Prof. H. Mössenböck. 15. Pakete

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Programmieren I und II

11. Komponenten Grundlagen der Programmierung 1 (Java)

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

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

7. Pakete Grundlagen der Programmierung 1 (Java)

Programmieren 2 16 Java Collections und Generizität

Interfaces und Generics

Informatik II Übung 6

9. Vererbung Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

II.4.5 Generische Datentypen - 1 -

9. Fehler und Ausnahmen Grundlagen der Programmierung 1 (Java)

Einstieg in die Informatik mit Java

Java I Vorlesung Generics und Packages

12. Rekursion Grundlagen der Programmierung 1 (Java)

Einstieg in die Informatik mit Java

Neuere Sprachelemente in Java

Dynamische Typinformation A01 OOP. Dynamische Typinformation

JAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1

1. Programmieren gegen Schnittstellen Advanced Programming Techniques

Arten des universellen Polymorphismus

Einstieg in die Informatik mit Java

Gebundene Typparameter

Kapitel 5: Interfaces

Kapitel 8. Generische Klassen

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Einstieg in die Informatik mit Java

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

Objektorientierte Programmierung Studiengang Medieninformatik

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

4. Vererbung Die Klasse Object. Die Klasse Object

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

Programmieren in Java -Eingangstest-

Kapitel 5: Iterierbare Container

Kapitel 8. Generische Klassen

II.4.4 Exceptions - 1 -

Algorithmen und Datenstrukturen

Info B VL 8: Abstrakte Klassen & Interfaces

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

Programmieren I. Dokumentation mit Javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Einführung in Javadoc

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

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

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

Vererbung. CoMa-Übung XI TU Berlin. CoMa-Übung XI (TU Berlin) Vererbung / 47

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Stack und Queue. Thomas Schwotzer

Programmiermethodik 1. Klausur

Generisches Programmieren. Generisches Programmieren

Algorithmen und Datenstrukturen 07

Teil V. Generics und Kollektionen in Java

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

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

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

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

Programmieren in Java

Java I Vorlesung Collections

Schnittstellen, Stack und Queue

Programmieren in Java

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

JAVA Kommentieren mit Javadoc

Ordnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion

1 Polymorphie (Vielgestaltigkeit)

Informatik II Übung 6 Gruppe 7

Objektorientierte Programmierung Studiengang Medieninformatik

EINFÜHRUNG IN DIE PROGRAMMIERUNG

ALP II Dynamische Datenmengen Datenabstraktion

Programmieren 1 09 Vererbung und Polymorphie

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

Programmierkurs Java

Transkript:

8. Generics Grundlagen der Programmierung 1 (Java) Fachhochschule Darmstadt Haardtring 100 D-64295 Darmstadt Prof. Dr. Bernhard Humm FH Darmstadt, 6. Dezember 2005

Einordnung im Kontext der Vorlesung 1. Einführung 2. Einfache Programme 3. Kontrollstrukturen 4. Objekt-Orientierung I 5. Algorithmen und Datenstrukturen I 6. Interfaces 7. Pakete 8. Generics 10. Fehler und Ausnahmen 11. Algorithmen und Datenstrukturen II 12. Objektorientierung II 13. Komponenten 14. Design 15. Die Java Klassenbibliothek I 16. Die Java Klassenbibliothek II 17. Software-Kategorien 9. Rekursion 6.12.2005, Seite 2

Agenda Agenda Generics JavaDoc 6.12.2005, Seite 3

Generics Generische Klasse List generischer Typ Platzhaltertyp class List<T> { T[] data; List(int size) { void add(t x) { T remove() { geht auch für Interfaces interface I<T> Platzhaltertyp T kann wie normaler Typ verwendet werden Benutzung List<Integer> a = new List<Integer>(100); a.add(3); // nur Integer-Parameter erlaubt; hier Boxing int i = a.remove(); // liefert Integer-Wert; kein Cast nötig aktueller Typparameter muß ein Referenztyp sein (Integer, Rectangle, ) List<Person> b = new List<Person>(100); b.add(new Person()); // nur Person-Parameter erlaubt Person p = b.remove(); // kein Cast nötig Vorteile Homogene Datenstruktur mit Compilezeit-Typprüfung Man muß keine Casts schreiben Generizität auch in Ada, Eiffel, C++ (Templates), C# 6.12.2005, Seite 4

Generics Rohtypen Generischer Typ class List<T> { T[] data; List(int size) { void add(t x) { T remove() { wird übersetzt zu Rohtyp class List { Object[] data; List(int size) { void add(object x) { Object remove() { Alle aus List<T> erzeugten Typen werden auf denselben Rohtyp abgebildet List<String> stringlist = new List<String>(10); stringlist.add("abc"); List<Integer> intlist = new List<Integer>(100); intlist.add(15); rufen beide add von List auf und übergeben einen Object-Parameter. Compiler stellt aber sicher, daß intlist nur mit Integer-Werten verwendet wird. Kompatibilitätsbeziehungen List<String> List list = new List<String>(10); Object obj = new List<String>(10); Object List List<Integer> x = new List<String>(10); List<Integer> // ok // ok // verboten 6.12.2005, Seite 5

Generics Constraints (Bounded Type Parameters) Annahmen über Platzhaltertypen werden als Basistypen ausgedrückt Interface oder class SortedList <T extends Comparable> { Basisklasse T[] data = ; int nelements = 0; void add(t elem) { int i = nelements - 1; while (i >= 0 && elem.compareto(data[i]) > 0) {data[i+1] = data[i]; i--; data[i+1] = elem; nelements++; Erlaubt Operationen auf Elemente von Platzhaltertypen Verwendung SortedList<String> list = new SortedList<String>(); list.add("john"); Parameter muß Comparable unterstützen 6.12.2005, Seite 6

Generics Generizität und Vererbung class List <T> extends BaseList<T> { kann auch generische Interfaces implementieren List<T> implements I<T> Von welchen Klassen darf eine generische Klasse erben? von einer gewöhnlichen Klasse class B<X> extends A { von einer konkretisierten class B<X> extends A<String> { generischen Klasse von einer generischen Klasse class B<X> extends A<X> { mit gleichem Platzhalter 6.12.2005, Seite 7

Generics Kompatibilität in Zuweisungen Zuweisung von X<T> an gewöhnliche Oberklasse class A { class B<T> extends A { class C<T,U> extends A { B<T> C<T,U> A A a1 = new B<Integer>(); A a2 = new C<Integer, Float>(); B<Integer> B<Float> C<Integer,Float> C<Float,Integer> Zuweisung von X<T> an generische Oberklasse class A<T> { class B<T> extends A<T> { class C<T,U> extends A<T> { A<T> B<T> C<T,U> A<Integer> a1 = new B<Integer>(); A<Integer> a2 = new C<Integer, Float>(); A<Short> a3 = new B<Integer>(); erlaubt, wenn korrespondierende Platzhalter durch denselben Typ ersetzt wurden verboten 6.12.2005, Seite 8

Generics Überschreiben von Methoden class List<T> { void add(t x) { Wenn von konkretisierter Klasse geerbt class MyList extends List<Integer> { void add(integer x) { T wird durch konkreten Typ Integer ersetzt Wenn von generischer Klasse geerbt class MyList<T> extends List<T> { void add(t x) { T bleibt als Platzhalter Folgendes geht nicht (man kann keinen Platzhalter erben) class MyList extends List<T> { void add(t x) { 6.12.2005, Seite 9

Agenda Agenda Generics JavaDoc 6.12.2005, Seite 10

JavaDoc Dokumentationskommentare Dokumentationskommentare /** */ können vor die Deklarationen von Klassen, Methoden, Feldern gesetzt werden. Werkzeug javadoc erzeugt daraus Dokumentation in HTML /** A stack of integers. This is a FIFO data structure storing integers in a stack-like way. */ public class Stack { /** The elements in the stack. */ private int[] data; /** Push an integer on the stack. If the stack is full an error is reported and the program stops. */ public void push (int x) { 1. Satz bis Punkt wird in Kurzdoku übernommen Rest wird in Langdoku übernommen 6.12.2005, Seite 11

JavaDoc Kommentare für Klassen /** * Description of class or interface. * * @author $Author$ * @version $Id$ * * @see javax.swing.text.document * @since * @deprecated */ public class Test { 6.12.2005, Seite 12

JavaDoc Tag Conventions Standardtags in der Reiheenfolge ihrer Verwendung @author (Nur bei Klassen und Schnittstellen; Pflicht) @version (Nur bei Klassen und Schnittstellen; Pflicht) @param (Nur bei Methoden und Konstructoren ; Pflicht) @return (Nur bei Methoden ; Pflicht) @exception (@throws ist ein Synonym seit Javadoc 1.2) @see @since @serial (oder @serialfield or @serialdata) @deprecated 6.12.2005, Seite 13

JavaDoc Erzeugte HTML-Datei (Stack.html) 6.12.2005, Seite 14

JavaDoc Generierung in Eclipse 6.12.2005, Seite 15