Neuere Sprachelemente in Java

Ähnliche Dokumente
JAVA 5 Generics. Proseminar Programmiersprachen Thema Java 5 Generics 1

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Polymorphie in Java oder Generics und Co.

8. Generics Grundlagen der Programmierung 1 (Java)

Vorlesung Informatik 2

1 Polymorphie (Vielgestaltigkeit)

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

Algorithmen und Programmierung II

Generische Typen in Java

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Java: Vererbung. Teil 3: super()

Java Einführung Collections

Neues ab JDK 1.5. Praktikum aus Softwareentwicklung 2. Java Praktikum SS

Javakurs für Anfänger

2. Vererbung und Polymorphie. Vererbung (1/2) Beispiel (1/2) Vererbung (2/2) Eine Unterklasse wird folgendermaßen definiert

Die Programmiersprache C Eine Einführung

Java-Schulung Grundlagen

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Probeklausur: Programmierung WS04/05

Java Vererbung. Inhalt

Einstieg in die Informatik mit Java

Teil V. Generics und Kollektionen in Java

Höhere Programmierkonzepte Testklausur

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Präsentation Interfaces

JAVA - Methoden

Repetitorium Informatik (Java)

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

Vererbung. Martin Wirsing. Ziele. Vererbung

Generische Datenstrukturen

Programmieren in Java

Javakurs zu Informatik I. Henning Heitkötter

Kapitel 6. Vererbung

Javakurs für Anfänger

Javakurs für Anfänger

Java I Vorlesung 6 Referenz-Datentypen

Kapitel 6. Vererbung

Kapitel 6. Vererbung

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

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor

Java Einführung Abstrakte Klassen und Interfaces

Versuchsziele Kenntnisse in der Anwendung von: Sortieren mit Klassen Benutzung von generischen Klassen o Definition o Sortierung.

Java Generics & Collections

A(T1) A(T2) A(T1) A(T2)

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Interfaces

Enumerations und innere Klassen

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Gebundene Typparameter

Schnittstellen implementieren am Beispiel Suchbaum

Algorithmen und Datenstrukturen 07

AuD-Tafelübung T-B5b

Programmieren in Java

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

Objektorientierte Programmierung

Fortgeschrittene Programmierung

Programmieren I + II Regeln der Code-Formatierung

Programmieren I. Kapitel 8. Vererbung

Java Einführung Klassendefinitionen

Master of Advanced Studies in Software Engineering Java - Advanced Concepts. Musteraufgaben

Interfaces und Vererbung

Einstieg in die Informatik mit Java

Einführung in die Programmierung

Wiederholung zur Vorlesung Programmieren

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

JAVA KURS COLLECTION

Repetitorium Informatik (Java)

Theorie zu Übung 8 Implementierung in Java

Software-Engineering Software-Management

6 Speicherorganisation

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Typumwandlungen bei Referenztypen

12) Generische Datenstrukturen

12) Generische Datenstrukturen

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java I Vorlesung Vererbung und Sichtbarkeit

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Probeklausur: Programmierung WS04/05

JAVA - Methoden - Rekursion

Enum Aufzählungstypen in Java

Vorlesung Programmieren

Prinzipien Objektorientierter Programmierung

Beispiel: DB-Mock (1/7)

5. Tutorium zu Programmieren

Teil 1: Grundeigenschaften von Rechnern und Software

Transkript:

Softwaretechnik 1 Vorlesung Neuere Sprachelemente in Java Prof. Dr. Bernhard Rumpe Technische Universität Braunschweig http://www.sse.cs.tu-bs.de/

Seite 2 Neuerungen seit Java 5.0 Java Spracherweiterungen Statische Imports Variable Parameteranzahl Automatisches Boxing Annotations Aufzählungstypen Iteration Generische Typen Verbesserung der Java Virtual Machine Erweiterung der Klassenbibliothek...

Seite 3 Java 5.0 Statische Imports alt: Zugriff auf statische Elemente über Klassennamen double s = Math.cos(Math.PI); neu: Import von statischen Elementen, unqualifizierte Verwendung import static java.lang.math.*; double s = cos(pi);

Seite 4 Java 5.0 Variable Parameteranzahl alt: Methoden nur mit fester Parameteranzahl int sum(int val1, int val2) {... ; int sum(int val1, int val2, int val3) {... ; int sum(list values) {... ; neu: Methoden auch mit beliebiger Parameteranzahl, Zugriff wie auf ein Array int sum(int... values) { int result = 0; for(int i = 0; i < values.length; i++) result += values[i]; return result;

Seite 5 Java 5.0 Automatisches Boxing alt: manuelles ein- und auspacken der primitiven Typen Integer i1 = new Integer (5); //boxing list.add(i1); int i2 = i1.intvalue() + 2 ; //unboxing neu: list.add(5); //auto-boxing Integer i1 = 5; //auto-boxing int i2 = i1 + 2; //auto-unboxing

Seite 6 Java 5.0 Annotations Metainformationen im Quellcode Kein direkter Einfluss auf die Semantik Lesbar durch Tools oder Libraries aus Quellcode, Class-Files und zur Laufzeit Eigene Annotations können entwickelt werden Beispiel (JUnit 4 Test): @Test(timeout = 1000) public void testinfinity() { while (true) ; @ gefolgt vom Annotation-Typ Parameter können übergeben werden

Seite 7 Java 5.0 Aufzählungstypen alt: kein expliziter Aufzählungstyp vorhanden Abhilfe: Liste von Konstanten Aufzählungsmuster neu: enum Wochentag { MO, DI, MI, DO, FR, SA, SO; public boolean iswerktag() { switch(this) { case SO : case SA : return false; default : return true; public static void main(string[] args) { Wochentag t = Wochentag.DI; System.out.println(t + " " + t.iswerktag()); // DI true

Seite 8 Java 5.0 Iteration alt: Schleifensteuerung explizit ausprogrammieren public static void main(string[] args) { for ( int i = 0; i < args.length; i++ ) System.out.println( args[i] ); neu: for each verfügbar, falls Interface java.lang.iterable implementiert wird für alle neuen Collections und Arrays verfügbar public static void main(string[] args) { for ( String arg : args ) System.out.println( arg );

Seite 9 Java 5.0 Generische Typen, Motivation Bisher: Containerklassen speichern Objekte vom Typ Object Folgen: ArrayList stringlist = new ArrayList(); stringlist.add ( Hallo ); Container akzeptiert jedes Objekt. Kein Schutz gegen Objekte eines unerwünschten Typs. stringlist.add (new Integer(5)); Container liefert immer Object. Cast von Objekten nötig, da Typinformation verloren geht. String s0 = (String) stringlist.get(0); String s1 = (String) stringlist.get(1); // Laufzeitfehler

Seite 10 Java 5.0 Generische Typen, Lösung Generische Typen erlauben statische Überprüfung der Typsicherheit zur Übersetzungszeit ArrayList<String> stringlist = new ArrayList <String>(); stringlist.add ( Hallo ); stringlist.add (new Integer(5)); //compile Fehler String s0 = stringlist.get(0); Es werden keine Casts mehr benötigt Typinformation bleibt erhalten

Seite 11 Java 5.0 Generische Typen Klassen oder Interfaces wie bisher definieren + Typvariable T Typvariable im Klassenrumpf wie konkreter Typ verwendbar class Box <T> { T inhalt; Box (T inhalt) {this.inhalt = inhalt; void setinhalt (T inhalt) { ; T getinhalt() { ; Anwendung: Festlegung auf einen konkreten Typ für T Box<String> b1 = new Box<String>( Hallo ); Box<Integer> b2 = new Box<Integer>(5);

Seite 12 Java 5.0 Generische Typen, mehrere Typvariablen Definition mit Typvariablen-Liste: <T1, T2, > class Pair <T,U> { T first; U second; Anwendung: Pair(T fst, U snd) { first = fst; second = snd; Pair<String, Integer> p = new Pair<String, Integer> ( Hallo, 5);

Seite 13 Java 5.0 Generische Typen, Vererbung Von generischen Klassen lassen sich Unterklassen bilden class UniPair <T> extends Pair <T,T> { UniPair(T fst, T snd) { super(fst,snd); Unterklassen müssen keine generischen Klassen sein class StringUniPair extends UniPair <String> { StringUniPair(String fst, String snd) { super(fst,snd);

Seite 14 Java 5.0 Generische Typen, Vererbung Etwas unintuitive Typbeziehung: LinkedList<String> ist Subtyp von List<String> List<String> ist aber nicht Subtyp von List<Object> List<String> slist = new LinkedList<String>(); List<Object> olist = slist; //nicht möglich olist.add(new Object()); String s = slist.get(0); //Zuweisung von Object an String

Seite 15 Java 5.0 Generische Typen, Wildcards Problem: Ausgabe einer Collection alt: public void printcollection (Collection c) { neu: 1. Versuch mit Generics public void printcollection (Collection<Object> c) { Iterator i = c.iterator(); for(k=0; k<c.size(); k++) { System.out.println(i.next()); for(object e: c) { System.out.println(e); neu: 2. Versuch, Collection<Object> ist kein Supertyp aller Collections, es ist Collection<?> (collection of unknown) public void printcollection (Collection<?> c) { for(object e: c) { System.out.println(e);

Seite 16 Java 5.0 Generische Typen, Wildcards ArrayList<? extends Number> list; ArrayList<? super Number> list; Typargument muss vom Number abgeleitet sein (upper bound wildcard) list = new ArrayList<Integer>(); //ok list = new ArrayList<Object>(); //error Lesen + Number n = list.get(0); //ok Typargument muss Basisklasse vom Number sein (lower bound wildcard) list = new ArrayList<Integer>(); //error list = new ArrayList<Object>(); //ok Lesen - Number n = list.get(0); //error Schreiben - list.add(new Integer(5)); //error Schreiben + list.add(new Integer(5)); //ok

Seite 17 Java 5.0 Generische Typen, Wildcards Beispiel: List<? extends Number> numberlist; List<Integer> intlist = new ArrayList<Integer>(); numberlist = intlist; numberlist.add(new Integer(0)); //compile Fehler intlist.add(new Integer(0));

Seite 18 Java 5.0 Generische Typen, Type Bounds Type Bounds mit extends funktionieren nicht nur für Wildcards sondern auch für Typvariablen Einschränkung der Typen durch maximal 1 Oberklasse und beliebige Anzahl von Interfaces class Box<T extends Comparable & Serializable> {

Seite 19 Java 5.0 Generische Methoden Problem: Elemente eines Arrays in eine Collection füllen 1. Versuch: static void fromarraytocollection (Object[ ] a, Collection <?> c){ for (Object o : a) c.add(o); // compile Fehler Objects können nicht in Collection mit unbekanntem Typ eingefügt werden. 2. Versuch: Verwendung einer Generischen Methode, einer Methode, die mit einer Typvariablen parametrisiert ist. static <T> void fromarraytocollection (T[ ] a, Collection <T> c){ for (T o : a) c.add(o);

Seite 20 Neuerungen seit Java 5.0 Java Spracherweiterungen Statische Imports Variable Parameteranzahl Automatisches Boxing Aufzählungstypen Iteration Generische Typen Annotations Verbesserung der Java Virtual Machine Erweiterung der Klassenbibliothek...