ARRAYLIST. Programmazione con Java ArrayList e Generics 2 08/06/2014. Daniela Micucci

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

1 Programmazione con Java ArrayList e Generics Daniela Micucci ARRAYLIST Programmazione con Java ArrayList e Generics 2 1

2 La classe ArrayList Fa parte delle librerie standard di Java In generale, un ArrayList assolve lo stesso compito di un array, ad eccezione del fatto che un oggetto ArrayList può cambiare lunghezza mentre il programma è in esecuzione La classe ArrayList è implementata utilizzando un array come una variabile di istanza privata Quando l array è pieno, viene creato un nuovo array di dimensione più grande e vengono spostati al suo interno gli elementi Programmazione con Java ArrayList e Generics 3 La classe ArrayList Realizza una lista di elementi (oggetti) Gli elementi possono essere aggiunti: Alla fine All inizio Tra altri elementi È possibile editare, cancellare, accedere e contrare gli elementi all interni della lista Programmazione con Java ArrayList e Generics 4 2

3 Creare ArrayList Al fine di utilizzare la classe ArrayList, occorre importarla dal package java.util L utilizzo è lo stesso di una qualsiasi altra classe, ad eccezione del fatto che va specificato il tipo base come segue: ArrayList<TipoBase> objname = new ArrayList<TipoBase>(); In fase di instanziazione, il tipo base verrà sostituito da un tipo reference (o tipo classe) che specificherà il tipo di elementi che la lista conterrà import java.util.arraylist; public class Demo01 { //Capacità iniziale pari a 10 elementi ArrayList<String> lista = new ArrayList<String>(); Programmazione con Java ArrayList e Generics 5 Creare ArrayList Può essere specificata una capacità iniziale nel momento della creazione ArrayList<TipoBase> objname = new ArrayList<TipoBase>(cap); Anche se si specifica la capacità iniziale, la lista può crescere di dimensione dinamicamente import java.util.arraylist; public class Demo01 { //Capacità iniziale pari a 20 elementi ArrayList<String> lista = new ArrayList<String>(20); Programmazione con Java ArrayList e Generics 6 3

4 Usare metodi di ArrayList Per poter inserire/eliminare/manipolare elementi di una lista occorre utilizzare i metodi che ArrayList mette a disposizione A differenza degli array che permettono solo: Uso delle [] Variabile length Aggiungere elementi: In ultima posizione public boolean add(tipobase nuovoelemento) public void add(int index, TipoBase nuovoelemento) Modificare elementi: In posizione specificata da index. 0<= index <= indice dell ultimo elemento +1 In posizione specificata da index. 0<= index <= indice dell ultimo elemento public void set(int index, TipoBase nuovoelemento) Programmazione con Java ArrayList e Generics 7 Esempio 1 import java.util.arraylist; public class Demo03 { ArrayList<String> lista = new ArrayList<String>(); lista.add("mele"); lista.add("pere"); lista.add("uova"); lista.add(2, "Insalata"); System.out.println(lista); Output: [Mele, Pere, Insalata, Uova] Programmazione con Java ArrayList e Generics 8 4

5 Esempio 2 import java.util.arraylist; public class Demo03 { ArrayList<String> lista = new ArrayList<String>(); lista.add("mele"); lista.add("pere"); lista.add("uova"); lista.add(2, "Insalata"); System.out.println(lista); lista.set(0, "Albicocche"); System.out.println(lista); Output: [Mele, Pere, Insalata, Uova] [Albicocche, Pere, Insalata, Uova] Programmazione con Java ArrayList e Generics 9 Accedere in lettura e rimozione Accedere a singoli elementi: public TipoBase get(int index) ArrayList<String> lista = new ArrayList<String>(); lista.add("mele"); String elemento = lista.get(0); In posizione specificata da index. 0<= index <= indice dell ultimo elemento Rimuovere elementi: public TipoBase remove(int index) ArrayList<String> lista = new ArrayList<String>(); lista.add("mele"); String elemento = lista.remove(0); Programmazione con Java ArrayList e Generics 10 5

6 Numero elementi in un ArrayList Il metodo size è utilizzato per determinare il numero di elementi all interno dell ArrayList public int size() import java.util.arraylist; public class Demo03 { ArrayList<String> lista = new ArrayList<String>(); lista.add("mele"); lista.add("pere"); int numelem = lista.size(); System.out.println(numElem); Output: 2 Programmazione con Java ArrayList e Generics 11 Altri metodi Rimuovere tutti gli elementi public void clear() Verificare se la collezione è vuota public boolean isempty() Verificare se la collezione contiene un certo elemento public boolean contains(object elem) consultare la documentazione! Programmazione con Java ArrayList e Generics 12 6

7 Metodo contains Si basa sull equals Esempio: Creare un ArrayList di String e un ArrayList di Persona Inserire rispettivamente la String «Ciao» e la Persona con nome Mario e età 21 Verificare se il primo array contiene la String «Ciao» e il secondo la Persona Mario con età 21 Codificare equals in Persona e riprovare Programmazione con Java ArrayList e Generics 13 Scorrere un ArrayList La classe ArrayList è un esempio di collection class (letteralmente classe collezione) Con la versione 5.0, Java ha aggiunto un nuovo tipo di loop chiamato for each o enhanced for Questo ciclo è stato progettato per ciclare tutti gli elementi di una collezione (come appunto un ArrayList) Sintassi: for (TipoBase_Array_List var : ArrayList_Obj) { //istruzioni Programmazione con Java ArrayList e Generics 14 7

8 Esempio for-each import java.util.arraylist; public class Demo03 { ArrayList<String> lista = new ArrayList<String>(); lista.add("mele"); lista.add("pere"); lista.add("uova"); lista.add(2, "Insalata"); for (String elemento : lista) { System.out.println(elemento); Output: Mele Pere Insalata Uova Programmazione con Java ArrayList e Generics 15 Esempi pratico: Insieme di stringhe Si implementi il concetto di insieme di stringhe che supporti le tipiche operazioni fra insiemi: Aggiunta di elementi Appartenenza di un elemento Unione e intersezione di un insieme rispetto ad un altro insieme, Calcolo della cardinalità Verifica se l insieme è vuoto Si realizzi un caso di test che crea l insieme {«mela», «pera», «banana» e l insieme {«papaia», «banana», «fragola» faccia l unione del primo con il secondo e verifichi che il primo insieme non è vuoto ha cardinalità 5 faccia l intersezione del primo con il secondo e verifichi che il primo insieme non è vuoto ha cardinalità 1 InsiemeDiStringhe - elementi :ArrayList<String> + InsiemeDiStringhe() + aggiungi(elemento :String) :void + appartiene(daverificare :String) :boolean + cardinalita() :int + vuoto() :boolean + uniscicon(altroinsieme :InsiemeDiStringhe) :void + intersecacon(altroinsieme :InsiemeDiStringhe) :void TestCase InsiemeDiStringheTest + testunione() :void + testintersezione() :void Programmazione con Java ArrayList e Generics 16 8

9 Esercizio pratico: todo list «interface» ToDoList + inserisciattivita(attivita) : void + rimuoviattivita(attivita) : void + sostituisciattivita(attivita, Attivita) : void + svuotalista() : voi d + duratacomplessivaattivita() : int + duratacomplessivaattivitasvolte() : int + duratacomplessivaattivitadasvolgere() : int + svolgiattivita() : void Versione array e versione ArrayList per l associazione con Attivita TestCase TestToDoListArrayList + testsostituzione() : void + testrimozione() : void + testsvolgimento() : void ToDoListArray - lista: Attivita ([]) + ToDoListArray() + inserisciattivita(attivita) : void + rimuoviattivita(attivita) : void + sostituisciattivita(attivita, Attivita) : void + svuotali sta() : void + duratacomplessivaattivita() : int + duratacomplessivaattivitasvolte() : int + duratacomplessivaattivitadasvolgere() : int + svolgiattivita() : void + tostring() : String ToDoListArrayList - lista: ArrayList<Attivita> + ToDoListArrayList() + inserisciattivita(attivita) : void + rimuoviattivita(attivita) : void + sostituisciattivita(attivita, Attivita) : void + svuotalista() : void + duratacomplessivaattivita() : int + duratacomplessivaattivitasvolte() : int + duratacomplessivaattivitadasvolgere() : int + svolgiattivita() : void + tostring() : String Attiv ita - descrizione: String - duratainminuti: int - svolta: boolean -lista -lista + Attivita(String, int) * + getdescrizione() : String * + getduratainminuti() : int + issvolta() : boolean + svolta() : void Programmazione con Java ArrayList e Generics + tostring() : String 17 + equals(object) : boolean GENERICS Programmazione con Java ArrayList e Generics 18 9

10 Classi parametriche e Generici La classe ArrayList è una classe parametrica Ha un parametro, denominato tipo base che può essere sostituito da un qualsiasi tipo reference (tipo classe) A partire dalla versione 5.0 (Tiger), Java permette di definire classi con tipi parametrici Queste classi sono chiamate classi parametriche o definizioni generiche o generici Programmazione con Java ArrayList e Generics 19 Classi parametriche e Generici La classe ArrayList è una classe parametrica Ha un parametro, denominato tipo base che può essere sostituito da un qualsiasi tipo reference (tipo classe) A partire dalla versione 5.0 (Tiger), Java permette di definire classi con tipi parametrici Queste classi sono chiamate classi parametriche o definizioni generiche o generici Esiste anche la versione non parametrica della classe ArrayList Che tipo di oggetti specifica di contenere? Come manipolo i tipi specifici? Programmazione con Java ArrayList e Generics 20 10

11 Perché i generici? Si supponga di voler definire una classe che modella una scatola in grado di contenere un oggetto che a priori non si sa cosa sia Con le conoscenze attuali: public class ScatolaVersione1 { private Object oggetto; public void inserisci(object oggetto) { this.oggetto = oggetto; public Object rimuovi(){ Object tmp = oggetto; oggetto = null; return tmp; Programmazione con Java ArrayList e Generics 21 Perché i generici? Come recuperare un oggetto inserito nella scatola per poterlo manipolare correttamente? public class DemoScatolaVersione1 { ScatolaVersione1 scatola1 = new ScatolaVersione1(); scatola1.inserisci(new Libro("Programmazione", 600)); Object elemento = scatola1.rimuovi(); if(elemento instanceof Libro){ Libro libro = (Libro)elemento; System.out.println(libro.getNumeroPagine()); Object wow! Libro CDAudio - titolo: String - autore: String - numeropagine: int - titolo: String - numerotracce: int + Libro(titolo :String, numeropagine :int) + gettitolo() : String + CDAudio(autore :String, titolo :String, numerotracce :int) + getnumeropagine() : int + setautore(autore :String) : void + settitolo(titolo :String) : void + setnumerotracce(numerotracce :int) : void Programmazione con Java ArrayList e Generics 22 11

12 Generici Classi e metodi possono specificare un tipo parametrico invece di un tipo ben specifico (classe o primitivo) Il tipo parametrico può essere sostituito con qualsiasi tipo classe Tradizionalmente viene utilizzata una singola lettera maiuscola per specificare il tipo parametrico In realtà è possibile utilizzare qualsiasi identificativo diverso dalle keyword del linguaggio Programmazione con Java ArrayList e Generics 23 Generici Una definizione di classe con tipo parametro è memorizzata in un file e compilato come qualsiasi altra classe Una volta compilata, la classe può essere usata come qualsiasi altra classe La differenza sta solo nel fatto che va specificato il tipo classe prima di poter usare la classe parametrica Ciò lo si fa istanziando la classe generica: ClasseParametrica<TipoClasseScelta> objname = new ClasseParametrica<TipoClasseScelta>(); Esempio: ArrayList<String> objname = new ArrayList<String>(); Programmazione con Java ArrayList e Generics 24 12

13 Definire una classe parametrica La classe Scatola rivista public class ScatolaVersione2 <T> { private T oggetto; public void inserisci(t elemento){ this.oggetto = elemento; public T rimuovi(){ T tmp = oggetto; oggetto = null; return tmp; 1. Il tipo parametrico è specificato all interno di <> 2. Va specificato subito dopo il nome della classe 3. Può essere utilizzato un identificativo a piacere (ad esclusione delle keyword) 1. Il tipo parametrico è utilizzato all interno della classe come un qualsiasi altro tipo (primitivo o classe) T ScatolaVersione2 - oggetto: T + ScatolaVersione2(elemento :T) + ScatolaVersione2() + inserisci(elemento :T) : void + rimuovi() : T Programmazione con Java ArrayList e Generics 25 Usare una classe parametrica public class DemoScatolaVersione2 { ScatolaVersione1 scatola1 = new ScatolaVersione1(); scatola1.inserisci(new Libro("Programmazione", 600)); Object elemento = scatola1.rimuovi(); if(elemento instanceof Libro){ Libro libro = (Libro)elemento; System.out.println(libro.getNumeroPagine()); //Con i Generics ScatolaVersione2<Libro> scatola2 = new ScatolaVersione2<Libro>(); scatola2.inserisci(new Libro("Programmazione", 600)); Libro libro = scatola2.rimuovi(); System.out.println(libro.getNumeroPagine()); Programmazione con Java ArrayList e Generics 26 13

14 Classe parametrica con costruttori public class ScatolaVersione2 <T> { private T oggetto; public ScatolaVersione2(T elemento){ inserisci(elemento); public ScatolaVersione2(){ this(null); public void inserisci(t elemento){ this.oggetto = elemento; public T rimuovi(){ T tmp = oggetto; oggetto = null; return tmp; Programmazione con Java ArrayList e Generics 27 Convenzioni di naming I nomi per itipi parametrici più usati sono: E Element Usato in maniera estensiva dal Java Collection Framework K Key N Number T Type V Value S,U,V etc. 2nd, 3rd, 4th types Programmazione con Java ArrayList e Generics 28 14

15 Pitfall #1 Il costruttore di una classe parametrica non viene specificato mediante <> public ScatolaVersione2(T elemento) public ScatolaVersione2() public ScatolaVersione2<T>(T elemento) public ScatolaVersione2<T>() Ok! Ko! anche se quando si istanzia una classe parametrica si usano le <> Libro libro = new Libro( Programmazione", 600); ScatolaVersione2<Libro> scatola1 = new ScatolaVersione2<Libro>(libro); ScatolaVersione2<Libro> scatola2 = new ScatolaVersione2<Libro>(); Programmazione con Java ArrayList e Generics 29 Pitfall #2 Il tipo base non può essere sostituito con un tipo primitivo Però Java mette a disposizione per ogni tipo primitivo la classe corrispondente (chiamata wrapper) Un wrapper di tipo primitivo è un oggetto che incapsula un attributo di tipo primitivo: Mantiene il comportamento del tipo primitivo Permette di usarlo come un oggetto Tipo primitivo boolean char byte short int long float double Classe Boolean Char Byte Short Integer Long Float Double Programmazione con Java ArrayList e Generics 30 15

16 Classi wrapper: Boxing Il processo di conversione da tipo primitivo ad oggetto della corrispondente classe wrapper Si può pensare come ad una «scatola» in cui viene inserito un valore di tipo primitivo (boxing = inscatolamento) Fatto in maniera automatica da Java Integer n = new Integer(42); Double d = new Double(9.99); Character c = new Character( z ); Integer n = 42; Double d = 9.99; Character c = z ; Programmazione con Java ArrayList e Generics 31 Classi wrapper: Unboxing Il processo di conversione inverso da oggetto a corrispondente tipo primitivo Fatto in maniera automatica da Java Esistono dei metodi opportuni Integer n = new Integer(42); int i = n; int a = new Integer(42); double d = new Double(9.99); char c = new Character( z ); Programmazione con Java ArrayList e Generics 32 16

17 Pitfall #2: esempio public class DemoScatolaVersione3 { ScatolaVersione2<Integer> scatola = new ScatolaVersione2<Integer>(); scatola.inserisci(new Integer(4)); Integer i = scatola.rimuovi(); //inboxing aoutomatico scatola.inserisci(4); //outboxing aoutomatic int x = scatola.rimuovi(); Programmazione con Java ArrayList e Generics 33 Pitfall #3 A differenza di un tipo classe che può essere utilizzato sempre all interno di una definizione di classe, il tipo parametrico ha alcune limitazioni In particolare, non può essere utilizzato con la new, i.e., per creare oggetti T object = new T(); T[] a = new T[10]; Programmazione con Java ArrayList e Generics 34 17

18 Pitfall #4 Array definiti come segue sono illegali: ScatolaVersione2<String>[] a = new ScatolaVersione2<String>[10]; Anche se sembra ragionevole, ciò non è permesso dal modo con cui Java realizza i generici Programmazione con Java ArrayList e Generics 35 Più tipi parametrici Una definizione di classe può avere un qualsiasi numero di tipi parametrici I parametri sono elencati in parentesi angolari come unico tipo parametrico, ma sono separati da una virgola T E CoppiaAssortita - primo: T - secondo: E + CoppiaAssortita(primo :T, secondo :E) + setprimo(primo :T) : void + setsecondo(secondo :E) : void + getprimo() : T + getsecondo() : E public class CoppiaAssortita<T, E> { private T primo; private E secondo; public CoppiaAssortita(T primo, E secondo){ this.primo = primo; this.secondo = secondo; public void setprimo(t primo){ this.primo = primo; public void setsecondo(e secondo){ this.secondo = secondo; public T getprimo(){ return primo; public E getsecondo(){ return secondo; Programmazione con Java ArrayList e Generics 36 18

19 Utilizzo di una classe con più tipi parametrici public class DemoCoppiaAssortita { CoppiaAssortita<Libro, Integer> ca1 = new CoppiaAssortita<Libro, Integer> (new Libro("I pilastri della terra", 1000), 9); Libro l = ca1.getprimo(); int score = ca1.getsecondo(); System.out.println("Il libro " + l.gettitolo() + " ha uno score pari a " + score); Output: Il libro I pilastri della terra ha uno score pari a 9 Programmazione con Java ArrayList e Generics 37 Pitfall #5 Non è permesso definire classi generiche che specializzano Throwable o classi discendenti Eg. Exception, Error Ad esempio: public class ProvaEccezione <T> extends Exception genererà un errore in compilazione Programmazione con Java ArrayList e Generics 38 19

20 Limitare i tipi parametrici A volte risulta utile limitare (bound) i tipi che possono essere utilizzati per attualizzare un tipo parametrico T Ad esempio, per assicurare che i tipi classe che possono essere utilizzati siano di tipo VeicoloMotorizzato public class Silos <T extends VeicoloMotorizzato> { //... public class DemoSilos { Silos<Auto> silos1 = new Silos<Auto>(); Silos<Camper> silos2 = new Silos<Camper>(); «interface» VeicoloMotorizzato + accendi() : void + spegni() : void + frena() : void + accelera() : void T:extends VeicoloMotorizzato Silos + entrata(t) : void Camper + accendi() : void + spegni() : void + frena() : void + accelera() : void Auto + accendi() : void + spegni() : void + frena() : void + accelera() : void Programmazione con Java ArrayList e Generics 39 Limitare i tipi parametrici Ogni tentativo di inserire un tipo che non specializza la classe VeicoloMotorizzato risulterà in un errore in compilazione: Silos<Libro> silos1 = new Silos<Libro>(); Un bound su un tipo può essere specificato mediante un nome di classe (o di interfaccia) Solo le classi discendenti di quella bounding possono essere specificate come tipo Programmazione con Java ArrayList e Generics 40 20

21 Limitare i tipi parametrici Una espressione di bounding può contenere una o più interfacce, ma solo una classe La sintassi è la seguente public class ProvaSimple <T extends ClassC & InterfaceA & InterfaceB> Se c è più di un tipo parametrico public class ProvaSimple <T extends ClassC & InterfaceA & InterfaceB, E extends ClassD> Programmazione con Java ArrayList e Generics 41 Interface generiche Una interface può avere uno o più tipi parametrici I dettagli e le notazioni sono analoghe a quelle viste per le classi Programmazione con Java ArrayList e Generics 42 21

22 Ereditarietà con i generici Una classe generica può essere definita come derivata di Una classe ordinaria Un altra classe generica Date due classi Auto e CityCar e una classe generica Silos, non sussiste alcuna relazione tra Silos<Auto> e Silos<CityCar> anche se CityCar è una specializzazione di Auto Programmazione con Java ArrayList e Generics 43 Ultima nota Una volta specificato il tipo classe, è possibile utilizzare oggetti istanziati a partire da quella classe e sottoclasse «interface» VeicoloMotorizzato + accendi() : void + spegni() : void + frena() : void + accelera() : void T:extends VeicoloMotorizzato Silos + entrata(t) : void Camper + accendi() : void + spegni() : void + frena() : void + accelera() : void Auto + accendi() : void + spegni() : void + frena() : void + accelera() : void CityCar public class DemoSilos { Silos<VeicoloMotorizzato> silos3 = new Silos<VeicoloMotorizzato>(); silos3.entrata(new Auto()); silos3.entrata(new CityCar()); silos3.entrata(new Camper()); Programmazione con Java ArrayList e Generics 44 22

23 Sempre inerente all ultima nota Attenzione però a import java.util.arraylist; import java.util.list; public class Prova { //Vale tutto il principio dei tipi e sottotipi //List è una superclasse di ArrayList List<Number> numbers = new ArrayList<Number>(); //2 è un Integer che è una sottolcasse di Number numbers.add(2); //Integer //3.14d è un Double che è una sottolcasse di Number numbers.add(3.14d); //Double /*ATTENZIONE pero' che * che ArrayList<Integer> NON E' UN SOTTOTIPO di ArrayList<Number> * (e tanto meno List<Integer> di ArrayList<Number>) * in quanto viene violato il principio di sostituzione come * si evince dal seguente esempio:*/ //ArrayList<Number> integers = new ArrayList<Integer>(); //NON COMPILA List<Integer> interi = new ArrayList<Integer>(); interi.add(2); List<Number> numeri = interi; // non compila! numeri.add(3.14d); Programmazione con Java ArrayList e Generics 45 Esercizio lista concatenata Attiv ita - descrizione: String - duratainminuti: int - svolta: boolean + Attivita(descrizione :String, duratainminuti :int) + getdescrizione() : String + getduratainminuti() : int + issvolta() : boolean + svolta() : void + tostring() : String + equals(altraattivita :Object) : boolean E Nodo - dato: E - next: Nodo<E> + Nodo(dato :E, next :Nodo<E>) + getdato() : E + setdato(dato :E) : void + getnext() : Nodo<E> + setnext(next :Nodo<E>) : void + tostring() : String -head 1 concretizza dato in Nodo E DemoLista + main(args :String[]) : void ListaConcatenata + ListaConcatenata() + aggiunginodo(nodo :Nodo<E>) : void + aggiunginodo(elemento :E) : void + tostring() : String Programmazione con Java ArrayList e Generics 46 23

24 Esercizio conclusivo (1/2) TestCase Test + testcentrale() : void + testcentraleequa1() : void + testcentraleequasoloprioritarie() : void Persona - nome: String - indirizzo: String - citta: String + Persona(nome :String, indirizzo :String, citta :String) + getnome() : String + getindirizzo() : String + getcitta() : String + tostring() : String -destinatario -mittente CentraleSmistaPosta - filiale: String + CentraleSmistaPosta(filiale :String) + ricevilettera(nuovalettera :Lettera) : void # posizioneletteradasmistare() : int # getlettera(posizione :int) : Lettera + smistalettera() : Lettera + tostring() : String Lettera + PRIORITARIA: int = 1 {readonly + TRADIZIONALE: int = 0 {readonly - tipospedizione: int #lettere * + Lettera(mittente :Persona, destinatario :Persona, tipospedizione :int) + Lettera(mittente :Persona, destinatario :Persona) + getmittente() : Persona + getdestinatario() : Persona + gettipospedizione() : int + tostring() : String CentraleSmistaPostaEqua - numeroprioritariesmistate: int + NUMERO_MAX_PRIORITARIE_CONSECUTIVE: int = 2 + CentraleSmistaPostaEqua(filiale :String) # posizioneletteradasmistare() : int Exception DestinatarioNonSpecificatoException + DestinatarioNonSpecificatoException() Programmazione con Java ArrayList e Generics 47 Esercizio conclusivo (2/2) Entrambi i costruttori di Lettera lanciano eccezione se il mittente è null Il costruttore di Lettera public Lettera(Persona mittente, Persona destinatario), imposta il tipo di spedizione a tradizionale L associazione tra Lettera e CentraleSmistaPosta va realizzata con un ArrayList Metodi di CentraleSmistaPosta: public void ricevilettera(lettera nuovalettera) accoda la nuova lettera protected int posizioneletteradasmistare(): restituisce la prima prioritaria se c è o la prima tradizionale protected Lettera getlettera(int posizione): restituisce la lettera alla posizione specificata senza rimuoverla dalla lista public Lettera smistalettera(): rimuove e restituisce la prima lettera prioritaria che trova. In caso di lettere solo tradizionali, rimuove la prima Metodi CentraleSmistaPostaEqua L attributo numeroprioritariesmistate mantiene il numero di prioritarie attualmente smistate protected int posizioneletteradasmistare(): ogni NUMERO_MAX_PRIORITARIE_CONSECUTIVE lettere prioritarie smistate, restituisce la posizione della prima tradizionale. Se non esistono lettere prioritarie, restituisce la posizione della prima tradizionale. Se non ha ancora smistato NUMERO_MAX_PRIORITARIE_CONSECUTIVE lettere prioritarie, restituisce la prima prioritaria Programmazione con Java ArrayList e Generics 48 24

25 Digressione: wildcard Le classi e le interfacce possono specificare tipi parametrici che non sono completamente definiti Poiché specificano un ampio insieme di tipi, sono conosciuti come wildcard, i.e., caratteri generali public void metodo(string arg1, ArrayList<?> arg2) È una stringa È un ArrayList il cui tipo base può essere di qualsiasi tipo Programmazione con Java: Collection Framework 49 Digressione: wildcard Può essere messo un bound sul wildcard in modo da specificare che il tipo deve essere un tipo antenato tipo o un tipo discendente di qualche tipo classe o interfaccia La notazione <? extends Elemento> specifica che il tipo sostituito deve essere un discendente della classe Elemento La notazione <? super Elemento> specifica che il tipo sostituito deve essere un antenato della classe Elemento Programmazione con Java: Collection Framework 50 25

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

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

Esempio su strutture dati dinamiche: ArrayList

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

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

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

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

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

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

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

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

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

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

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

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

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

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

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

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

La velocità di una carovana

La velocità di una carovana Programmazione A.A. 2002-03 I linguaggio Java ( Lezione X, Parte I ) Il primo programma Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

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

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

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

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

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

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

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

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione basata sul campo d utilizzo. I principali package sono:

Dettagli

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4: Ereditarietà, interfacce e clonazione Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo

Dettagli

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: Javadoc Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: /* commenti */ // commenti /** commenti documentazione */ Questi ultimi generano automaticamente

Dettagli

Generics & Collections

Generics & Collections Generics & Collections Ingegneria del software Jody Marca jody.marca@polimi.it I Generics 2 I Generics rendono possibile definire tipi parametrici tramite classi ed interfacce che gestiscono tipi generici

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

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Laboratorio di Sistemi Distribuiti Leonardo Mariani Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante

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

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

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

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

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

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

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

dall argomento argomento della malloc()

dall argomento argomento della malloc() Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È

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 10 Strutture collegate - 2 A. Miola Febbraio 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Strutture collegate - 2 1 Contenuti!Strutture

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

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

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java.

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java. Corso di Laurea in Informatica e Comunicazione Digitale a.a. 2006-2007 Interazione Uomo-Macchina Introduzione a Java Seconda Parte Irene Mazzotta Giovanni Cozzolongo Vincenzo Silvetri 1 Richiami: Java

Dettagli

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

Bank. Bank. BankAccount. Bank. Bank. private BankAccount[] conti; // Posizione attuale private int posizioneattuale;... Bank BankAccount Bank Bank Bank BankAccount private BankAccount[] conti; // Posizione attuale private int posizioneattuale;... Bank Bank public Bank(String nome, String internationalcode, int dimensione)

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

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

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

Supermarket Progetto di Programmazione Febbraio 2010

Supermarket Progetto di Programmazione Febbraio 2010 Supermarket Progetto di Programmazione Febbraio 2010 1 Supermercato Dovete realizzare un insieme di classi e interfacce che riguardano la gestione di un supermercato. nella Sezione 2 verranno descritte

Dettagli

Prova d Esame 07.04.2006 Compito A

Prova d Esame 07.04.2006 Compito A DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "Ciao"; protected int n; public General() { n = 1; public

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

I metodi statici -1. Variabili statiche Vogliamo assegnare a ciascuncontoun numeroidentificativo diverso. I metodi statici -2

I metodi statici -1. Variabili statiche Vogliamo assegnare a ciascuncontoun numeroidentificativo diverso. I metodi statici -2 I metodi statici -1 I metodi statici non hanno il parametro implicito il metodo sqrt di Math I metodi statici vengono detti anche metodi di classe perche` non operano su una particolare istanza della classe

Dettagli

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Relazioni tra classi Ereditarietà Generalizzazione Specializzazione Aggregazione Composizione Dipendenza Associazione Sommario Relazioni

Dettagli

Esercizi della lezione 5 di Java

Esercizi della lezione 5 di Java Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica Introduzione alla programmazione in C++ 1 Un introduzione Che cosa è il C++? La programmazione procedurale La programmazione orientata agli oggetti La programmazione

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

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

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

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

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

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

Prova d Esame 07.04.2006 Compito B

Prova d Esame 07.04.2006 Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; public

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

Programmazione ad oggetti

Programmazione ad oggetti DAIS Univ. Ca' Foscari Venezia Programmazione ad oggetti Samuel Rota Bulò Informazioni generali Docente: Samuel Rota Bulò @email: srotabul@dais.unive.it Homepage: http://www.dais.unive.it/~srotabul/ ooprogramming2012.html

Dettagli

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

Dettagli

Aritmetica. Progetto dei programmi

Aritmetica. Progetto dei programmi Aritmetica Un approccio metodologico alla costruzione dei programmi. Tipi di dati primitivi. int, float, double Variabili, dichiarazioni e operazioni Progetto dei programmi 2 Definizione del problema Scenario

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Soluzioni degli esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo) Soluzioni delle prove al calcolatore Esercizio 7 (esame del 08/01/2009) class TabellaDiNumeri{ private double[][] tabella;

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

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

Programmazione ad Oggetti: JAVA. Esercitazione

Programmazione ad Oggetti: JAVA. Esercitazione Programmazione ad Oggetti: JAVA Esercitazione Docente Ing. Mariateresa Celardo mariateresa.celardo@uniroma2.it Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore

Dettagli

Programmazione in Java Parte I: Fondamenti

Programmazione in Java Parte I: Fondamenti Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice

Dettagli

Controllo degli accessi

Controllo degli accessi Il linguaggio Java Il controllo degli accessi alle classi ed ai membri di una classe Controllo degli accessi Accesso alle classi Accesso alle classi package package miopackage; public public class class

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

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

Grammatica di base: Pointers

Grammatica di base: Pointers Grammatica di base: Pointers Esistono I puntatori a funzioni. Bisogna esplicitare esattamente il tipo di ritorno e il tipo di argomento. Per evitare ambiguità con il prefisso * nel declarator, il nome

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

Introduzione al linguaggio Java

Introduzione al linguaggio Java Introduzione al linguaggio Java Corso di Gestione della Conoscenza d Impresa Prof. Giovanni Semeraro Dott. Pasquale Lops Dipartimento di Informatica Università degli Studi di Bari A.A. 2006/2007 Credits

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

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

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

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 18 dicembre 2007 Esercizio 1: rappresentazione di una tabella di occorrenze L obiettivo è quello di rappresentare in modo efficiente

Dettagli

Outline. Programmazione ad oggetti in Java. La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori

Outline. Programmazione ad oggetti in Java. La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori Programmazione ad oggetti in Java Daniela Micucci Outline La programmazione ad oggetti Classi e istanze Associazioni fra classi Incapsulamento Costruttori 2 Programmazione ad oggetti in Java 1 OOP Java

Dettagli

Esercizi e soluzioni

Esercizi e soluzioni Esercizi e soluzioni Esercizi e soluzioni Esercizi modulo 1 Esercizio 1.a) HelloWorld Digitare, salvare, compilare ed eseguire il programma HelloWorld. Consigliamo al lettore di eseguire questo esercizio

Dettagli

Utilizzo e scrittura di classi

Utilizzo e scrittura di classi Utilizzo e scrittura di classi Corso di Programmazione 3 - Ingegneria dell Informazione e dell Organizzazione 14 novembre, 2001 Gino Perna Implementazione di classi in C++ UN ESEMPIO DI CLASSE: RISULTATI

Dettagli

puntatori Lab. Calc. AA 2007/08 1

puntatori Lab. Calc. AA 2007/08 1 puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene

Dettagli

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

Dettagli

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it

Programmazione II. Lezione 4. Daniele Sgandurra 30/09/2011. daniele.sgandurra@iit.cnr.it Programmazione II Lezione 4 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 30/09/2011 1/46 Programmazione II Lezione 4 30/09/2011 Sommario 1 Esercitazione 2 Panoramica della Programmazione Ad Oggetti 3

Dettagli

Collezioni. (a cura del Prof. Marco Patella)

Collezioni. (a cura del Prof. Marco Patella) (a cura del Prof. Marco Patella) 1 Introduzione al Java Collections Framework Una collezione (o contenitore) consente di organizzare e gestire un gruppo di oggetti collezioni (vere e proprie) mappe implementate

Dettagli

Class Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a. 2013-2014

Class Diagram. Catia Trubiani. Laboratorio di Ingegneria del Software a.a. 2013-2014 Università degli Studi dell Aquila Laboratorio di Ingegneria del Software a.a. 2013-2014 Catia Trubiani Dipartimento di Ingegneria e Scienze dell'informazione e Matematica (DISIM)- Università degli Studi

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

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

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

Introduzione a.net (2)

Introduzione a.net (2) Introduzione a.net (2) Il linguaggio C# Implementazioni alternative dell'architettura.net: Rotor Mono C#: un nuovo linguaggio C# : CLR = Java : JVM C# è il linguaggio di riferimento per.net Costruito su

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

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

Dettagli