STRUTTURE DATI IN JAVA

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "STRUTTURE DATI IN JAVA"

Transcript

1 Package java.util STRUTTURE DATI IN JAVA Molto spesso, una computazione si basa su una o più strutture dati, di vario tipo: insiemi, code, stack, tabelle, liste, alberi Data la loro importanza, Java ne offre un ampia scelta nella Java Collection Framework (JCF) interfacce che definiscono insiemi di funzionalità classi che ne forniscono varie implementazioni Sono contenitori "generici" per oggetti fino a JDK 1.4, si usava Object come tipo generico da Java 1.5 in poi: supporto ai TIPI GENERICI 1

2 Cosa è una collezione (Collection)? Un oggetto che ragruppa un gruppo di elementi in una singolo oggetto. Uso: memorizzare, manipolare e trasmettere dati da un metodo ad un altro. Tipicalmente rappresentano gruppi di elementi naturalmente collegati: Una collezione di lettere Una collezione di numeri di telefono Cosa è l ambiente Collections? E una architettura unificata per manipolare collezioni. Un framework di collection contiene tre elementi: Interfaces Implementazion Algoritmi Esempi C++ Standard Template Library (STL) Smalltalk's collection classes. Java s collection framework Vantaggi Riduce lo sforzo di programmazione Accresse la velocità e la qualità di programmazione Interoperabilita fra API scorrelate Riduce lo sforzo di imparare ed utilizzare nuove API Riduce lo sforzo per prograttare nuove API Riuso del software 2

3 Collections Framework Interfacce Abstract data types rappresentanti le collezioni. Permentono di manipolare le collezioni indipententemente dai dettagli delle loro implementazioni. In un linguaggio object-oriented come Java, queste interfacce formano una gerarchia Algoritmi Metodi che eseguono utili computazioni come ricerca, ordinamento sugli oggetti che implementano le interfaccie Questi algoritmi sono polimorfi in quanto lo stesso metodo può essere utilizzato su molte differenti implementazioni della stessa interfaccia. Interfacce di Collections Collection Map Set List SortedMap SortedSet 3

4 JCF: QUADRO GENERALE Implementazioni fondamentali per le liste: ArrayList,LinkedList, Vector per le tabelle hash: HashMap, HashSet, Hashtable per gli alberi: TreeSet, TreeMap (implementano rispettivamente SortedSet e SortedMap) Due parole sulle classi di implementazione: le linked list sono liste realizzate con puntatori i resizable array sono liste di array i balanced tree sono alberi realizzati con puntatori le tabelle hash sono tabelle realizzate tramite funzioni hash, ossia funzioni che associano una entità a un valore tramite una funzione matematica. Contenitori generici per oggetti realizzati tramite il tipo generico Object 4

5 JCF "CLASSICA" (fino a Java 1.4) Scelta di fondo: uso del tipo generico Object come mezzo per ottenere contenitori generici i metodi che aggiungono / tolgono oggetti dalle collezioni prevedono un parametro di tipo Object i metodi che cercano / restituiscono oggetti dalle collezioni prevedono un valore di ritorno Object Conseguenza: si possono aggiungere/togliere alle/dalle collezioni oggetti di qualunque tipo, TRANNE i tipi primitivi questi ultimi devono prima essere rispettivamente incapsulati in un oggetto (BOXING) / estratti da un oggetto che li racchiuda (UNBOXING) Contenitori generici per oggetti realizzati tramite il concetto di tipo parametrico 5

6 IL NUOVO APPROCCIO (java 1.5) È sbagliato abolire il controllo di tipo! Occorre un altro modo per esprimere genericità, che consenta un controllo di tipo a compile time type safety: "se si compila, è certamente corretto" Java 1.5 introduce i tipi parametrici ("generici") Il tipo può essere un parametro: in funzioni statiche, in classi e metodi di classi notazione <TIPO> Si possono definire relazioni fra "tipi generici recupera il "lato buono" dell'ereditarietà fra collezioni, inquadrandolo in un contesto solido. 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: ArrayLIst<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(); 6

7 Esempio di classe parametrica class tipo <T> { T attributo; public tipo (T x){attributo = x;} public T getvalue() {return attributo;} } Uso della classe parametrica public class Prova { public static void main(string []s){ tipo <String> p1 = new tipo<string>(s[0]); tipo <Integer> p2 = new tipo<integer>(10); String a = p1.getvalue(); System.out.println(a); Integer b = p2.getvalue(); System.out.println(b); } } 7

8 Tutta la JFC è stata riscritta per far uso dei generici Anche classi preesistenti (come Vector) sono state reingegnerizzate e riscritte in accordo al nuovo idioma Le operazioni sulla JFC "generica" si dicono checked (controllate) o type-safe (sicure come tipo) public interface List<E> { void add(e x); Iterator<E> iterator(); } public interface Iterator<E> { E next(); boolean hasnext(); } 8

9 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>. 9

10 Verso ii concetto di "tipo parametrico variante" Abbiamo visto che, se B deriva da A, NON si può dire che una collezione di elementi di B derivi dalla collezione di elementi di A, perché in generale ciò non ha senso (operazioni impossibili) ALCUNE operazioni potrebbero anche essere sicure (negli array, la lettura), ma ciò non è vero in generale. 10

11 CLASSI GENERICHE ed EREDITARIETÀ Consideriamo la classe generica LinkedList <T>: prendiamo due sue "istanziazioni" LinkedList <Number> LinkedList<Integer> Sono due tipi diversi, incompatibili fra loro! Si evita così il rischio di situazioni "apparentemente giuste ma in realtà sbagliate" stile array. Per verificarlo, immaginiamo di creare due liste: LinkedList<Number> l1 = new LinkedList<Number>(); LinkedList<Integer> l2 = new LinkedList<Integer>(); e consideriamo i due possibili assegnamenti: l1 = l2 //errore l2 = l1 //errore Covarianza, controvarianza, bivarianza 11

12 Dai TIPI GENERICI a TIPI PARAMETRICI VARIANTI ("WILDCARD") L'esperimento precedente ha mostrato che non ha senso cercare una compatibilità generale fra tipi parametrici, perché non può esistere. Ha senso invece cercare compatibilità fra casi specifici e precisamente fra tipi di parametri di singoli metodi. Perciò, alla normale notazione dei tipi generici List<T>, usata per creare oggetti, si affianca una nuova notazione, pensata esplicitamente per esprimere i tipi accettabili come parametri in singoli metodi Si parla quindi di tipi parametrici varianti, in Java più brevemente detti WILDCARD. WILDCARD, ovvero TIPI COVARIANTI, CONTROVARIANTI, BIVARIANTI Alla luce di ciò: la notazione List<T> denota il normale tipo generico il tipo covariante List<? extends T> fattorizza le proprietà dei List<X> in cui X estende T si usa per specificare tipi che consentono solo "letture" il tipo controvariante List<? super T> fattorizza le proprietà dei List<X> in cui X è esteso da T si usa per specificare tipi che consentono solo "scritture" il tipo bivariante List<?> fattorizza tutti i List<T> senza distinzione si usa per specificare tipi che non consentono né letture né scritture (ma possono servire comunque ) 12

13 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);}} Esempio public class MyList<T> { private T head; private MyList<T> tail; public T gethead(){ return head; } public <E extends T> void sethead(e element){ head=element; } } MyList<Number> list1 = new MyList<Number>(); MyList<Integer> list2 = new MyList<Integer>(); list1.sethead( new Double(1.4) ); // OK! list1.sethead( list2.gethead() ); // OK! 13

14 Esempio public class MyList<T> { private T head; private MyList<T> tail; public T gethead(){ return head; } public <E extends T> void sethead(e element){ head=element; } public void settail(mylist<t> l){ tail=l; } public MyList<? extends T> gettail(){ return tail; } } Restituisce una lista di elementi di tipo T o più specifico di T MyList<? extends Number> list3 = list1.gettail(); MyList<? extends Number> list4 = list2.gettail(); MyList<? extends Integer> list5 = list2.gettail(); I primi due restituiscono una lista di Number, compatibile col tipo "lista di qualcosa che estenda Number Il terzo restituisce una lista di Integer, compatibile col tipo "lista di qualcosa che estenda Integer" public class MyList<T> { private T head; private MyList<? extends T> tail; public T gethead(){ return head; } public <E extends T> void sethead(e element){...} public MyList<? extends T> gettail(){ return tail; } public void settail(mylist<? extends T> l){ tail=l;} } Non c'è realmente bisogno che la coda sia una lista di T! Possiamo essere più generici! Conseguentemente, possiamo rilassare il vincolo su settail, il cui argomento ora può essere una lista di qualunque cosa estenda T list1.settail(list2); // SI', ORA VA BENE! Si rendono così SELETTIVAMENTE possibili TUTTE e SOLE le operazioni "sensate" e significative! 14

15 Riflessioni a posteriori Nell'esempio precedente abbiamo usato: il tipo generico MyList<T> per creare oggetti MyList<Number>, MyList<Integer>, tipi covarianti come MyList<? extends Number> fattorizza le proprietà dei tipi di liste che estendono Number, come MyList<Integer>, MyList<Double>, o MyList<Number> stessa NON abbiamo invece usato: tipi controvarianti come MyList<? super Number> fattorizzerebbe le proprietà di tutte le liste di tipi più generici di Number, come ad esempio MyList<Object> il tipo bivariante MyList<?> 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) {... } 15

16 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 }} 16

17 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} } Collection Radice della gerarchi delle collezioni Rappresenta un gruppo di oggetti detti elementi della collezione. Alcune implementazioni di Collection consento la duplicazione degli elemente mentre altre no. Alcune sono ordinate altre no. Collection è utilizzato per passare collezioni e manipolarle con la massima generalità. 17

18 Collection Set Set List SortedSet Interface Set extends Collection Modella l astrazione matematica di insieme Collezione non ordinata di object No elementi duplicati Gli stessi metodi di Collection Semantica differente Implementazioni: AbstractSet, HashSet, LinkedHashSet, TreeSet Collection SortedSet Set List SortedSet Interface SortedSet extends Set Un insieme che garanisce che l insieme sia ordinato Tutti gli elementi inseriti in un sorted set devono implementare l interfaccia Comparable Implementazioni: TreeSet 18

19 Collection List Set List SortedSet Una collezione ordinata (chiamata anche sequenza). Può contenere elementi duplicati Consente il controllo della posizione nella lista in cui un elemento è inserito L accesso agli elemento è eseguito rispoetto al loro indice intero (posizione). All Known Implementing Classes: AbstractList, ArrayList, LinkedList, Vector Map Map SortedMap Interface Map (non estente Collection) Un object corrisponde (maps) valori chiave Non contiene chiavi duplicate ogni chiave corrisponde al più un valore Sostituisce la classe astratta java.util.dictionary L ordine può essere fornito da classi che implementano l interfaccia All Known Implementing Classes: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap 19

20 Map SortedMap SortedMap public interface SortedMap extends Map un map che garantisce che è ordinato in ordine crescente. Tutti gli elementi inseriti in un sorted map devono implementare l interfaccia Comparable All Known Implementing Classes: TreeMap Implementazioni nel Framework Collections Le implementazioni concrete dell interfaccia collection sono strutture dati riutilizzabili 20

21 Set Implementations HashSet un insieme associato con una hash table TreeSet Implementazione di un albero binario bilanciato Impone un ordine nei suoi elementi HashSet Set TreeSet List Implementations List ArrayList Vector LinkedList 21

22 List Implementations ArrayList Un array ridimenzionabile Asincrono LinkedList Una lista doppiamente concatenata Pu ò avere performance migliori di ArrayList Vector Un array ridimenzionabile Sincrono Map Implementations Map Hashtable HashMap SortedMap TreeMap 22

23 Map Implementations HashMap Un hash table implementazione di Map Come Hashtable, ma supporta null keys & values TreeMap Un albero binario bilanciato Impone un ordine nei suoi elementi Hashtable hash table sincronizzato Implementazione dell interfaccia Map. Utility di Collections Framework Interfaces Iterator Comparator ListIterator Classes Arrays Collections 23

24 Iterator public interface Iterator<E> Creato da Collection.iterator() Simile a Enumeration Nome di metodi migliorati Permette una operazione remove() sul item corrente boolean hasnext() Returns true if the iteration has more elements. E next() Returns the next element in the iteration. void remove() Removes from the underlying Implementazioni: BeanContextSupport.BCSIterator ListIterator public interface ListIterator<E>extends Iterator<E> Attraversa la List in ogni direzione Modifica List durante l iterazione Metodi aggiunti: void add(e e) Inserts the specified element into the list (optional operation). boolean hasprevious() Returns true if this list iterator has more elements when traversing the list in the reverse direction. 24

25 int nextindex() Returns the index of the element that would be returned by a subsequent call to next. E previous() Returns the previous element in the list. int previousindex() Returns the index of the element that would be returned by a subsequent call to previous. void set(e e) Replaces the last element returned by next or previouswith the specified element (optional operation). Collection List Cloneable Serializable java.lang.object java.util.abstractcollection java.util.abstractlist java.util.abstractsequentiallist java.util.linkedlist 25

26 Liste Nel package java.util due tipi di liste entrambe implementano l interfaccia java.util.list ArrayList: basata su array e indicatore di riempimento LinkedList:basata su rappresentazione collegata Attenzione - i due tipi di liste hanno prestazioni diverse nelle operazioni fondamentali public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable public class ArrayList<E>extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Cloneable, Serializable public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable 26

27 la rappresentazione con array facilita l accesso agli elementi data la posizione ma penalizza gli inserimenti e le cancellazioni in mezzo alla lista è necessario spostare gli elementi su o giù Viceversa LinkedList è più lenta nell accesso agli elementi data la posizione accedere l elemento in posizione i richiede la scansione di i riferimenti ma è più veloce negli inserimenti e nelle cancellazioni (approssimativamente costano quanto la scansione) Un test di prestazioni Basato su circa 1000 operazioni tempi misurati in millisecondi 27

28 Considerazioni sulle prestazioni gli array sono i più veloci, ma non consentono inserimenti e cancellazioni ArrayList è veloce nell accesso agli elementi, lenta in inserimenti e cancellazioni in mezzo LinkedList è più lenta nell accesso, ma decisamente più veloce in inserimenti e canc. Vector è più lenta di entrambe e non dovrebbe essere utilizzata Di conseguenza nel caso di liste a bassa dinamica, per ridurre i tempi di scansione è opportuno usare ArrayList per liste ad alta dinamica, con frequenti inserimenti e cancellazioni conviene utilizzare LinkedList E che succede se devo cambiare tipo? es: passare da ArrayList a LinkedList Linea guida è opportuno programmare con le interfacce invece che con le implementazioni le interfacce riducono l accoppiamento tra leclassi e semplificano i cambiamenti Nel caso delle liste è opportuno utilizzarle per quanto possibile attraverso riferimenti di tipo java.util.list In questo modo le modifiche sono semplificate basta cambiare le poche istruzioni in cui gli oggetti di tipo lista sono creati cambiando laclasse usata per l implementazione il resto dell applicazione resta intatta i metodi si comportano polimorficamente e viene utilizzata la nuova implementazione 28

29 Iteratori Attenzione in questo approccio, quando manipolo la lista devo tenere in considerazione che l implementazione potrebbe cambiare In particolare devo fare attenzione a non basare la scrittura del codice su una o l altra delle implementaz. Un operazione critica: la scansione Il modo tipico di scandire una lista utilizzando indici interi for (int i = 0; i < lista.size(); i++) { Object o = lista.get(i); // operazioni su o } Iteratori Questo tipo di scansione è particolarmente adatto ad ArrayList (il metodo get viene eseguito rapidamente) ma disastrosamente lenta su LinkedList Perchè? perchè come detto l accesso all elemento in posizione i di una LinkedList richiede di scandire i elementi (i operazioni circa) Detta n la dimensione della lista n pari circa a n(n +1)/2, ovvero dell ordine di n2 es: per una lista di 100 elementi: 5000 nel caso di ArrayList: circa 100 operazioni In casi normali il problema non sorge (liste piccole) ma in alcuni casi si tratta di un costo di calcolo che può diventare inaccettabile 29

30 Il problema la scansione attraverso indici interi NON è la scansione più naturale per LinkedList ArrayList implementazione basata su indici >> scansione naturale basata su indici LinkedList implementazione basata su riferimenti >> scansione naturale basata su riferimenti Idealmente vorrei che per ciascuna tipologia di lista potesse essere utilizzata automaticamente la scansione più adatta senza che il programmatore se ne debba preoccupare Attenzione in questo caso il polimorfismo da solo non basta La scansione della lista è un operazione che deve necessariamente essere effettuata da un oggetto diverso dalla lista, non posso quindi semplicemente sovrascrivere il metodo scandisciti() e utilizzarlo polimorficamente devo necessariamente definire altri oggetti la cui responsabilità è quella di scandire la lista Soluzione utilizzare un oggetto iteratore Iteratore oggetto specializzato nella scansione di una lista fornisce al programmare un interfaccia per effettuare la scansione in modo indipendente dalla strategia di scansione concreta (indici, puntatori, ecc.) implementa la scansione in modo ottimale per ciascun tipo di lista 30

31 L utilizzo in java.util interfaccia java.util.iterator, che prevede i seguenti metodi Object next() per spostarsi in avanti boolean hasnext() per fermarsi esiste una implementazione per ArrayList ed una implementazione per LinkedList Iteratore per ArrayList utilizza indici interi Iteratore per LinkedList scandisce la lista usando i riferimenti Come si ottiene l iteratore? utilizzando il metodo Iterator iterator() di java.util.list Dettagli sugli iteratori di java.util sostanzialmente si basano sui metodi next() e previous() forniti dalle due liste sono però più complicati di quanto si pensa dal momento che consentono anche di modificare la lista durante la scansione attraverso il metodo remove() senza doversi preoccupare della consistenza dei riferimenti 31

32 Ricerca e rimozione di un elemento E necessario che la classe degli elementi cotenuti nella lista implementi il metodo equals Mappe Una mappa, ovvero un dizionario associativo classe java.util.hashmap implementa l interfaccia java.util.map Dizionario associativo collezione in cui i riferimenti sono salvati con un nome, detto chiave tipicamente una stringa possono successivamente essere recuperati rapidamente utilizzando la chiave 32

33 public interface Map<K,V> Principali metodi V put(k key, V value) void putall(map<? extends K,? extends V> m) V get(object key) V remove(object key) Implementazioni java.util.hashmap java.util.treemap java.util.hashtable 33

34 metodi principali di java.util.map void put(object chiave, Object riferimento) Object get(object chiave) Object remove(object chiave) int size() Le principali implementazioni java.util.hashmap java.util.treemap java.util.hashtable (versione legacy) Differenze rispetto alle liste in una mappa non sono significative le posizioni degli elementi ma le chiavi le ricerche sulla base della chiave sono enormemente facilitate (nella lista richiederebbero una scansione) utilizzata tipicamente quando più che le scansioni sono importanti le ricerche Attenzione però ad ogni chiave può essere associato un unico oggetto put successive con la stessa chiave sostituiscono i valori precedenti non può essere usata quando possono esserci più valori per la stessa chiave 34

35 HashMap Un requisito fondamentale per le mappe la rapidità di inserimento e cancellazione L implementazione fondamentale HashMap di gran lunga la più veloce La tecnica sottostante tecnica di hashing ovvero basata su funzioni di hashing HashMap Funzione di hash funzione che trasforma un valore ( chiave ) di lunghezza variabile in uno di lunghezza fissa ( hash della chiave) Caratteristica tipica di una funzione hash l hash deve essere calcolabile rapidamente Classificazione delle funzioni hash funzioni con collisioni o prive di collisioni Funzione priva di collisione non ci sono due valori per cui l hash è uguale possibile solo se i valori sono finiti Funzione con collisione più valori possono avere lo stesso valore di hash caso tipico 35

36 HashMap Implementazione di put() nella HashMap la mappa mantiene gli oggetti in un array di N riferimenti a liste (dette bucket ) ogni elemento della lista memorizza una coppia <chiave, riferimento> viene calcolato il valore della funzione di hash sulla chiave e poi viene applicato un operatore modulo per ridurlo ad un numero tra 0 e N 1 in questo modo si ottiene un indice nell array; la coppia <chiave, riferimento> viene aggiunta in coda al bucket della posizione ottenuta 36

37 HashMap Implementazione di get() in HashMap viene calcolato il valore di hash della chiave per risalire al bucket (indice nell array) viene scandito il bucket e la chiave viene confrontata con ogni chiave se viene trovata una chiave identica a quella cercata, viene restituito il riferimento altrimenti viene restituito null Due operazioni fondamentali il calcolo della funzione di hash il confronto tra le chiavi Calcolo della funzione di hash viene usato il metodo hashcode() ereditato da Object Confronto tra le chiavi viene utilizzato il metodo equals() ereditato da Object HashMap Nota le implementazioni standard sono basate sull indirizzo in memoria potrebbero non essere quelle adatte a fare hashing in alcuni casi Nelle classi principali della piattaforma sono ridefinite opportunamente quando è necessario Di conseguenza è opportuno utilizzare come chiave per le mappe oggetti di classi note es: String, Integer, ecc. Nel caso in cui questo non sia possibile per la classe di oggetti da utilizzare come chiavi è necessario ridefinire opportunamente hashcode() ed equals() 37

38 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable Capacity: numero di buckets nella hash table, Load factor e la misuradi quanto piena puo essere l hash table prima di un resize (0,75) Costruttori HashMap() costruisce una HashMap vuota con capacity =16 e load factor = 0.75.HashMap(int initialcapacity) costruisce una HashMap vuota con capacity = initialcapacity e load factor = 0.75 HashMap(int initialcapacity, float loadfactor) costruisce HashMap con i valori specificati HashMap(Map<? extends K,? extends V> m) costruisce una HashMap con lo stesso mappings della mappa scecificata. Insiemi Altre classi significative delle collezioni interface java.util.set: rappresenta una collezione non ordinata e priva di duplicati due principali implementazioni: HashSet e TreeSet interface java.util.collection: rappresenta una collezione generica (può essere un insieme oppure una lista) tutte le collezioni sono scandibili con iteratori A cosa servono gli insiemi? possono essere quasi sempre sostituiti dalle liste in alcuni casi sono più naturali Esempio: Gestione Appuntamenti potrei utilizzare un oggetto di tipo java.util.set per rappresentare l insieme dei partecipanti ad una Riunione 38

39 Insiemi A questo punto possiamo vedere come scandire una mappa due metodi principali ottengo l insieme delle chiavi con Set keyset() e scandisco l insieme con un iteratore e prelevo dalla mappa tutti gli elementi ottengo la collezione dei valori con il metodo Collection values() ottengo un iteratore dalla collezione e scandisco tutti gli elementi Perchè Set e Collection? per rispettare la regola secondo cui si programma con le interfacce e non con le implementazioni Infatti Una HashMap è una collezione non ordinata cioe mantiene un insieme di chiavi e non una lista Ordinamenti In Java l ordinamento delle collezioni è una funzionalit{ offerta dalla piattaforma es: java.util.collections.sort(java.util.list list) ma bisogna rispettare delle regole In particolare per ordinare una collezione di riferimenti, gli oggetti relativi devono essere confrontabili rispetto ad una precisa relazione di ordine Esempio la lista degli Impegni un ordinamento possibile: per orario un altro ordinamento: in ordine alfabetico rispetto alla descrizione un altro ordinamento ancora: rispetto al luogo di svolgimento per poter ordinare una lista di impegnibisogna decidere il criterio di ordinamento 39

40 In Java gli oggetti ordinabili devono implementare l interfaccia java.lang.comparable java.lang.comparable prevede un unico metodo int compareto(object o) risultato > 0 se this segue o nell ordinamento risultato < 0 se this precede o nell ordinam. risultato = 0 se this non precede nè segue o Ordinamenti Nota l utilizzo di Comparable prevede che sia possibile cambiare il codice delle classi che definiscono gli oggetti da ordinare per implementare Comparable e definire compareto() se questo non è possibile, è possibile utilizzare un approccio alternativo utilizzare un oggetto esterno comparatore L interfaccia java.util.comparator unico metodo: int compare(object o1, Object o2) gli oggetti che implementano l interfaccia sono quindi capaci di confrontare oggetti secondo algoritmi specifici 40

Telematica II 15. Esercitazione/Laboratorio 5

Telematica II 15. Esercitazione/Laboratorio 5 Protocollo FTP FTP Client TCP control connection (port 21) FTP Server Telematica II 15. Esercitazione/Laboratorio 5 File System locale TCP data connection (port( 20) File System remoto La connessione di

Dettagli

Java Collection Framework

Java Collection Framework STRUTTURE DATI IN JAVA Strutture Dati nella piattaforma Java: Java Collection Framework Java Collection Framework (JCF) fornisce il supporto a qualunque tipo di struttura dati interfacce una classe Collections

Dettagli

Ingegneria del Software 1: Generici e Collezioni

Ingegneria del Software 1: Generici e Collezioni Ingegneria del Software 1: Generici e Collezioni Due on Martedi, Marzo 31, 2015 Claudio Menghi, Alessandro Rizzi 1 Contents Ingegneria del Software 1 (Claudio Menghi, Alessandro Rizzi ): Generici e Collezioni

Dettagli

Lezione 6 Collezioni. Il concetto astratto di collezione. Servizio minimo: IContainer. Stack (pila)

Lezione 6 Collezioni. Il concetto astratto di collezione. Servizio minimo: IContainer. Stack (pila) Lezione 6 Collezioni Il problema delle collezioni è molto vasto, ed è stato oggetto di studio fin dai primordi dell'informatica. Per esplorarlo senza perdersi è bene proporsi un metodo. Seguiremo il seguente:

Dettagli

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

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari Algoritmi e Strutture Dati Tipo di dato astratto e Strutture dati elementari 1 Argomenti della lezione Tipi di dato astratto Strutture dati elementari Liste o Implementazione di liste in Java Stack Code

Dettagli

Strutture dati "classiche"

Strutture dati classiche Modulo di Roadmap 0. Primi passi con Java 1. Buone abitudini 2. Tipi di dati primitivi 3. Uso di classi 4. Leggere e scrivere 5. Definire metodi 6. Strutture di controllo 7. Array e Collection 8. Progetto

Dettagli

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

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Tipi Tipo Astratto di Permette di specicare dati in modo astratto Astratto Indipendentemente

Dettagli

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

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

Programmazione generica

Programmazione generica 16 Programmazione generica Obiettivi del capitolo Capire gli obiettivi della programmazione generica Essere in grado di realizzare classi e metodi generici Comprendere il meccanismo di esecuzione di metodi

Dettagli

Java Collection Framework. L14 JCF unina 1

Java Collection Framework. L14 JCF unina 1 Java Collection Framework L14 JCF unina 1 Java Collection Framework Prima di Java 2 erano disponibili poche classi container, soprattutto se riferite alla libreria STL del C++ Vector, Stack, Hashtable,

Dettagli

Astrazioni sul controllo. Iteratori

Astrazioni sul controllo. Iteratori Astrazioni sul controllo Iteratori Nuove iterazioni Definendo un nuovo tipo come collezione di oggetti (p. es., set) si vorrebbe disporre anche di un operazione che consenta cicli (iterazioni) Es.: gli

Dettagli

ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci daniela.micucci@unimib.it

ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci daniela.micucci@unimib.it Programmazione con Java ArrayList e Generics Daniela Micucci daniela.micucci@unimib.it ARRAYLIST Programmazione con Java ArrayList e Generics 2 1 La classe ArrayList Fa parte delle librerie standard di

Dettagli

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo Design Pattern L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo sviluppo dei programmi, il loro mantenimento,

Dettagli

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

Dettagli

Scope e visibilità per classi

Scope e visibilità per classi Scope e visibilità per classi Packages Classi interne nelle loro diverse forme Interne / statiche / locali Utilizzo congiunto con interfacce Implementazione di iteratori Gestione di eventi Packages Package:

Dettagli

argomenti Hashing Richiamo sul concetto di dizionario Tabelle hash ! Hashing ! Funzioni hash per file ! Insieme di coppie del tipo

argomenti Hashing Richiamo sul concetto di dizionario Tabelle hash ! Hashing ! Funzioni hash per file ! Insieme di coppie del tipo <elemento, chiave> argomenti Hashing! Hashing! Tabelle hash! Funzioni hash e metodi per generarle! Inserimento e risoluzione delle collisioni! Eliminazione! Funzioni hash per file! Hashing estendibile! Hashing lineare Hashing

Dettagli

Marco Faella Classi enumerate

Marco Faella Classi enumerate Marco Faella Classi enumerate 22 Lezione n. Parole chiave: Java Corso di Laurea: Informatica Insegnamento: Linguaggi di Programmazione II Email Docente: faella.didattica@gmail.com A.A. 2009-2010 Il problema

Dettagli

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012

Sviluppo Applicazioni Mobile Lezione 11. Dr. Paolo Casoto, Ph.D - 2012 + Sviluppo Applicazioni Mobile Lezione 11 + Credits I lucidi di questa lezione sono stati preparati da: Professor Stefano Mizzaro Professor Paolo Coppola e sono stati modificati e completati dal Dr. Paolo

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T1 B2 Significato e proprietà della OOP 1 Prerequisiti Concetto ed elementi della comunicazione Allocazione e deallocazione della memoria Compilazione di un programma Spazio

Dettagli

Introduzione a Classi e Oggetti

Introduzione a Classi e Oggetti Introduzione a Classi e Oggetti Oggetto: concetto astratto Entità di un programma dotata di tre proprietà caratteristiche stato informazioni conservate nell oggetto condizionano il comportamento dell oggetto

Dettagli

Dalle Classi Alle Interfacce

Dalle Classi Alle Interfacce Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Dalle Classi Alle Interfacce Corso di Tecniche di Programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria

Dettagli

Iterazione e ricorsione. Cicli, Array e Programmazione su Sequenze. Ciclo while. Cicli

Iterazione e ricorsione. Cicli, Array e Programmazione su Sequenze. Ciclo while. Cicli Iterazione e ricorsione Dal punto di vista della teoria della computazione, affinché un linguaggio di programmazione imperativo (C, Pascal, codice nei metodi del Java, ecc.) raggiunga la potenza di calcolo

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Tecniche di Programmazione: C# versione 1.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

Dettagli

Alberto Montresor Università di Trento

Alberto Montresor Università di Trento !! Algoritmi e Strutture Dati! Capitolo 3 - Tipi di dato e strutture di dati!!! Alberto Montresor Università di Trento!! This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: LA FASE DI REALIZZAZIONE La fase di

Dettagli

Programmazione Java Avanzata Concetti su Java

Programmazione Java Avanzata Concetti su Java Programmazione Java Avanzata Concetti su Java Ing. Giuseppe D'Aquì Testi di Riferimento Java ( R. Liguori, P. Liguori), O'Reilly Hops Tecniche Nuove (2008) Java Virtual Machine Il codice scritto in Java

Dettagli

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented Informatica Prof. A. Longheu Introduzione ai Linguaggi Object-Oriented 1 Generalità programmazione OO La programmazione ad oggetti è un particolare modo di scrivere il programma. Si prevede che: 1) si

Dettagli

Tipi astratti di dato e loro realizzazione in Java

Tipi astratti di dato e loro realizzazione in Java Unità 13 Tipi astratti di dato e loro realizzazione in Java Sommario Tipo astratto di dato Specifica di tipi astratti Astrazione di valori e astrazione di entità Realizzazione di tipi astratti in Java

Dettagli

Tipi di Dato Ricorsivi

Tipi di Dato Ricorsivi Tipi di Dato Ricorsivi Luca Abeni September 2, 2015 1 Tipi di Dato Vari linguaggi di programmazione permettono all utente di definire nuovi tipi di dato definendo per ogni nuovo tipo l insieme dei suoi

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

Progettazione! Progettazione! Progettazione! Progettazione!

Progettazione! Progettazione! Progettazione! Progettazione! Creare un oggetto specificandone la classe esplicitamente! Orienta ad una particolare implementazione invece che ad una interfaccia! Può complicare i cambiamenti futuri! E meglio creare oggetti indirettamente!

Dettagli

Livelli di astrazione

Livelli di astrazione Realizzare Classi Astrazione Perdita di dettaglio Utile nella descrizione, progettazione, implementazione e utilizzo di sistemi complessi Dettagli trascurabili vengono incapsulati in sottosistemi più semplici

Dettagli

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo

La fase di progetto e realizzazione. PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Diagramma delle classi realizzativo Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo & Monica Scannapieco Anno Accademico 2003/04 LA FASE DI PROGETTO E

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Classi astratte Le classi astratte sono un ibrido tra le classi concrete e le interfacce. Hanno le stesse caratteristiche di una

Dettagli

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

!#$%&&'()#*%+%+!#$',,'()#*%+ -)%*&'&'+'$.)+-$$%&&) !#$%&&'(%)'*+%,#-%#.'%&'#/0)-+#12+3,)4+56#7+#.')8'9 !"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&)!"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9 Slide 1 Paradigmi di Programmazione! Un linguaggio supporta uno stile di programmazione se

Dettagli

Tecnologie di Sviluppo per il Web

Tecnologie di Sviluppo per il Web Tecnologie di Sviluppo per il Web Programmazione su Basi di Dati: Framework Hibernate Parte b versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima

Dettagli

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo. Prototype 28 4. Prototype (GoF pag. 117) 4.1. Descrizione 4.2. Esempio Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Dettagli

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione

Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione Gerarchie di Tipi Metodologie di progetto Estensione di classi Implementazione di interfacce Composizione Notazione UML Relazione Simbolo Significato Ereditarietà Implementazione Aggregazione Dipendenza

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Reingegnerizzazione ed implementazione del modulo di aggregazione dati di contesto dell architettura CARE. Marco Fornoni

Reingegnerizzazione ed implementazione del modulo di aggregazione dati di contesto dell architettura CARE. Marco Fornoni Reingegnerizzazione ed implementazione del modulo di aggregazione dati di contesto dell architettura CARE Marco Fornoni A mio padre e mia madre, Dino e Teresa e a mia sorella Valeria. 1 Indice 1 Architettura

Dettagli

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso) 1) Si considerino le classi Java: Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso) class Card Card (String seed, int value) this.seed=seed; this.value=value; String seed; int

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

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

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011 Fondamenti di Informatica 1 Prof. B.Buttarazzi A.A. 2010/2011 Sommario Paradigma OO Incapsulamento Polimorfismo e Overloading Ereditarietà e Overriding Esercizi svolti Esercizi proposti Paradigma OO Le

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Appello dell 8 Febbraio 2005 Esercizio 1 (ASD) 1. Dire quale delle seguenti affermazioni è vera giustificando la risposta. (a) lg

Dettagli

Programmazione AA 2012 2013

Programmazione AA 2012 2013 Programmazione ad Oggetti AA 2012 2013 Contenuti del corso Modulo A Tecniche di programmazione Docente: Prof. Michele Bugliesi Modulo B Tecniche di progetto Docente: Prof. Alessandro Roncato Contenuti

Dettagli

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 http://polaris.ing.unimo.it/fic/laboratorio.html. Outline

Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 http://polaris.ing.unimo.it/fic/laboratorio.html. Outline Fondamenti di Informatica C Esercitazioni di Laboratorio / 3 http://polaris.ing.unimo.it/fic/laboratorio.html Ing. Francesco De Mola demola.francesco@unimore.it DII, Modena Via Vignolese (lab. Dottorandi

Dettagli

I tipi di dato astratti

I tipi di dato astratti I tipi di dato astratti.0 I tipi di dato astratti c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 001/00.0 0 I tipi di dato astratti La nozione di tipo di dato

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Lezione 5 Dott. Alessandro Roncato 08/11/2011 Riassunto Pattern Singleton Pattern Plolimorfismo Classi e Interfacce 2 Ereditarietà multipla In Java una classe può estendere

Dettagli

20 - Input/Output su File

20 - Input/Output su File 20 - Input/Output su File Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola Politecnico di Milano Ingegneria del Software a.a. 2006/07 Appello del 14 settembre 2007 Cognome Nome Matricola Sezione (segnarne una) Baresi, Ghezzi, Morzenti, SanPietro Istruzioni 1. La mancata indicazione

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Cicli, Array e Programmazione su Sequenze

Cicli, Array e Programmazione su Sequenze Cicli, Array e Programmazione su Sequenze Luca Tesei Università di Camerino luca.tesei at unicam.it Università di Camerino - Corso di Laurea in Informatica - Programmazione + Laboratorio di Programmazione

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi

Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1. a cura di Giancarlo Cherchi Eredità in C++ Corso di Linguaggi di Programmazione ad Oggetti 1 a cura di Giancarlo Cherchi 1 Introduzione Il meccanismo dell eredità consente di sfruttare delle relazioni tipo/sottotipo, ereditando attributi

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Il meccanismo dell ereditarietà a.a. 2008/2009 Claudio De Stefano 1 L ereditarietà consente di definire nuove classi per specializzazione o estensione di classi preesistenti,

Dettagli

Proff. Fabio Ciao e Raffaele Bortone

Proff. Fabio Ciao e Raffaele Bortone ISTITUTO D ISTRUZIONE SUPERIORE FERRARIS BRUNELLESCHI - EMPOLI Materia: INFORMATICA PROGRAMMAZIONE ANNUALE A.S. 2014/2015 Classe IV C Informatica Proff. Fabio Ciao e Raffaele Bortone Libro di testo: Cloud

Dettagli

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

Dettagli

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:

Dettagli

Libreria standard JAVA

Libreria standard JAVA JDK Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/ JDK Libreria standard

Dettagli

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI

1. I FONDAMENTI DELLA PROGRAMMAZIONE AD OGGETTI IL LINGUAGGIO JAVA Dispense per il corso di laboratorio di sistemi I.T.I.S. ABACUS A.S. 2008/2009 Autore: Roberto Amadini Testo di riferimento: La programmazione ad oggetti C++ Java (Lorenzi, Moriggia,

Dettagli

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte

Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe prencipe@di.unipi.it. È qualcosa che abbiamo già visto varie volte Java riutilizzo delle classi G. Prencipe prencipe@di.unipi.it Introduzione Una delle caratteristiche fondamentali in Java è il riutilizzo del codice Ci sono due modi per ottenerlo Creare oggetti di classi

Dettagli

La programmazione: tradizionale vs Orientata agli Oggetti (OOP)

La programmazione: tradizionale vs Orientata agli Oggetti (OOP) La programmazione: tradizionale vs Orientata agli Oggetti (OOP) In generale, nella soluzione di un problema si individuano dati e funzionalità (azioni) potendola implementare, a livello più semplice, in

Dettagli

CORSO DI PROGRAMMAZIONE JAVA

CORSO DI PROGRAMMAZIONE JAVA CORSO DI PROGRAMMAZIONE JAVA Corso di Programmazione Java Standard Edition ( MODULO A) OBIETTIVI ll corso ha come obiettivo quello di introdurre la programmazione a oggetti (OOP) e di fornire solide basi

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Reflection in Java 1 Reflection Riflessione

Dettagli

INTRODUZIONE INTRODUZIONE JAVA JAVA

INTRODUZIONE INTRODUZIONE JAVA JAVA INTRODUZIONE INTRODUZIONE Lo sviluppo di applicazioni complesse porta a costruire moduli software sempre più potenti e versatili, che possano essere riutilizzati in numerosi progetti I linguaggi ad oggetti

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 12 ADT: Lista, Pila, Coda A. Miola Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti!Tipo

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Introduzione ai tipi di dato astratti: applicazione alle liste

Introduzione ai tipi di dato astratti: applicazione alle liste Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione

Dettagli

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2014/2015. Ancora Phone Plan

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2014/2015. Ancora Phone Plan Università degli Studi di Bologna Scuola di Ingegneria e Architettura Fondamenti di Informatica T2 Modulo 2 Corso di Laurea in Ingegneria Informatica Anno accademico 2014/2015 Ancora Phone Plan Quanto

Dettagli

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso Obiettivi formativi Introdurre i principi del funzionamento di un elaboratore e della programmazione. Presentare gli approcci elementari alla soluzione di problemi (algoritmi)e al progetto di strutture

Dettagli

CORSO DI PROGRAMMAZIONE

CORSO DI PROGRAMMAZIONE ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE OBJECT ORIENTED PROGRAMMING: I METODI DISPENSA 15.02 15-02_OOP_Metodi_[15] Questa dispensa è rilasciata sotto la licenza Creative

Dettagli

Struttura di un programma Java

Struttura di un programma Java Struttura di un programma Java Un programma in Java è un insieme di dichiarazioni di classi. Una classe non può contenere direttamente delle istruzioni, ma può contenere la dichiarazione di metodi, che

Dettagli

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Fondamenti di Informatica Linguaggi di Programmazione Michele Tomaiuolo Linguaggi macchina I

Dettagli

Indirizzamento Aperto

Indirizzamento Aperto Indirizzamento Aperto Sommario Metodo di indirizzamento aperto Scansione lineare Scansione quadratica Hashing doppio Metodo di indirizzamento aperto L idea è di memorizzare tutti gli elementi nella tabella

Dettagli

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter

Dettagli

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi

Linguaggio Java. Robusto. Orientato agli oggetti. Protegge e gestisce dagli errori. Non permette costrutti pericolosi Linguaggio Java Robusto Non permette costrutti pericolosi Eredità Multipla Gestione della Memoria Orientato agli oggetti Ogni cosa ha un tipo Ogni tipo è un oggetto (quasi) Protegge e gestisce dagli errori

Dettagli

Programmazione Java: Come contenere oggetti

Programmazione Java: Come contenere oggetti Programmazione Java: Come contenere oggetti romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Introduzione ai contenitori Interfacce Implementazione Collection List Set Map Ordinamento»

Dettagli

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 16/7/2014 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX

ESAME DI FONDAMENTI DI INFORMATICA T-2 del 16/7/2014 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX ESAME DI FONDAMENTI DI INFORMATICA T-2 del 16/7/2014 Proff. E. Denti G. Zannoni Tempo a disposizione: 4 ore MAX NB: il candidato troverà nell archivio ZIP scaricato da Esamix anche il software Start Kit

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti

Dettagli

JAVA in ACTION. Jacopo Torrini. Dipartimento di Ingegneria dell'informazione Laboratorio di Tecnologie del Software. jacopo.torrini@jaewa.

JAVA in ACTION. Jacopo Torrini. Dipartimento di Ingegneria dell'informazione Laboratorio di Tecnologie del Software. jacopo.torrini@jaewa. JAVA in ACTION Jacopo Torrini Dipartimento di Ingegneria dell'informazione Laboratorio di Tecnologie del Software jacopo.torrini@jaewa.com Installazione Java Su Windows, dal sito Oracle installare l'ultima

Dettagli

20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist

20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist 20. Appunti sulle liste (gestione in linguaggio C#) 16/04/2015 Arraylist Esamina il codice seguente, eseguilo passo passo (F11) e rispondi ai quesiti: using System; using System.Collections; class Program

Dettagli

ARRAY E STRINGHE. G. Frosini Slide 1

ARRAY E STRINGHE. G. Frosini Slide 1 ARRAY E STRINGHE G. Frosini Slide 1 Array: VARIABILI ARRAY struttura dati costituita da elementi (anche nessuno, array vuoto) dello stesso tipo; tipo array: tipo degli elementi, non numero degli elementi;

Dettagli

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

Dettagli

Java? Sì, grazie. Scopo del corso

Java? Sì, grazie. Scopo del corso Modulo di Java? Sì, grazie Il linguaggio di Internet? Portabilità su qualunque piattaforma (non solo calcolatori): It works everywhere Supporto e disponibilità di strumenti, librerie e documentazione garantiti

Dettagli

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

Dettagli

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2)

Gestione di errori e situazioni eccezionali. Gestione delle eccezioni. Gestione tradizionale di errori e situazioni eccezionali (2) Gestione di errori e situazioni eccezionali Gestione delle eccezioni Una procedura (utente o di libreria) deve poter segnalare l impossibilità di produrre un risultato significativo o la propria terminazione

Dettagli

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1 Prossime lezioni Dai TDA agli oggetti Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro mizzaro@dimi.uniud.it Programmazione, lezione 18 19 gennaio

Dettagli

Iprogrammi scritti in Java sono formati da Classi che

Iprogrammi scritti in Java sono formati da Classi che Capitolo 3. Pesci e Animali Domestici Le Classi di Java Translated by Francesco Orciuoli Iprogrammi scritti in Java sono formati da Classi che rappresentano gli oggetti del mondo reale. Sebbene le persone

Dettagli

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010) Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica, Ingegneria dei Sistemi Informatici Esercitazioni

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

Corso Android New Edition Corso Online Programmatore Android New Edition

Corso Android New Edition Corso Online Programmatore Android New Edition Corso Android New Edition Corso Online Programmatore Android New Edition Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso di Programmatore

Dettagli