Java (J2SE) 1.5 (5.0)

Documenti analoghi
Cosa sono i Generics?

Generics in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Cosa sono i Generics?

Polimorfismo per Genericità in Java

Generic. Contenitori generici per oggetti realizzati tramite il concetto di tipo parametrico. IL NUOVO APPROCCIO (java 1.5)

Programmazione. ( a.k.a. Generics )

Programmazione Parametrica ( a.k.a. Generics )

Astrazioni Polimorfe e Tipi Generici

Il linguaggio Java: aggiunte in Java 1.5

Conoscere l uso delle collezioni in Java. Conoscere il concetto di Generics (programmazione

Collezioni. (a cura del Prof. Marco Patella)

Collezioni, mappe e iteratori (a cura del Prof. Marco Patella)

Programmazione Parametrica ( a.k.a. Generics )

TIPI PRIMITIVI E CLASSI WRAPPER

Programmazione Parametrica ( a.k.a. Generics )

Programmazione ad oggetti

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione

Testo di Riferimento (usato nei corsi precedenti)

Introduzione Generics Iteratori. Collezioni in Java. Dr. Giulio Pellitta. 13 aprile 2011

Generics & Collections

Cenni su programmazione con tipi generici (generics)

Corso di Linguaggi di Programmazione

Java generics PR

INFORMATICA III Parte B -Progettazione e Algoritmi

Fondamenti di Informatica

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

STRUTTURE DATI IN JAVA

Richiami Java e Arrays

Collezioni ALBERTO FERRARI

Arrays Array L ay ist

Corso di Linguaggi di Programmazione

UML: Aggregazione. class A { int s; public void sets(int){ }; public int gets() { }; class B {A ob; public void usea() { }; }

ArrayList. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

Polimorfismo parametrico vs polimorfismo per inclusione

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

Liste doppie. Doubly Linked Lists. GT: 6.2 (e 3.3) Argomenti della lezione

A review of some Java basics. Java pass-by-value and List<> references

Metodi di una Collection

Programmazione ad oggetti

Introduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework

Introduzione al Java Collections Framework

Ingegneria del Software 1: Generici e Collezioni

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classe Wrapper & Generics

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classe Wrapper & Generics. Strutture Dati in Java

Esempio su strutture dati dinamiche: ArrayList

Progettazione del Software

Capitolo 1. Introduzione. Cay S. Horstmann Concetti di informatica e fondamenti di Java

Fondamenti di informatica Oggetti e Java. Luca Cabibbo. Collezioni++ (Aggiunte di Marco Patella) Capitolo 26.bis. aprile 2006.

STRUTTURE DINAMICHE. (slide: A. Baratè L.A. Ludovico) Programmazione per la Musica Adriano Baratè

Introduzione al Java Collections Framework. Progettazione del Software Anno Accademico Interfacce del Collections Framework

Progettazione del Software Anno Accademico

Università Ca Foscari DAIS. Programmazione ad Oggetti. Esame del modulo 1

# $ $ A.A. 2006/07 Tutor: Daniele Tiles &== ? &7$ %% & '( ) * + $, $ $ -' %./, $ * $ $ 7 5 &7 2$ $ $ 3&4&&&

Programmazione Orientata agli Oggetti in Linguaggio Java

Capitolo 16. Programmazione generica. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Marco Faella I pattern Template Method e Factory Method

Le collezioni di oggetti. Prof. Accarino IIS Altiero Spinelli via Leopardi 132 Sesto San Giovanni

Gerarchie e polimorfismo: liste

JAVA GENERICS. Angelo Di Iorio Università di Bologna

Collezioni in Java. Emilio Di Giacomo e Walter Didimo

JSON JavaScript Object Notation. Sistemi Informativi Aziendali A.A. 2012/2013

Esempio su strutture dati dinamiche: ArrayList

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

OCA JAVA 8 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Capitolo 17. Animated Version

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Linguaggi di programmazione II AA 2010/2011 Esercitazione 2

Parte I Java. Metodologie di Programmaziona Secondo Appello, 14/2/2006 1

GRAFI. Angelo Di Iorio Università di Bologna

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Corso di Algoritmi e Strutture Dati con Laboratorio. Java Collections Framework (I parte)

Bank. Bank. BankAccount. Bank. Bank. private BankAccount[] conti; // Posizione attuale private int posizioneattuale;...

E21 Esercizi sulle collezioni in Java

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

A.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio

Le Collezioni (Java Collections)

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

Errata Corrige di Manuale di Java 8

Java Virtual Machine (JVM)

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Fornisce una interfaccia unificata per un insieme di interfacce di un sottosistema, rendendo più facile l uso di quest ultimo.

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

java.util.map ALBERTO FERRARI

Sul pattern Iterator

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione Java Avanzata Programmazione Object- Oriented in Java

WEB OF SCIENCE. COVERAGE: multidisciplinary TIME RANGE: DOCUMENT TYPES: articles, proceedings papers, books

22 - Strutture Dati (Java Collections Framework)

Transcript:

Java (J2SE) 1.5 (5.0) Motivi per le modifiche The new language features all have one thing in common: they take some common idiom and provide linguistic support for it. In other words, they shift the responsibility for writing the boilerplate code from the programmer to the compiler. --Joshua Bloch, senior staff engineer, Sun Microsystems

Nuove caratteristiche Generics Utilizzo di collezioni senza uso di casting esplicito (Compile-time type safety) Enhanced for loop Gestione automatica di un iterators Autoboxing/unboxing Consente di evitare la conversione esplicita fra tipi primitivi Avoids (come int) e classi wrapper (come Integer) Typesafe enums Fornisce tutti I benefici di un tipo Enum che abbia la caratteristica di essere Typesafe Scanner class API per semplificare l input del testo Funzionalita di input di base Etc Miglioramento delle performance Generics Un generic è un metodo che è ricompilato con differenti tipi secondo le necessità (simile ai template C++) Svantaggi: Invece di : List words = new ArrayList(); Si deve definire: List<String> words = new ArrayList<String>(); Vantaggi: Fornisce una migliore gestione del type checking durante la compilazione Evita il casting da Object. I.e., invece di String title = ((String) words.get(i)).touppercase(); utilizzaremo String title = words.get(i).touppercase();

public interface List<E> { void add(e x); Iterator<E> iterator(); public interface Iterator<E> { E next(); boolean hasnext(); List myintlist = new LinkedList(); // 1 myintlist.add(new Integer(0)); // 2 Integer x = (Integer) myintlist.iterator().next(); // 3 List<Integer> myintlist = new LinkedList<Integer>(); // 1 myintlist.add(new Integer(0)); //2 Integer x = myintlist.iterator().next(); // 3 Tipi parametrizzati Tutte le occorenze del parametro formal type (E in questo caso) sono sostituite dagli argomenti i actual type (in questo caso Integer).

List<String> ls = new ArrayList<String>(); //1 List<Object> lo = ls; //2 L istruzione 2 genera un errore in compilazione In generale, se C2 è una classe derivata da C1 e G è una dichiarazione generica, non è vero che G<C2> è un tipo derivato da G<C1>. Wildcards void printcollection(collection c) { Iterator i = c.iterator(); for (k = 0; k < c.size(); k++) { System.out.println(i.next()); void printcollection(collection<object> c) { for (Object e : c) { System.out.println(e); Wildcards void printcollection(collection<?> c) { for (Object e : c) { System.out.println(e);

public abstract class Shape { public abstract void draw(canvas c); public class Circle extends Shape { private int x, y, radius; public void draw(canvas c) {... public class Rectangle extends Shape { private int x, y, width, height; public void draw(canvas c) {... public void drawall(list<shape> shapes) { for (Shape s: shapes) { s.draw(this); public void drawall(list<? extends Shape> shapes) {... List<? extends Shape> è un esempio di bounded wildcard. Il simbolo? Sta per un tipo sconosciuto Sappiamo che in questo caso tale tipo sconosciuto e un subtype di Shape. Diremo che Shape è un upper bound di una wildcard.

Generic Methods Supponiamo di voler scrivere un metodo che prende un array di objects è una collection e pone gli oggetti dell array in una collection. Soluzione static void fromarraytocollection (Object[] a, Collection<?> c) { for (Object o : a) { c.add(o); // compile time error I metodi generici consentono di superare un tale problema. Cosi come in una dichiarazione di tipo, la dichiarazione di un metodo può essere generica cioè parametrizzata rispeotto ad uno o più parametri static <T> void fromarraytocollection (T[] a, Collection<T> c) { for (T o : a) { c.add(o); // correct

Enhanced for loop Invece di void cancelall(collection c) { for (Iterator i = c.iterator(); i.hasnext(); ) { TimerTask tt = (TimerTask) i.next(); tt.cancel(); Si può utilizzare: void cancelall(collection<timertask> c) { for (TimerTask task : c) task.cancel(); void cancelall(collection<timertask> c) { foreach TimerTask task of c) //C# notation Cosa fa task.cancel(); automaticamente JDK 1.5? Non ogni cosa come la seguente sintassi. Autoboxing Java distingue fra tipi primitivi e oggetti I tipi primitivi come int, double, sono compatti e supportano gli operatori aritmetici Le classi (Integer, Double) hanno più metodi: Integer.toString() Noi abbiamo bisogno di un wrapper per utilizzare I metodi: Integer ii = new Integer( i ); ii.hashcode() Allo stesso modo noi abbiamo bisogno di un tipo unwrap per utilizzare gli operatori aritmetici int j = ii.intvalue() * 7; Java 1.5 fa queste operazioni automaticamente: Prima: ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, new Integer(42)); int total = (list.get(0)).intvalue(); Java 1.5: ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, 42); int total = list.get(0);

Enumerations Una enumerazione, o enum, è semplicemente un insieme di costanti che rappresentano differneti valori Prima public final int SPRING = 0; public final int SUMMER = 1; public final int FALL = 2; public final int WINTER = 3; Questa soluzione è scomoda e soggetta ad errori Java 1.5 enum Season { winter, spring, summer, fall Vantaggi del nuovo enum? They provide compile-time type safety int enums don't provide any type safety at all They provide a proper name space for the enumerated type With int enums you have to prefix the constants to get any semblance of a name space. They're robust int enums are compiled into clients, and you have to recompile clients if you add, remove, or reorder constants. Printed values are informative If you print an int enum you just see a number. Because they're objects, you can put them in collections. Because they're essentially classes, you can add arbitrary fields and methods

Formatted output Simile al C/C++ printf e scanf: System.out.printf("name count%n"); //newline System.out.printf("%s %5d%n", user,total); Consultare la classe java.util.formatter per ulteriori informazioni Formati supportati per le date, etc: System.out.format("Local time: %tt", Calendar.getInstance()); // -> "Local time: 13:34:18" Le stringhe possono essere formattate utilizzando String.format: import java.util.calendar; import java.util.gregoriancalendar; import static java.util.calendar.*; Calendar c = new GregorianCalendar(1995, MAY, 23); String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c); // -> s == "Duke's Birthday: May 23, 1995" Classe Scanner Fornisce un meccanisco di input per leggere dati dalla console Per esempio per leggere una stringa dallo standard input e leggere un valore int: Scanner s=scanner.create(system.in); String param= s.next(); int value=s.nextint(); s.close(); Il metodo next e nexint di Scanner bloccano se non sono disponibili dati Forniscono il supporto per le regular expression Per processare input più complessi, algoritmi di pattern matching sono disponibili nella classe java.util.formatter