1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.

Slides:



Advertisements
Presentazioni simili
Teoria e Tecniche del Riconoscimento
Advertisements

Astrazioni Polimorfe e Tipi Generici. 2 Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo.
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
Interfacce Java.
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Esercizio 2. Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni di classe.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Sequential Statements. – Il VHDL simula lo svolgersi in parallelo di varie operazioni – Loggetto fondamentale e il PROCESS – Un PROCESS contiene una serie.
Each student will be able to ask an adult or stranger: What do you like to do? and What dont you like to …?
Un DataBase Management System (DBMS) relazionale client/server.
Programmazione Parametrica ( a.k.a. Generics )
Programmazione Parametrica ( a.k.a. Generics ). Introduzione ai meccanismi e concetti della programmazione parametrica Generics e relationi di sottotipo.
JDK Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA Uff
Layouts and Graphics. component - container - layout Un Container contiene [0 o +] Components Il Layout specifica come i Components sono disposti nel.
Model – View - Controller
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola.
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Astrazioni sul controllo Iteratori. 2 Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di.
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
1 Ultima Lezione del Corso di Fondamenti di Informatica 1 a.a – 06 Ma 29-Nov-2005.
JAVA C import java.util.*; #include <stdio.h>
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 3 - Functions Outline 3.1Introduction 3.2Program Components in C++ 3.3Math Library Functions 3.4Functions.
Algoritmi e Strutture Dati
1 Implementazione di Linguaggi 2 PARTE 6 Implementazione di Linguaggi 2 PARTE 6 Massimo Ancona DISI Università di Genova Testo: A.V. Aho, R. Sethi, J.D.Ullman.
© CEFRIEL Cenni su XML in Java Docente: Gabriele Lombardi
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Array Ricerca Ordinamento Fusione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
1 laboratorio di calcolo II AA 2003/04 ottava settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Programmazione Parametrica ( a.k.a. Generics ). Introduzione ai meccanismi e concetti della programmazione parametrica Generics e relationi di sottotipo.
FONDAMENTI DI INFORMATICA III WfMC-1. FONDAMENTI DI INFORMATICA III WfMC-2 WFMC Cose WfMC Workflow Management Coalition (WfMC), Brussels, è unorganizzazione.
Chistmas is the most loved holiday of the years. Adults and children look forward to Chistmas and its magical atmosphere. It is traditional to decorate.
Players: 3 to 10, or teams. Aim of the game: find a name, starting with a specific letter, for each category. You need: internet connection laptop.
Java Collections.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
14° Workshop – DotNetMarche :: Castelfidardo, 16 Aprile 2010 Introduzione ai framework per IoC / DI e AOP.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Ese 2 (del 31 Marzo 2004). Mostrare l'evoluzione dello stato (ambiente di classi, heap, pila, System.out) durante la valutazione delle seguenti dichiarazioni.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
Funzioni stringhe. chr Restituisce il carattere di un valore ascii dato. Per vedere lelenco dei codici ascii clicca QQQQ uuuu iiiiEsempio
Test con JUnit. zJUnit è un ambiente di test per programmi Java ySviluppato da Kent Beck É possibile usare JUnit allinterno di Eclipse per eseguire i.
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Architettura software La scelta architetturale: MVA (Model – View – Adapter/Control) The view is completely decoupled from the model such that view and.
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
© M. Badella, G. Malnati, L. Tessitore Programmazione ad Oggetti A.A Collezioni di dati in Java.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Collection & Generics in Java
Introduction to automatic ABMs documentation Keywords: Doxygen ODD protocol MASON documentation Simone Romano.
Fondamenti di informatica T-A Esercitazione 7 : Collezioni AA 2012/2013 Tutor : Domenico Di Carlo.
Nota (rif. alla lezione precedente): Vector vs ArrayList Le classi generiche Vector e ArrayList sono sostanzialmente equivalenti, ma: I metodi.
Guida alla compilazione del Piano di Studi Curricula Sistemi per l’Automazione Automation Engineering.
Scenario e Prospettive della Planetologia Italiana
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Specifiche. Scopo e significato delle specifiche (1) Lo scopo di una specifica è di definire il comportamento di un ’ astrazione. Gli utenti si baseranno.
Collezioni in Java. Collection Framework JFC Java Collection Framework (JCF) fornisce il supporto a qualunque tipo di struttura dati, nel quadro di un'architettura.
Collection & Generics in Java
Sommario cos’è un tipo di dato astratto astrazione tramite specifica:
Scandire …...
Transcript della presentazione:

1

Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali classi di Collection usare in casi specifici Conoscere il concetto di Generics (programmazione generica) nel contesto delle Collection Saper utilizzare classi generiche Comprendere il meccanismo del type checking sulle classi generiche 2 2

Framework Collections in Java: API Java Generics in Java Tutorial Sun (in inglese) Testo di Riferimento (usato nei corsi precedenti) Horstmann - Concetti di informatica e fondamenti di Java – Apogeo 3 3

JCF: Collections in Java 4

Problema : raggruppare un insieme di oggetti insieme e accedere ad essi secondo regole particolari (per esempio una Coda). Spessi lutilizzo degli array non è sufficiente 1. Soluzione 1: Realizzare una propria classe che, utilizzando internamente gli array, fornisce i metodi di accesso opportuni 2. Soluzione 2: Utilizzare classi già pronte fornite da Java, scegliendo quella più opportuna ai propri bisogni Java fornisce un insieme molto ampio di classi (concrete) in grado di collezionare oggetti fornendo un interfacce (estese dalle proprie classi) relative a Pile, Code, Insiemi, Liste, Mappe, Insiemi ordinati ecc … (JCF) Java Collections Framework 5 5

Collection: List ArrayList LinkedList Vector Set SortedSet TreeSet HashSet LinkedHashSet Altre interfacce disponibili Queue,Dequeue,Stack, Map, SortedMap … 6 6

Collection Group of objects, known as its elements. Some collections allow duplicate elements and others do not. Some are ordered and others unordered. boolean add(Object e) void clear() boolean contains(Object o) Iterator iterator() boolean remove(Object o) int size() List An ordered collection (also known as a sequence ). The user of this interface has precise control over where in the list each element is inserted E get(int index) E set(int index, E element) Set A collection that contains no duplicate elements SortedSet A collection that contains sorted elements 7 7

Tutti gli oggetti in java estendono da Object E corretto scrivere: Object o=new Integer(10); Le collection di java gestiscono elementi di tipo Object Esse possono contenere elementi di tipo object quindi un qualunque oggetto java può essere aggiunto in una collezione NB: Gli oggetti vengono ritornati come Object e non del loro tipo specifico ArrayList a=new ArrayList(); a.add(new Integer(10));//aggiungo un intero Object elem=a.get(0); //oggetto di tipo Object Per ottenere il tipo originario è necessario il cast esplicito Integer i=(Integer) a.get(0);//cast esplicito 8 8

public class ArrayList extends … boolean add(Object e)add Appends the specified element to the end of this list. void add(int index, Object element)add Inserts the specified element at the specified position in this list. Object get(int index)get Returns the element at the specified position in this list. Object set(int index, Object element)set Replaces the element at the specified position in this list with the specified element. void clear()clear Removes all of the elements from this list. Iterator iterator() Iteratoriterator Returns an iterator over the elements in this list in proper sequence. int size()size Returns the number of elements in this list. 9 9

Scrivere un metodo java int somma(ArrayList a) che somma gli elementi del vettore di interi. Somma: 22 Tempo 5 minuti … Suggerimenti : utilizzare i metodi get per ottenere gli elementi del vettore e size per conoscere il numero di elementi totali. Usando il cast si possono ottenere gli oggetti del tipo opportuno Il metodo intValue() della classe Integer permette di ricavare il tipo int

public static int somma(ArrayList a){ int somma=0; for (int i=0;i<a.size();i++){ Integer elem=(Integer)a.get(i) somma=somma+elem.intValue(); //tipo primitivo } return somma; } 11

Modo universale per scorrere collezioni di elementi, indipendentemente dalla particolare disposizione degli elementi Il metodo Iterator iterator() è disponibile in tutte classi che estendono da Collection Iterator boolean hasNext() Returns true if the iteration has more elements. Object next() Returns the next element in the iteration. void remove() Removes from the underlying collection the last element returned by the iterator (optional operation). 12

Scrivere un metodo java int somma(ArrayList a) che somma gli elementi del vettore di interi utilizzando gli iteratori. Somma: 22 Tempo 5 minuti … Suggetimenti: ricavare literatore dallArrayList e scorrere literatore mediante un while; per la condizione utilizzare il metodo hasNext() delliteratore, next() per avere lelemento corrente

public static int somma(ArrayList a){ int somma=0; Iterator i=a.iterator(); while (i.hasNext()){ Integer val=(Integer)i.next(); somma=somma+val.intValue(); } return somma; } Se volessimo stampare un Set come cambiano le cose? 14

Riepilogo dei metodi principali di alcune classi JCF Collection List ArrayList Vector LinkedList 15

public interface Collection boolean add(Object e)add Appends the specified element to the end of this list. void add(int index, Object element)add Inserts the specified element at the specified position in this list. void clear()clear Removes all of the elements from this list. Iterator iterator() Iteratoriterator Returns an iterator over the elements in this list in proper sequence. int size()size Returns the number of elements in this list. boolean isEmpty()isEmpty Returns true if this collection contains no elements. … altri metodi 16

public interface List extends Collection Ereditate da Collection boolean add(Object e)add void add(int index, Object element)add void clear()clear Iterator iterator() Iteratoriterator int size()size boolean isEmpty()isEmpty E get(int index) Eget Returns the element at the specified position in this list. E remove(int index) Eremove Removes the element at the specified position in this list (optional operation). E set(int index, E element) EsetE Replaces the element at the specified position in this list with the specified element (optional operation). … altri metodi 17

public class ArrayList …implements List Ereditate da List boolean add(Object e)add void add(int index, Object element)add void clear()clear Iterator iterator() Iteratoriterator int size()size boolean isEmpty()isEmpty E get(int index) Eget E remove(int index) Eremove E set(int index, E element) EsetE … altri metodi 18

public class Vector …implements List Ereditate da List boolean add(Object e)add void add(int index, Object element)add void clear()clear Iterator iterator() Iteratoriterator int size()size boolean isEmpty()isEmpty E get(int index) Eget E remove(int index) Eremove E set(int index, E element) EsetE … altri metodi Analogo ad ArrayList ma limplementazione è thread- safe ed è in genere più lenta 19

public class LinkedList …implements List Ereditate da List boolean add(Object e)add void add(int index, Object element)add void clear()clear Iterator iterator() Iteratoriterator int size()size boolean isEmpty()isEmpty E get(int index) Eget E remove(int index) Eremove E set(int index, E element) EsetE E getFirst()EgetFirst Returns the first element in this list. E getLast()EgetLast Returns the last element in this list. … altri metodi NB: Limplementazione di get e set hanno costo O(n) 20

La mancanza di un controllo sui tipi porta ad alcuni problemi: 1. Necessità di ricorrere al cast degli elementi anche quando il tipo di elementi è noto ArrayList a=new ArrayList(); a.add(new Integer(10));... Integer i=(Integer)a.get(0); 2. Possibili cast degli elementi a tipi non corretti ArrayList a=new ArrayList(); a.add(new Integer(10));... String i=(String)a.get(0);//eccezione!!! 21

3. Nessun controllo sui tipi di dati inseriti allinterno di un vettore ArrayList a=new ArrayList(); a.add(new Integer(10));... a.add(new String(paperino));//? Integer i=(Integer)a.get(0);//OK Integer j=(Integer)a.get(1);//cast exception 4. Poca chiarezza sul tipo di dati trattati 1. public static ArrayList calcolaQualcosa() //che tipi contiene? NB: In tutti i casi, il codice risulta sintatticamente corretto e non viene segnalato alcun errore dal compilatore. Lerrore viene scoperto solo a Runtime! 22

I Generics 23

Programmazione generica: creazione di costrutti di programmazione che possano essere utilizzati con tipi di dati diversi. In Java si può raggiungere lobiettivo della programmazione generica usando lereditarietà oppure le variabili di tipo. Esempio: ArrayList di Java ArrayList Classe generica : è stata dichiarata usando una variabile di tipo E. La variabile di tipo rappresenta il tipo degli elementi: public class ArrayList // si può usare "ElementType" invece di E { public ArrayList() {... } public void add(E element) {... }... } 24

Le variabili di tipo possono essere sostituite, allatto della creazione di esemplari, con nomi di classe o di interfacce ArrayList ArrayList Non si può usare come sostituto uno degli otto tipi di dati primitivi ArrayList // Sbagliato! Usate un esemplare di ArrayList 25

Il tipo di dato che indicate va a sostituire la variabile di tipo utilizzata nella definizione dellinterfaccia o della classe generica Esempio: nel metodo add di un oggetto di tipo ArrayList la variabile di tipo E viene sostituita dal tipo String public void add(String element) 26

Le variabili di tipo rendono più sicuro e di più facile comprensione il codice generico. E impossibile aggiungere un oggetto di tipo Integer ad un esemplare di ArrayList È invece possibile aggiungere un oggetto di tipo Integer ad un esemplare di ArrayList (senza generics) che sia stato creato con lintenzione di usarlo per contenere stringhe 27

ArrayList a1 = new ArrayList (); Integer numero=new Integer(30); // Dovrebbe contenere oggetti di tipo String ArrayList a2 = new LinkedList(); // errore di compilazione a1.add(numero); // errore non individuato dal compilatore a2.add(numero); //errore di esecuzione String account = (String) a2.get(0); 28

ArrayList boolean add(E e)addE void add(int index, E element)addE E get(int index) Eget E set(int index, E element) EsetE void clear()clear Iterator iterator() IteratorEiterator int size()size Iterator boolean hasNext() E next() void remove() 29

Scrivere un metodo java int somma(ArrayList a) che somma gli elementi del vettore di interi. Somma: 22 Tempo 5 minuti …

public static int somma(ArrayList a) { int somma=0; for (int i=0;i<a.size();i++){ Integer elem=a.get(i) somma=somma+elem.intValue(); } return somma; } Per esercizio : implementare il metodo somma utilizzando gli iteratori 31

Collection : List ArrayList LinkedList Vector Set SortedSet TreeSet HashSet LinkedHashSet Altre interfacce disponibili Queue,Dequeue,Stack, Map, SortedMap … 32

PARTE 1: Confrontare il codice delle varie implementazioni del metodo somma ed evidenziarne le differenze PARTE 2: Scrivere un metodo Java che dato un ArrayList di stringhe restituisca una unica stringa che e la concatenazione di tutti i suoi elementi. 33

Scrivere il metodo Java void inverte(ArrayList a) che prende un ArrayList e ne inverte lordine degli elementi Lelemento in posizionei va scambiato con quello in posizione n-i-1 Scrivere il metodo Java ArrayList duplica(Integer v, int n) che prende un valore v e un numero n e ritorna un ArrayList contenente n elementi di valore v

Data la porzione di codice: ArrayList s=new ArrayList (); a.add(new Integer(10)); ArrayList p=new ArrayList (); p.add(new Integer(10)); Indicare quali, tra le istruzioni seguenti, genera un errore in compilazione o in esecuzione (eccezione): 1. s.add(paperino); 2. s.add(new Integer(10)); 3. String q=s.get(0); 4. Object o=s.get(0); 5. Integer i=s.get(0); 6. s.add(s.get(0)); 7. p.add(paperino); 8. p.add(new Integer(10)); 9. String q=p.get(0); 10. Object o=p.get(0); 11. Integer i=p.get(0); 12. p.add(p.get(0)); Verificare le risposte al calcolatore 35