Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classi Wrapper, & Generics. Il package java.util. Strutture dati avanzate in Java
|
|
|
- Gaetano Meloni
- 9 anni fa
- Просмотров:
Транскрипт
1 Fondamenti di Informatica L-B Esercitazione n 6 Java: Collezioni, Classi Wrapper, & Generics A.A. 2007/08 Tutor: Barbara Pettazzoni [email protected] Il package java.util Avete giá avuto modo di utilizzare parte di questo package, grazie allo StringTokenizer. Le interfacce fondamentali sono: 1. Collection: non indica nessuna ipotesi su elementi duplicati o relazioni d ordine 2. List: introduce l idea di sequenza 3. Set: introduce l idea di insieme senza duplicati 4. SortedSet: si tratta di un insieme senza elementi duplicati e ordinati 5. Map: introduce il concetto di mappa, cioé di un insieme che associa a delle chiavi (che sono univoche) dei valori. 3 Strutture dati avanzate in Java Gerarchia ed implementazioni Come abbiamo visto la scorsa volta, gli array in Java son sí piú potenti che nel C, ma restano limitati: non possiamo incrementare la dimensione senza perdere valore informativo, per esempio. Java fornisce un ampia scelta di strutture dati (array dinamici, pile, alberi) all interno del Java Collection Framework : Definisce una serie di interfacce che specificano un insieme di funzionalitá Fornisce giá diverse implementazioni Queste strutture dati sono contenitori generici per gli oggetti Fino alla versione di Java 1.4, si utilizzava la classe Object Da Java 5 in poi, é stato aggiunto il supporto ai tipi generici!! 2 4 1
2 Quadro generale Implementazioni fondamentali: Per le liste: ArrayList, Vector, LinkedList Per le tabelle hash: HashMap, HashSet, Hashtable Per gli alberi: TreeSet, TreeMap java.util, versione classica Fino a Java 1.4 (la versione classica ), queste strutture dati utilizzavano il tipo generico Object per poter aggiungere/togliere/inserire gli oggetti. Infatti, se andiamo a dare un occhiata alla Javadoc 1.4 dell ArrayList : Per poter lavorare correttamente con queste strutture, sará necessario aver bene in mente: Cosa é un iteratore A cosa puó servire la classe factory Collections Ma quindicome si poteva fare con i tipi primitivi? Non sono oggetti!! Qualche idea? 5 7 Quadro generale (2) Le classi wrapper (1) Le linked list sono liste realizzate mediante puntatori I resizable array sono liste di array I balanced tree sono alberi realizzati mediante puntatori Le tabelle hash sono tabelle realizzate mediante delle funzioni hash, che sono delle particolari funzioni matematiche in grado di associare ad un entitá un valore numerico univoco. 6 I tipi primitivi sono i mattoni elementari del linguaggio, ma non sono oggetti, e quindi non possiamo usarli in quei metodi in cui si richiede un oggetto generico! Fino a Java 1.4, era necessario eseguire il boxing (ovvero, l incapsulamento di un tipo primitivo in un oggetto) e l unboxing (l operazione duale, dall oggetto si vuole il tipo primitivo) a manina, utilizzando delle apposite classi, dette wrapper Vi é una classe wrapper per ogni tipo primitivo : il nome é quasi uguale al nome del tipo primitivo. 8 2
3 Le classi wrapper (2) Le classi wrapper (4) Non possiamo eseguire operazioni sugli oggetti incapsulati! Integer x = new Integer(3); Integer y = new Integer(2); Integer z = new Integer(); z = x + y; Ogni classe wrapper definisce: Un costruttore, a cui si passa il tipo primitivo Un metodo che permette di ottenere il tipo primitivo contenuto nell oggetto 9 z = new Integer(x.intValue() + y.intvalue()); Quindi, ogni volta va fatto prima l unboxing, quindi si svolge l operazione desiderata, e infine si crea il nuovo oggetto, facendo nuovamente boxing!!! 11 Le classi wrapper (3) Vediamo un semplice esempio di codice: Integer i = new Integer(3); //BOXING int valueint = i.intvalue(); //UNBOXING Character c = new Character( a ); //BOXING char valuechar = c.charvalue(); //UNBOXING Double d = new Double(2.1); //BOXING double valuedouble = i.doublevalue(); //UNBOXING 10 java.util, versione classicaesempio di codice! Vector vettore = new Vector(); vettore.add(new Contatore()); vettore.add( Ciao ); vettore.add(new Integer(3)); vettore.add(new Vector()); for(int i=0; i < vettore.size(); i++) System.out.println(vettore.elementAt(i)); Il codicecompila? Maé del buon codice? Ovviamente sí Mica tanto! Metto insieme mele, pere, ananas Per esempio, per poter usare i metodi della classe Contatore, dovró fare un cast a Contatorema ció potrebbe non essere possibile! Possibile errore a run time!! 12 3
4 java.util, da Java 5 in poi Da Java 5 in poi, son stati introdotti i tipi generici : come si puó anche vedere dalla Javadoc corrispondente, ora si possono costruire delle strutture dati tipate, a seconda dell oggetto che si vuole inserire! Esempio di codice in Java 5 Vector<Contatore> vettore = new Vector<Contatore>(); vettore.add(new Contatore()); vettore.add( Ciao ); vettore.add(new Integer(3)); vettore.add(new Vector()); for(int i=0; i < vettore.size(); i++) System.out.println(vettore.elementAt(i)); Il codicecompila? NO!!! E per i tipi primitivié cambiato qualcosa? Abbiamo costruito un vettore tipato! Il compilatore si accorge che si sta cercando di inserire un oggetto di tipo String, e non prosegue! Le classi wrapper in Java 5 In Java 5 é stato introdotto il boxing/unboxing automatico: Integer x = new Integer(3); Integer y = new Integer(2); Integer z = x + y; Questo codice ora non da piú errore in fase di compilazione! In automatico, Java fa l unboxing, esegue la somma e crea il nuovo oggetto di tipo Integer! List l = new ArrayList(); l.add(3); java.utilesempi vari Ora guarderemo un po di esempi di codice che coinvolgono le diverse strutture del package java.util! Anche quiboxing automatico!
5 Esempio: Set (1) Come giá detto, questa struttura dati impedisce che un oggetto possa essere inserito piú di una volta Questo programma riceve come input da linea di comando una serie di parole, e stampa le parole duplicate, il numero di parole distinte e la lista senza duplicati! import java.util.*; public TestSet Il metodo add public static void main(string args[]) verifica giá se l oggetto é Set s = new HashSet(); presente o meno! for(int i=0;i<args.length;i++) if(!s.add(args[i])) System.out.println( Parola duplicata: + args[i]); System.out.println( Num di parole distinte: + s.size()); System.out.println( Lista ottenuta: + s); 17 L interfaccia Iterator Un iteratore é un entitá in grado di garantire l attraversamento di una collezione con una semantica chiara e ben definita, anche se la collezione venisse modificata! public interface iterator boolean hasnext(); Object next(); void remove(); //opzionale Il metodo next permette di esplorare uno ad uno gli elementi della lista, mentre hasnext verifica se vi sono altri elementi da visitare Il metodo iterator() di una qualunque classe di java.util restituisce l iteratore corrispondente alla lista in uso 19 Esempio: Set (2) Da notare che si é usato il tipo dell interfaccia (Set), NON il tipo della classe. In questo modo, cambiando la classe, il comportamento del programma non cambia! Esempio: import java.util.*; public TestSet public static void main(string args[]) Set s = new TreeSet(); Come utilizzare gli iteratori Nel codice d esempio sui set, potevamo realizzare noi in questo modo la stampa di tutti gli elementi: Iterator iterator = s.iterator(); while(iterator.hasnext()) System.out.print(index.next() + ); Una volta ottenuto l iteratore, si cicla finche il metodo hasnext restituisce vero, e next ritorna l elemento corrispondente
6 Il nuovo costrutto for Gli iteratori permettono di realizzare una nuova forma di ciclo for, molto piú leggibile; invece che definire una variabile di controllo su cui ciclare, si esprime l idea di visitare uno ad uno tutti gli elementi della collezione: Java prenderá l iteratore automaticamente! Riprendiamo sempre il codice di prima: for(object o : s) System.out.print(o.toString() + ); 21 Da Set a List Passiamo quindi a vedere l interfaccia List : le strutture che implementano questa interfaccia definiscono una sequenza di elementi (che possono anche essere duplicati) public interface List extends Collection Object get(int index); Object set(int index, Object element); //Optional void add(int index, Object element); //Optional Object remove(int index); //Optional abstract boolean addall(int index, Collection c); //Optional int indexof(object o); int lastindexof(object o); ListIterator listiterator(); ListIterator listiterator(int index); List sublist(int from, int to); La lista é una sequenza, é stato aggiunto il concetto di posizione! Nuovo tipo di iteratore, con concetto di posizione! 23 Il nuovo costrutto for (2) Implementazioni dell interfaccia List Ancora piú leggibile!! E vi é anche il controllo sul tipo! E se avessimo una collezione tipata, per esempio sulle stringhe come in questo caso? import java.util.*; public TestSet public static void main(string args[]) Set<String> s = new HashSet<String>(); for(string string: s) System.out.print(s + ); 22 Prima di Java 5, la struttura dati piú usata era la classe Vector. Da Java 5 in poi invece, l interfaccia List diventa la scelta primaria: Metodi con nomi piú brevi, e parametri in un ordine piú naturale Vi sono varie implementazioni (ArrayList, LinkedList) Vector ha subito pure una reingegnerizzazzione, per cui implementa anche lui questa interfaccia! 24 6
7 Da Iterator a ListIterator Esempio con List (2) Visto che List introduce il concetto di sequenza, é disponibile un nuovo tipo di iteratore: public interface ListIterator extends Iterator boolean hasnext(); Object next(); boolean haspreviuos(); Object previous(); int nextindex(); int previousindex(); void remove(); //Optional void set(object o); //Optional void add(object o); //Optional Si puó navigare la lista a ritroso L iteratore ha il concetto di indice successivo e precedente 25 ListIterator iterator = list.iterator(); //Stampa dal vettore for(int i=0; i<contatori.length; i++) System.out.println( Il contatore + i + vale: + contatori[i].leggi()); //Stampa mediante iteratore while(iterator.hasnext()) Contatore c = (Contatore) iterator.next(); System.out.println( Contatore vale: + c.leggi); Contatore c1 = new Contatore(6,12); /* list.add(c1); Non si puó ancora fare, list é un riferimento a un qualcosa di ancora astratto, non vi é un implementazione concreta!*/ 27 Esempio con List (1) Esempio con List (3) import java.util.*; import java.io.*; public class EsempioList public static void main(string args[]) Contatore [] contatori = new Contatore[4]; for(int i = 0; i < 4; i++) contatori[i] = new Contatore(i,i*10); contatori[i].incrementa(); // Creo una lista contatore List list = Arrays.asList(contatori); 26 List list2 = new ArrayList(); for(iterator = list.iterator(); iterator.hasnext(); ) list2.add((contatore) iterator.next()); list2.add(c1); System.out.println( Ho aggiunto c1 e vale 6 ); iterator = list2.iterator(); //Perché? while(iterator.hasnext()) Contatore c = (Contatore) iterator.next(); System.out.println( Contatore vale: + c.leggi()); 28 7
8 Esempio con List (4) Contatore c2 = new Contatore(10,20); list2.add(c2); //Dove si trova c1? System.out.println( La lista contiene + list2.size() + contatori ); System.out.println( c1 si trova in posizione: + list2.lastindexof(c1)); //Voglio incrementare c1! int index = list2.lastindexof(c1); ((Contatore) list2.get(index)).incrementa(); iterator = list2.iterator(); //Perché? while(iterator.hasnext()) Contatore c = (Contatore) iterator.next(); System.out.println( Contatore vale: + c.leggi()); 29 Esempio con List (6) if(c.leggi() == valtofind) index = iterator.nextindex() 1; break; //Uhmmm recupero sempre e solo il primo? //Fine while if(index < 0) System.out.println( Non esiste contatore con + valore: + valtofind); else System.out.println( Il primo contatore con + valore + valtofind + si trova + in posizione: index); 31 Esempio con List (5) Esempio con List (7) //Voglio aggiungere un contatore // in una posizione determinata Contatore c3 = new Contatore(30,50); list2.add(2,c3); System.out.println( c1 si trova in posizione: + list2.lastindexof(c1)); System.out.println( c3 si trova in posizione: + list2.lastindexof(c3)); //Voglio recuperare il primo contatore con valore 3 int index = -1, valtofind = 3; iterator = list2.iterator(); while(iterator.hasnext()) Contatore c = (Contatore) iterator.next(); 30 Collections.sort(list2); iterator = list2.iterator(); while(iterator.hasnext()) Contatore c = (Contatore) c.next(); System.out.println( Contatore vale: + c.leggi()); //End main 32 8
9 Ulteriore esempio con Comparable (1) public class Persona implements Comparable private String nome, cognome; public Persona(String nome, String cognome) this.nome = nome; this.cognome = cognome; public String getnome()return nome; public String getcognome()return cognome; public String tostring() return nome + + cognome; public int compareto(object x) Persona p = (Persona) x; int val = cognome.compareto(p.cognome); return (if (val!= 0)? val : nome.compareto(p.nome)); 33 Ancora sui tipi generici! Le versioni precedenti a Java 5 rendevano possibile operazioni sintatticamente corrette (il compilatore non dava errore) ma semanticamente errate (avevamo poi degli errori a run time! Il controllo sul tipo ci permette di sviluppare del codice type safe anche quando utilizziamo delle strutture dati avanzate! Conviene quindi tipizzare sempre a compile time le strutture dati (Esercizio: verificate come si dovrebbero modificare i codici precedenti per renderli type safe) 35 Ulteriore esempio con Comparable (2) public class SortNames public static void main(string args[]) Persona [] persone = new Persona( Albert, Einstein ), new Persona( Eros, Ramazzotti ), new Persona( Eugenio, Bennato ), new Persona( Amaro, Ramazzotti ); List l = Collections.asList(persone); Collections.sort(l); System.out.println(l); Esempio Comparable type safe public class Persona implements Comparable<Persona> private String nome, cognome; public Persona(String nome, String cognome) this.nome = nome; this.cognome = cognome; public boolean equals(object o) Persona p = (Persona) o; return(nome.equals(p.nome) && (cognome.equals(p.cognome)); 34 public int compareto(persona p) int val = cognome.compareto(p.cognome); return (if (val!= 0)? val : nome.compareto(p.nome)); 36 9
10 Esempio Comparable type safe Soluzione: la classe Auto (1) Non c é piú bisogno del metodi compareto generico! I confronti avverranno quindi solo con corrette istanze della classe Persona! Tuttavia, non tutti I metodi si possono rendere type-safe: nel caso di equals, é necessario mantenere come parametro Object Altrimenti si farebbe overloading, e non overriding del metodo: il compilatore dovrebbe scegliere a seconda del parametro, quale dei due metodi chiamare Questo significa che, se il tipo dell oggetto passato non é Persona, allora verrá richiamato il metodo originale della classe Object potenziali errori!! Esercizio: riscrivete la classe Contatore, rendendola type safe. 37 public class Auto implements Comparable<Auto> private String nome, colore; private int prezzo, km; public Auto(String nome, int prezzo, int km, String colore) this.nome = nome; this.prezzo = prezzo; this.km = km; this.colore = colore; public boolean equals(object o) Auto auto = (Auto) o; return (auto.nome.equals(nome) && auto.colore.equals(colore) && auto.prezzo == prezzo && auto.km == km); 39 Esercizio finale Soluzione: la classe Auto (2) La prestigiosa concessionaria Vend O Tutt vi ha incaricato di realizzare un servizio innovativo: dovete realizzare un applicazione mediante la quale un possibile acquirente possa consultare il listino delle auto presenti. Le auto sono caratterizzate da prezzo, chilometraggio, colore e nome. Un utente puó scegliere o di visualizzare tutte le macchine, oppure di specificare un parametro su cui cercare (es, tutte le auto rosse, tutte le auto con un prezzo inferiore a 21000). La lista delle auto stampate deve essere comunque ordinata nell ordine prezzo > chilometraggio > colore > nome. Il programma termina solo quando l utente sceglie l apposita opzione. Sul sito potete trovare il file di testo auto.txt che contiene le auto per l esercizio Opzionale, solo per i piú ardimentosi: dopo un po di tempo, la concessionaria vi richiama chiedendovi di poter inserire anche l opzione di ordinare con chilometraggio > prezzo > nome > colore. Suggerimento: controllate se la classe Collections vi puó fornire degli indizi interessanti 38 public int compareto(auto auto) int compare1 = prezzo - auto.prezzo; if(compare1!= 0) return compare1; compare1 = km - auto.km; if(compare1!= 0) return compare1; compare1 = colore.compareto(auto.colore); if(compare1!= 0) return compare1; return nome.compareto(auto.nome); public String tostring() return "(Nome: " + nome + ", Prezzo: " + prezzo + ", KM: " + km + ", colore: " + colore + ")"; 40 10
11 Soluzione: il main (1) Soluzione: il main (3) import java.io.*; import java.util.*; import fiji.io.*; public class Concessionaria private static Lettore lettore; public static void main(string args[]) //Leggiamo il file con le macchine, e //memorizziamo le auto in un'apposita //struttura ordinata. try List<Auto> listaauto = new Vector<Auto>(); Lettore leggifile = new Lettore(new FileReader("auto.txt")); 41 while(!fine) stampainterfaccia(); String richiesta = lettore.leggilinea(); try int richiestanum = Integer.parseInt(richiesta); List<Auto> ricerca; switch(richiestanum) case 1: stampaauto(listaauto); break; case 2: System.out.print("Inserisci il prezzo massimo: "); try 43 Soluzione: il main (2) Soluzione: il main (4) while(!leggifile.eof()) String linea = leggifile.leggilinea(); StringTokenizer tokenizer = new StringTokenizer(linea," "); String nome = tokenizer.nexttoken(); int prezzo = Integer.valueOf(tokenizer.nextToken()); int km = Integer.valueOf(tokenizer.nextToken()); String colore = tokenizer.nexttoken(); listaauto.add(new Auto(nome,prezzo,km,colore)); Collections.sort(listaAuto); //A questo punto, possiamo preparare l'interfaccia lettore = new Lettore(); boolean fine = false; System.out.println("Benvenuti presso la Vend O'Tutt!"); 42 int prezzomassimo = Integer.parseInt(lettore.leggiLinea()); ricerca = new Vector<Auto>(); for(auto auto : listaauto) if(auto.getprezzo() <= prezzomassimo) ricerca.add(auto); stampaauto(ricerca); catch(exception e) System.out.println("Valore errato di prezzo"); break; //Le altre opzioni sono simili tranne la 6, che mette a true fine // l opzione di default, che stampa un messaggio di errore 44 11
12 Soluzione: stampainterfaccia Soluzione ardimentosa private static void stampainterfaccia() System.out.println("Per favore, indica la scelta desiderata fra le seguenti: "); System.out.println("1) Stampa tutte le auto"); System.out.println("2) Auto inferiori a un certo prezzo"); System.out.println("3) Auto inferiori a un certo chilometraggio"); System.out.println("4) Auto con un certo colore"); System.out.println("5) Auto di un certo tipo"); System.out.println("6) Esci"); System.out.print("Indica la tua scelta (inserisci il numero): "); Se avete letto la javadoc, avrete notato che esiste anche un altro modo per ordinare mediante Collections: si puó infatti utilizzare una classe che implementi l interfaccia Comparator In questo modo, la classe Collections ordinerá secondo l ordinamento specificato! Si potrebbe pensare quindi di realizzare piú classi che implementino questa interfaccia, in grado di ordinare la lista a seconda dell esigenza dell utente Soluzione: stampaauto La classe AutoComparator2 private static void stampaauto(list<auto> l) System.out.println(" "); if(l.size() > 0) for(auto auto : l) System.out.println(auto); else System.out.println("Non esistono auto con il criterio indicato"); System.out.println(" "); 46 import java.util.*; public class AutoComparator2 implements Comparator<Auto> public int compare(auto first, Auto second) int compare1 = first.getchilometraggio()-second.getchilometraggio(); if(compare1!= 0) return compare1; compare1 = first.getprezzo() - second.getprezzo(); if(compare1!= 0) return compare1; compare1 = first.getnome().compareto(second.getnome()); if(compare1!= 0) return compare1; return first.getcolore().compareto(second.getcolore()); 48 12
13 Cosa cambia solo nella stampa!! private static void stampaauto(list<auto> l) System.out.println("In che ordine vuoi i risultati?"); System.out.println("1) Prezzo > Chilometraggio > Colore > Nome"); System.out.println("2) Chilometraggio > Prezzo > Nome > Colore"); System.out.print("Inserisci la tua scelta: "); int valore = 1; try valore = Integer.parseInt(lettore.leggiLinea()); catch(exception e) System.out.println("Valore errato, si usa l'opzione di default"); switch(valore) case 1: break; case 2: Collections.sort(l, new AutoComparator2()); break; default: System.out.println("Errore, si usa l'opzione 1"); break;//e dopo é come prima!!!! 49 13
18 - Vettori. 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 Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
22 - Strutture Dati (Java Collections Framework)
22 - Strutture Dati (Java Collections Framework) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
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
Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
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
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
Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe
STRINGHE IN JAVA In Java, le stringhe non sono pezzi di memo-ria con dentro dei caratteri, come in C: sono oggetti appartenenti alla classe String Una stringa Java rappresenta uno specifico valore e come
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
OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini
Primi concetti di Java Lorenzo Bettini OO puro Java è object-oriented puro Non come il C+ + (OO ibrido) Per compatibilità col C Ogni cosa è un oggetto Gli oggetti si manipolano tramite riferimenti String
Fondamenti di Informatica T1 Mappe
Fondamenti di Informatica T1 Mappe Tutor Melissa Licciardello [email protected] Melissa Licciardello Fondamenti di Informatica T1 1 / 16 Mappe Matrice N x 2 : Gli elementi della prima colonna,
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
Le basi del linguaggio Java
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del
Uso di metodi statici. Walter Didimo
Uso di metodi statici Walter Didimo Metodi di istanza Fino ad ora abbiamo imparato a creare oggetti e ad invocare metodi su tali oggetti i metodi venivano eseguiti dagli oggetti un metodo invocato su un
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:
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.
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
Proprietà delle Classi e degli Oggetti in Java
Fondamenti di Informatica Proprietà delle Classi e degli Oggetti in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Proprietà object-oriented di Java Definendo le caratteristiche e le operazioni di
Programmazione I. 11 gennaio Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): +f(double x):
Programmazione I 11 gennaio 2012 Matricola:........................................................................ Cognome:........................................................................ Nome:...........................................................................
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci [email protected]
Programmazione con Java ArrayList e Generics Daniela Micucci [email protected] ARRAYLIST Programmazione con Java ArrayList e Generics 2 1 La classe ArrayList Fa parte delle librerie standard di
Corso Programmazione Java Standard
Corso Programmazione Java Standard Codice: ITJS0113 Durata: 40 ore Descrizione corso Questo corso fornisce una panoramica sulle varie sfaccettature della sintassi del linguaggio Java, integrata con mirate
Programmazione 1 A.A. 2015/2016
Cognome e Nome Matricola Programmazione 1 A.A. 2015/2016 Appello del 16 Dicembre 2015 Compito n 1 Prima parte Esercizio 1 (10 punti) Cosa stampa il seguente frammento di codice Java? int[] A = {3, 8, 91,
Fondamenti di Informatica I
Sapienza Università di Roma, Facoltà di Ingegneria Corso di Fondamenti di Informatica I Canale 1 (A-K) Anno Accademico 2009-2010 Corso di Laurea in Ingegneria Informatica Docente: Camil Demetrescu Esercitatore:
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E03 Esempi di algoritmi e programmi A. Miola Settembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di algoritmi e
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
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:
Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Esercizi sui metodi Carla Limongelli Maggio 2010 Esercizi 1 Passaggio di parametri di tipo primitivo Indicare che cosa viene visualizzato sullo
/** * 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
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,
Java il Corso Fondamentale
Java il Corso Fondamentale Imparare a Programmare APP per Android, applicativi per Server e Desktop, applet e molto altro. IlTuoCorso - Ermes srl Via E.De Amicis 57 20123 Milano Il corso Ciao! Se desideri
STRUTTURE DATI IN JAVA
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
RETI DI CALCOLATORI Linguaggio Java: Eccezioni
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione
Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
I Tipi di Dato Astratto
I Tipi di Dato Astratto Sommario Cosa sono le Strutture Dati Astratte? Le strutture dati Le operazioni Come scegliere fra varie implementazioni? Quale è la questione? Come organizzare (strutturare) i dati
5 - Istruzioni condizionali
5 - Istruzioni condizionali 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
Fondamenti di Informatica T-1
Fondamenti di Informatica T-1 Mappe Tutor: Allegra De Filippo [email protected] a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 1 Mappe: definizione Tabelle a due colonne:
Definizione di classi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E05 Definizione di classi A. Miola Novembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Definizione di classi 1 Contenuti
Parcheggio.rtf 1/8 6 gennaio 2009. Prova di programmazione: parcheggio a pagamento
Parcheggio.rtf 1/8 6 gennaio 2009 Prova di programmazione: parcheggio a pagamento Si sviluppi il codice per la gestione di un parcheggio a pagamento mediante la classe Parcheggio, che ospita le auto rappresentate
Definizione di metodi in Java
Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un
Programmazione in Java (I modulo)
Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto
Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C strutture di controllo: strutture iterative Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Strutture iterative
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1
Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1 Cosa è il C++ E un linguaggio di programmazione derivato dal C Può essere usato per modificare il SO Unix e i suoi derivati (Linux)
Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi
Informatica Generale Andrea Corradini 12 - Gli algoritmi e la risoluzione di problemi Sommario Che significa risolvere un problema? Algoritmi e programmi Rappresentazione di algoritmi Lo pseudocodice Primitive
Laboratorio di Programmazione 1 [Java]
Laboratorio di Programmazione 1 [Java] Prova di esame - 7 Settembre 2010 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Ristorante. La classe Tavolo ha i seguenti attributi: numero
Giuseppe Callegarin Java, Oggetti e Strutture Dati Cedam INDICE
Giuseppe Callegarin Java, Oggetti e Strutture Dati Cedam 2004 www.javaosd.org INDICE CAP. 1 Macchine, linguaggi e comunicazioni...1 1.1 Dai grandi elaboratori all era dei dispositivi programmabili e comunicanti...1
Esercizio 3. Oppure fare queste operazioni nel metodo main all interno della classe Persona.
Esercizio 3 Scrivere un programma con i seguenti requisiti. Utilizzare una classe Persona che dichiara le variabili nome, cognome, età. Si dichiari inoltre un metodo dettagli() che restituisce in una stringa
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
Laboratorio di programmazione
Laboratorio di programmazione Lezione VIII Tatiana Zolo [email protected] 1 PROGRAMMAZIONE A OGGETTI Quando si programma a oggetti si scompone il problema in sottogruppi di parti collegate che tengono
Ereditarietà e Polimorfismo
Ereditarietà e Polimorfismo Riusare il software A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente vicini È possibile creare classi disgiunte replicando le
