Il linguaggio Java: aggiunte in Java 1.5

Documenti analoghi
Polimorfismo per Genericità in Java

Cosa sono i Generics?

Astrazioni Polimorfe e Tipi Generici

Programmazione. ( a.k.a. Generics )

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

Generics & Collections

Collezioni. (a cura del Prof. Marco Patella)

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList

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

STRUTTURE DATI: OLTRE GLI ARRAY LISTE

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

Testo di Riferimento (usato nei corsi precedenti)

L ereditarieta` Riuso del software: Ereditarieta`, Composizione, Polimorfismo e Binding Dinamico Ereditarietà Ereditarietà

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

Implementazione Java di un ADT

Linguaggi di programmazione II AA 2010/2011 Esercitazione 2

Esempio su strutture dati dinamiche: ArrayList

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

TIPI PRIMITIVI E CLASSI WRAPPER

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

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

Metodi di una Collection

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

IL CONCETTO DI CLASSE

Programmazione Parametrica ( a.k.a. Generics )

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Le Collezioni (Java Collections)

Capitolo 6. Uso della gerarchia. c 2005 Pearson Education Italia Capitolo 6-1 / 125

Corso di Algoritmi e Strutture Dati con Laboratorio. Tipi di dato pila e coda

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Le basi del linguaggio Java

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

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

Programmazione orientata agli oggetti Classi astratte e interfacce

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

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

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

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

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

Introduzione Programmazione Java

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

Compute engine generici in RMI

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Polimorfismo parametrico vs polimorfismo per inclusione

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

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

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Introduzione al Java Collections Framework

Esonero del corso di Programmazione a Oggetti

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

Notazione grafica UML

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classi Wrapper, & Generics. Il package java.util. Strutture dati avanzate in Java

Argomenti della lezione. Tipo di dato astratto. Array. Tipo di dato Lista. Liste Implementazione di liste in Java Stack Code

Esempi in Java di program.ne O-O

TIPI PRIMITIVI: LIMITI

Il Java Collections Framework

Il Linguaggio Java. Le interfacce

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Compute engine generici in RMI

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

IL CONCETTO DI PACKAGE

Classi astratte. Nella gerarchia delle classi, potrebbe essere utile prevedere un supertipo generale per le classi che si usano. Ad esempio: Figura

Introduzione a Java. Riferimenti

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

16 - Ereditarietà, tipi e gerarchie

Esempio 2: Subtyping

public BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }

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

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Esercitazione n 2. Obiettivi

Uso di metodi statici. Walter Didimo

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

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

Programmazione ad Oggetti. Java Parte II

Corso: Fondamenti di Informatica (Canale 5) a.a Corsi di laurea: Ing. Settore Informazione

Ingegneria del Software 1: Generici e Collezioni

Corso sul linguaggio Java

Albero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java

Esempio: Interfacce. Gioco Interfacce

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre 2001

La classe java.lang.object

Errata Corrige di Manuale di Java 8

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

3. Il sistema dei tipi I tipi wrapper

Esercitazione n 3. Capacità di analisi e di estensione di progetti esistenti Linguaggio Java:

Corso di Fondamenti di Informatica I

Esercitazione n 3. Obiettivi

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Esempio: Interfacce. Gioco Interfacce

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

GESTIONE DEGLI ERRORI

Introduzione. Java. Esempio. Esempio

Linguaggi di Programmazione II Matricole con le due ultime cifre dispari

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

Metodi statici. Dichiarazione e chiamata di metodi statici

Definizione di classi. Walter Didimo

Transcript:

.. Il linguaggio Java: aggiunte in Java 1.5 Una breve presentazione

GENERICI Java 1.5 introduce i generici: classi che hanno un parametro di tipo. Nelle versioni precedenti a Java 1.5 si può definire: List mialista = new LinkedList(); mialista.add(new(integer(0)); Integer x = (Integer)miaLista.iterator().next(); Gli oggetti List possono contenere oggetti di qualunque tipo, e quindi quando si estrae un oggetto dalla lista è necessario fare il cast.

Nella nuova versione: List<Integer> mialista = new LinkedList<Integer>(); mialista.add(new(integer(0)); Integer x = mialista.iterator().next(); La mialista può contenere solo oggetti Integer. Non è più necessario il cast nell'ultima istruzione: il compilatore sa che l'oggetto estratto è un Integer.

L'interface List è specificata nel package java.util come: public interface List<E> { void add(e x);... Quando si dichiara una variabile di tipo List<Integer>, il parametro formale E viene legato ad Integer. E' come se si usasse una nuova interface: public interface ListofInteger { void add(integer x);...

Esempio In realtà la dichiarazione di un generico come List<Integer> non viene espansa come detto prima, cioè non vengono create copie multiple del codice di List, una per ogni valore del parametro. La dichiarazione di List<E> viene compilata una volta per tutte e genera un solo file class, come qualunque altra dichiarazione di classe o interfaccia.

Esempio public class Pila<T> { private LinkedList<T> list = new LinkedList<T>(); public boolean isempty() {return list.isempty(); public void push(t v) { list.addfirst(v); public T pop() {return list.removefirst(); public static void main(string[] args) { Pila<String> stack = new Pila<String>(); stack.push("a"); stack.push("bcd"); String s1 = stack.pop(); String s2 = stack.pop(); System.out.println(s1); System.out.println(s2);

GENERICI E SOTTOTIPI Con gli array è possibile scrivere: String[] as = new String[5]; Object[] ao = as; ao[0] = new Object(); il compilatore accetta questo programma, ma l'inteprete dà errore a runtime perché non si può assegnare un Object a un array di stringhe. Viceversa in List<String> ls = new ArrayList<String>(); List<Object> lo = ls; lo.add(new Object()); la seconda istruzione non è accettata dal compilatore, perché l'interprete non sarebbe in grado di scoprire l'errore a runtime nella istruzione successiva.

Il comportamento descritto prima è molto restrittivo. Ad esempio, il seguente metodo per stampare gli elementi di una collezione: void printcollection(collection<object> c) { Iterator<Object> i = c.iterator(); for(k=0; k<c.size(); k++) System.out.println(i.next()); può essere usato solo per stampare gli elementi di una Collection<Object>, ma non può avere come parametro, ad esempio, una Collection<Integer>.

Per definire una collection di qualunque cosa si può usare la notazione Collection<?>. void printcollection(collection<?> c) { Iterator<?> i = c.iterator(); for(k=0; k<c.size(); k++) System.out.println(i.next()); Tuttavia, in Collection<?> c = new ArrayList<String>(); c.add(new Object()); il compilatore accetta la prima istruzione, ma non la seconda, perché non può garantire la correttezza del tipo dell'elemento che viene inserito nella collezione.

FOR EACH L'iterazione sulle collezioni mediante un Iterator è abbastanza noiosa da scrivere. JDK 1.5 introduce al suo posto una nuova istruzione for. Invece di: void printcollection(collection<object> c) { Iterator<Object> i = c.iterator(); for(int k=0; k<c.size(); k++) System.out.println(i.next()); si può scrivere: void printcollection(collection<object> c) { for(object e : c) System.out.println(e);

LIMITAZIONI SUL? Consideriamo la classe astratta: public abstract class Forma { public abstract void disegna(); e diverse sue sottoclassi come Cerchio, Rettangolo,... che implementano il metodo disegna. Un metodo per disegnare le forme contenute in una lista potrebbe essere: public void disegnatutto(list<forma> forme) { for (Forma f: forme) f.disegna();

La definizione public void disegnatutto(list<forma> forme) { è restrittiva, perché il metodo disegnatutto può essere applicato solo a una List<Forma> e non, per esempio, a una List<Rettangolo>. D'altra parte public void disegnatutto(list<?> forme) { sarebbe troppo generale perché il? può essere legato a qualunque tipo, in particolare ad Object che non ha il metodo disegna.

Il? può essere limitato con la notazione public void disegnatutto(list<? extends Forma> forme) {// Body del metodo disegnatutto in cui il tipo degli elementi della lista può essere una qualunque sottoclasse di Forma, e quindi certamente avrà il metodo disegna.

AUTO-BOXING Le strutture come Collection possono contenere solo oggetti. Quindi per inserire un tipo primitivo (es. int) occorre convertirlo (boxing) nel corrispondente oggetto (es. Integer). Viceversa, quando si estrae un oggetto dalla collezione occorre riconvertirlo nel tipo primitivo (unboxing). Nella versione 1.5 boxing e unboxing sono fatti automaticamente dal compilatore. ArrayList<Integer> al = new ArrayList<Integer>(); PRIMA DI Java 1.5 IN Java 1.5 al.add(0, new Integer(25)); al.add(0, 25); int x = (al.get(0)).intvalue(); int x = al.get(0);

ESERCIZI (FACOLTATIVI) Riscrivere, usando i nuovi costrutti presenti in Java 1.5, il codice relativo ai seguenti esercizi svolti in laboratorio: E6 E7 E8 E9 E12 F. Damiani - Alg. & Lab. 04/05