Lezione n.6 LPR Informatica Applicata Serializzazione JAVA

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Lezione n.6 LPR Informatica Applicata Serializzazione JAVA"

Transcript

1 Università degli Studi di Pisa Lezione n.6 LPR Informatica Applicata Serializzazione (alcuni lucidi sono ripresi da appunti di Leonardo Puleggi) 28/03/2013 Laura Ricci Laura Ricci 1

2 SERIALIZZAZIONE in, ogni entità è rappresentata come un oggetto; se due entità vogliono comunicare si devono scambiare oggetti serializzazione: meccanismo che permette di salvare un oggetto o un grafo di oggetti su uno stream di byte che successivamente può essere salvato su un file inviato sulla rete deserializzazione: processo inverso, permette di ricostruire l'oggetto/il grafo di oggetti dallo stream di byte La serializzazione si basa sulla possibilità di scrivere lo stato di un oggetto in una forma sequenziale, sufficiente per ricostruire l'oggetto quando viene riletto. Laura Ricci 2

3 SERIALIZZAZIONE La serializzazione di oggetti viene usata in diversi contesti: inviare oggetti su uno stream che rappresenta una connessionetcp flattening di oggetti: trasformare un oggetto in un array Utilizzato per costruire pacchetti UDP. di byte. inviare oggetti che sono parametri di metodi invocati via RMI fornire un meccanismo di persistenza ai programmi, consentendo l'archiviazione di un oggetto. esempio: un programma che realizza una rubrica telefonica o un'agenda. Laura Ricci 3

4 : LA SERIALIZZAZIONE Meccanismo standard offerto da Le classi ObjectInputStream e ObjectOutputStream definiscono streams (basati su streams di byte) su cui si possono leggere e scrivere oggetti. per rendere un oggetto persistente, l'oggetto deve implementare l'interfaccia Serializable o ereditarne una implementazione dalla gerarchia di oggetti. l'oggetto e tutti i suoi componenti debbono essere serializzabili non tutti gli oggetti possono essere serializzati. Es: oggetti del sistema quali Thread, OutputStream e Socket non possono essere serializzate Altri meccanismi offerti da personalizzare il meccanismo di default (interfaccia Serializable) creare un proprio protocollo (classe Externalizable) Laura Ricci 4

5 : LA SERIALIZZAZIONE In rosso le parti relative alla serializzazione import java.io.serializable; import java.util.date; import java.util.calendar; public class PersistentTime implements Serializable { private static final long serialversionuid=1; private Date time; public PersistentTime() {time = Calendar.getInstance().getTime(); } public Date gettime() {return time; } } Laura Ricci 5

6 : LA SERIALIZZAZIONE import java.io.*; public class FlettenTime {public static void main(string [] args) {String filename = "time.ser"; if(args.length > 0) { filename = args[0]; } PersistentTime time = new PersistentTime(); FileOutputStream fos = null; ObjectOutputStream out = null; try { fos = new FileOutputStream(filename); out = new ObjectOutputStream(fos); out.writeobject(time); out.close(); } catch(ioexception ex) {ex.printstacktrace();}}} Laura Ricci 6

7 : LA SERIALIZZAZIONE public class InflateTime {public static void main(string [] args) {String filename = "time.ser"; if(args.length > 0) {filename = args[0]; } PersistentTime time = null; FileInputStream fis = null; ObjectInputStream in = null; try {fis = new FileInputStream(filename); in = new ObjectInputStream(fis); time = (PersistentTime)in.readObject(); in.close(); } catch(ioexception ex){ ex.printstacktrace(); } catch(classnotfoundexception ex) {ex.printstacktrace();} Laura Ricci 7

8 : LA SERIALIZZAZIONE // print out restored time System.out.println("Flattened time: " + time.gettime()); System.out.println(); // print out the current time System.out.println("Current time: "+ Calendar.getInstance().getTime());} } Output ottenuto: Flattened time: Mon Mar 12 19:11:55 CET 2012 Current time: Mon Mar 12 19:16:24 CET 2012 ClassNotFoundException: l'applicazione tenta di caricare una classe, ma non trova nessuna definizione di una classe con quel nome Laura Ricci 8

9 : LA SERIALIZZAZIONE La versione viene utilizzata in fase di deserializzazione per verificare che le classi utilizzate da chi ha serializzato l'oggetto e da chi lo sta deserializzando siano compatibili (vedere second aparte della lezione) Il metodo ObjectInputStream.readObject() legge la sequenza di bytes memorizzati in precedenza e crea un oggetto che è l'esatta replica di quello originale Poichè readobject può leggere qualsiasi tipo di oggetto, è necessario effettuare un cast al tipo corretto dell'oggetto Il file con la specifica della classe deve essere accessibile quando si ricostruisce l'oggetto, altrimenti viene sollevata una ClassNotFoundException Laura Ricci 9

10 SERIALIZZAZIONE: GRAFO DEI RIFERIMENTI import java.io.serializable; import java.util.*; public class Padre implements Serializable { private static final long serialversionuid = 1L; private String nome; private String cognome; private Collection<Figlio> figli; public Padre(String nome,string cognome){ this.nome=nome; this.cognome=cognome; figli=new ArrayList<Figlio>(); } public void aggiungifiglio(figlio f){ figli.add(f); } Laura Ricci 10

11 SERIALIZZAZIONE: GRAFO DEI RIFERIMENTI public String tostring(){ StringBuilder temp=new StringBuilder("Padre"); temp.append("\n"); temp.append("nome: "); temp.append(this.nome); temp.append("\n"); temp.append("cognome: "); temp.append(this.cognome); emp.append("\n"); temp.append("figli: "); temp.append(figli.tostring()); return temp.tostring(); } Laura Ricci 11

12 SERIALIZZAZIONE: GRAFO DEI RIFERIMENTI import java.io.serializable; public class Figlio implements Serializable{ private static final long serialversionuid = 1L; private String nome; private String cognome; public Figlio(String nome,string cognome){ this.nome=nome; this.cognome=cognome; } public String tostring(){ return "nome: "+nome+" cognome: "+cognome; } } Laura Ricci 12

13 SERIALIZZAZIONE: GRAFO DEI RIFERIMENTI public class SerializzaPadre { public static void main(string[] args) { Figlio a=new Figlio("mario","rossi"); Figlio b=new Figlio("maria","rossi"); Padre p=new Padre("giovanni","rosso"); p.aggiungifiglio(a); p.aggiungifiglio(b); ObjectOutputStream output=null; try{ output=new ObjectOutputStream(new FileOutputStream("dati.dat")); } catch (FileNotFoundException e) { System.out.println("Impossibile trovare il file "); e.printstacktrace(); System.exit(1); } catch(ioexception ioe){ System.out.println("Errore IO"); ioe.printstacktrace(); System.exit(1); } Laura Ricci 13

14 SERIALIZZAZIONE: GRAFO DEI RIFERIMENTI try { output.writeobject(p); } catch (IOException e1) { System.out.println("Impossibile serializzare l'oggetto " + p); e1.printstacktrace(); System.exit(1); } try { output.close(); } catch (IOException e2) { System.out.println("Impossibile chiudere lo stream "); e2.printstacktrace(); } System.out.println("Serializzazione completata."); }} Laura Ricci 14

15 DESERIALIZZAZIONE: GRAFO DEI RIFERIMENTI import java.io.*; public class DeSerializzaPadre { public static void main(string[] args) { ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream("dati.dat")); } catch (FileNotFoundException e) { System.out.println("Impossibile trovare il file "); e.printstacktrace(); System.exit(1);} catch (IOException e) { System.out.println("Errore nella creazione dello stream "); e.printstacktrace(); System.exit(1); } Laura Ricci 15

16 DESERIALIZZAZIONE: GRAFO DEI RIFERIMENTI Padre p=null; try { p = (Padre) ois.readobject(); } catch (IOException e1) { System.out.println("Errore nella creazione dello stream "); e1.printstacktrace(); System.exit(1); } catch (ClassNotFoundException e1) { System.out.println("Impossibile trovare la classe"); e1.printstacktrace(); System.exit(1); } System.out.println(p.toString()); } } Laura Ricci 16

17 SERIALIZZAZIONE L'esempio precedente mostra che si possono serializzare/deserializzare oggetti che al loro interno fanno riferimento ad altri oggetti L'implementazione serializza transitivamente tutti gli oggetti riferiti Se però uno degli oggetti riferiti non è serializzabile, viene sollevata una NotSerializableException E' possibile non includere il valore di alcuni attributi nell'oggetto serializzato, mediante l'utilizzo della parola chiave transient Laura Ricci 17

18 SERIALIZZAZIONE import java.io.serializable; import java.util.*; public class Padre implements Serializable { private static final long serialversionuid = 1L; private String nome; private String cognome; transient private Collection<Figlio> figli;... Laura Ricci 18

19 SERIALIZZAZIONE l'attributo transient inserito nell'esempio precedente indica che non si vuole serializzare l'attributo Figli della classe Padre la parola chiave transient limita la visita nell'albero dei riferimenti tutti gli altri attributi vengono salvati se si esegue la serializzazione e quindi la deserializzazione, il campo figli nell'oggetto deserializzato, risulta uguale a null Laura Ricci 19

20 LA SERIALIZZAZIONE STEP BY STEP Cosa avviene quando un oggetto viene serializzato? Si registrano sullo stream: i magic data STREAM_MAGIC = acde STREAM_VERSION = versione della JVM I metadati che descrivono la classe associata alla istanza dell'oggetto serializzato (La classe Padre nell'esempio precedente) La descrizione include il nome della classe, il serialversionuid della classe, il numero di campi, altri flag. I metadati di eventuali superclassi, fino a raggiungere java.lang.object I valori associati all'oggetto istanza della classe, partendo dalla super classe top most I dati degli oggetti eventualmente riferiti dall'oggetto istanza della classe, iniziando dai metadati e poi registrando i valori. (Le istanze della classe Figlio, nell'esempio precedente). Non si registrano i metodi della classe Laura Ricci 20

21 LA SERIALIZZAZIONE STEP BY STEP Consideriamo la classe SimpleClass con campi firstname, lastname, weight Location L'oggetto istanza della classe contiene i campi {"Brad","Pitt",180.5, {49.345, }} A fianco:risultato della serializzazione Notare: per la memorizzazione di un oggetto di 20 bytes utilizzati circa 220 bytes Laura Ricci 21

22 LA SERIALIZZAZIONE: UNDER THE HOOD Meccanismi implementati dalla JVM che è importante conoscere per utilizzare la serializzazione in modo corretto: Caching Controllo delle versioni Deadlock Performance Laura Ricci 22

23 SERIALIZATION CACHE public class BigData { private static final long TERA_BYTE = 1024L * 1024 * 1024 * 1024; public static void main(string[] args) throws IOException { long byteswritten = 0; byte[] data = new byte[100 * 1024 * 1024]; ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("bigdata.bin") ) ); long time = System.currentTimeMillis(); Laura Ricci 23

24 SERIALIZATION CACHE for (int i = 0; i < 10 * 1024 * 1024; i++) { } } out.writeobject(data); byteswritten += data.length; out.writeobject(null); out.close(); time = System.currentTimeMillis() - time; System.out.printf("Wrote %d TB%n", byteswritten / TERA_BYTE); System.out.println("time = " + time); Wrote 1000 TB Time = 3693 } Ma la dimensione del file bigdata.bin è solo di 150 M. Come è possibile??? Laura Ricci 24

25 SERIALIZATION CACHE Ogni qual volta un oggetto viene serializzato e inviato ad una ObjectOutputStream, la sua identità viene memorizzata in una identity hash table Se l'oggetto viene scritto nuovamente sull'outputstream, l'oggetto stesso non viene nuovamente serializzato, ma viene memorizzato un puntatore all'oggetto serializzato in precedenza scopo: minimizzazione delle scritture e risoluzione di relazioni circolari tra oggetti Comportamento analogo quando si legge da uno stream: l'oggetto letto viene memorizzato in una identity hash table, la prima volta Letture future fanno riferimento allo stesso oggetto Possibili inconsistenze quando lo stato dell'oggetto viene modificato La modifica viene persa sull'objectoutputstream, perchè non viene aggiornato lo stato Laura Ricci 25

26 SERIALIZZAZIONE: BUFFERIZZAZIONE Un esempio che dimostra i problemi che può dare un serialization cache: import java.io.*; public class MyObject implements Serializable{ private static final long serialversionuid = 1L; private int x; public MyObject(){ }; public void set( int x) {this.x=x;} public int get() {return x;}; } Laura Ricci 26

27 SERIALIZZAZIONE: BUFFERIZZAZIONE import java.io.*; import java.net.*; public class SerializationClient { public static void main (String Args [] ) throws Exception { Socket s= new Socket("localHost",4000); } ObjectOutputStream out = new ObjectOutputStream (s.getoutputstream()); MyObject myobj = new MyObject(); myobj.set(100); out.writeobject(myobj); myobj.set(200); out.writeobject(myobj); } Laura Ricci 27

28 SERIALIZZAZIONE: BUFFERIZZAZIONE import java.net.*; import java.io.*; public class SerializableServer { public static void main(string args[]) throws Exception {ServerSocket ss = new ServerSocket(4000); Socket s=ss.accept(); ObjectInputStream ois= new ObjectInputStream (s.getinputstream()); MyObject myobj = (MyObject)ois.readObject(); System.out.println(myobj.get()); myobj = (MyObject)ois.readObject(); System.out.println(myobj.get()); }} OUTPUT Laura Ricci 28

29 SERIALIZZAZIONE: CACHING import java.io.*; import java.util.arrays; public class FillCache { public static void main(string[] args) throws IOException { byte[] data = new byte[10 * 1024 * 1024]; ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("smalldata.bin") ) ); for (int i = -128; i < 128; i++) { Arrays.fill(data, (byte) i); out.writeobject(data); } out.writeobject(null); out.close(); } } Laura Ricci 29

30 SERIALIZZAZIONE: CACHING import java.io.*; public class ReadCache { public static void main(string[] args) throws Exception { ObjectInputStream in = new ObjectInputStream( new BufferedInputStream( new FileInputStream("smalldata.bin") ) ); byte[] data; while ((data = (byte[]) in.readobject())!= null) { System.out.println(data[0]); } in.close(); } } Laura Ricci 30

31 La stampa ottenuta: SERIALIZZAZIONE: CACHING -128, -128, -128,.. Perdita di valori dovuta al meccanismo di serializzazione Al momento della deserializzazione, si legge il vettore contenente 128 la prima volta e si memorizza nella identity hash table Quando legge un puntatore all'oggetto, si ricerca il valore dell'oggetto dalla cache locale Il meccanismo di serializzazione ignora se l'oggetto è stato modificato Laura Ricci 31

32 SERIALIZZAZIONE: CACHING import java.io.*; import java.util.arrays; public class FillCache1 { public static void main(string[] args) throws IOException { ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("verylargedata.bin"))); for (int i = -128; i < 128; i++) { byte[] data = new byte[10 * 1024 * 1024]; Arrays.fill(data, (byte) i); out.writeobject(data); } out.writeobject(null); out.close(); } } Laura Ricci 32

33 SERIALIZZAZIONE: CACHING Risultato ottenuto Exception in thread "main" java.lang.outofmemoryerror: Java heap space at FillCache1.main(FillCache1.java:13) Il file generato è di dimensioni molto grandi Ogni volta che un oggetto viene scritto sullo stream, esso viene posto nella identity hash table Rimane nella table finchè non viene effettuata una reset sullo stream Laura Ricci 33

34 SERIALIZZAZIONE: CACHING import java.io.*; import java.util.arrays; public class FillCache2 { public static void main(string[] args) throws IOException { ObjectOutputStream out = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream("verylargedata.bin")) ); byte[] data = new byte[10 * 1024 * 1024]; for (int i = -128; i < 128; i++) { Arrays.fill(data, (byte) i); out.writeobject(data); out.reset(); } out.writeobject(null); out.close(); } } Laura Ricci 34

35 SERIALIZZAZIONE: CACHING La stampa ottenuta -128, -127, -126, Il programma non segnala un OutOfMemory Error La reset effettua il flush della tabella dopo ogni operazione di scrittura Ad ogni write un nuovo oggetto sullo stream Svantaggio: nessuna ottimizzazione, tutti i valori(anche i campi che non hanno cambiato valore) eliminati dalla cache Infatti il programma richiede molto tempo per terminare Laura Ricci 35

36 IL CONTROLLO DELLE VERSIONI supponiamo di creare una classe i cui oggetti siano serializzabili serializziamo un oggetto istanza di quella classe problema: se cambio la specifica della classe, possono le istanze serializzate secondo la vecchia specifica essere deserializzate come istanze della nuova classe? in generale questo non è possibile meccanismo di controllo delle versioni ad ogni classe serializzabile viene attribuito un identificatore unico, il SerialVersionUID Tale identificatore viene rigenerato ogni volta che viene modificata la classe Laura Ricci 36

37 IL CONTROLLO DELLE VERSIONI Il serialversionuid viene generato a partire dal codice della classe Modificando il codice si modifica il serialversionuid Generato al momento di una serializzazione/deserializzazione Quando deserializzo, se ho modificato il codice, la deserializzazione fallisce si tenta di rileggere l'oggetto, la ricostruzione dell'oggetto fallisce e viene sollevata una java.io.invalidclassexception Laura Ricci 37

38 IL CONTROLLO DELLE VERSIONI SerialVersionUID utilizzato in fase di deserializzazione per verificare che il mittente ed il destinatario di un oggetto serializzato fanno riferimento a classi compatibili Le classi in realtà potrebbero essere compatibili Possibile, in questo caso, specificare esplicitamente il serialversionuid e forzarlo uguale nelle due versioni Specifica serialversionuid: il valore può essere qualsiasi valore long private static final long serialversionuid = L; Laura Ricci 38

39 IL CONTROLLO DELLE VERSIONI Specifica serialversionuid: il valore può essere qualsiasi valore long private static final long serialversionuid = L; Il meccanismo di serializzazione controlla se l'utente ha dichiarato esplicitamente un valore per il serialverisonuid ed, in questo caso, usa questo valore, invece di calcolarlo in modo automatico Se in una classe non esiste una dichiarazione esplicita di un serialversionuid, il meccanismo di serializzazione lo calcola automaticamente Dichiarazione esplicita di serialversionuid: per garantire valori consistenti tra diverse implemetazioni di compilatori Laura Ricci 39

40 CONTROLLO DELLE VERSIONI L'identificatore della classe in Eclipse puntando il mouse sul nome di una classe Serializzabile appare una finestra che permette di generare automaticamente un SerialVersionID Laura Ricci 40

41 CONTROLLO DELLE VERSIONI L'identificatore della classe in Eclipse puntando il mouse sul nome di una classe Serializzabile appare una finestra che permette di generare automaticamente un SerialVersionID utilizzando add generated serial version ID Laura Ricci 41

42 OBJECT STREAM: DEADLOCK Supponiamo che un'applicazione A1 apra una connessione verso A2 per inviare ad A2 uno stream di oggetti A1 associa alla connessione un ObjectOutputStream, mentre A2 associa alla medesima connessione un ObjectInputStream Quando A1 crea l'objectoutputstream, viene registrato uno sullo stream un header che viene quindi inviato sulla connessione Quando A2 crea l' ObjectInputStream la JVM accede tenta di recuperare l'header dello stream dal socket associato alla connessione se l'header non è presente, la JVM si blocca in attesa di ricevere l'header sul socket ATTENZIONE: per prevenire situazioni di deadlock occorre porre attenzione sull'ordine con cui vengono creati gli stream di Input/Output Laura Ricci 42

43 OBJECT INPUT/OUTPUT STREAM: DEADLOCK Se i due partners della connessione eseguono entrambi il seguente frammento di codice (s è il socket associato alla connessione) ObjectInputStream in = new ObjectInputStream(s.getInputStream( )); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream( )); si verifica una situazione di deadlock.. Infatti, entrambi tentano di leggere l'header dello stream dal socket l'header viene generato quando viene viene creato l'objectoutputstream nessuno dei due è in grado di generare l'objectoutputstream, perchè bloccato E' sufficiente invertire l'ordine di creazione degli stream in uno dei partner Laura Ricci 43

44 : LA SERIALIZZAZIONE Il meccanismo di default offerto da è generale e le prestazioni non risultano quindi ottime i riferimenti agli oggetti sono memorizzati nella cache degli oggetti associata all'outputstream il garbage collector non può recuperare memoria relativa agli oggetti scritti sullo stream trade off tra convenienza e semplicità e performance Se la performance è un obiettivo primario della applicazione, allora occorre personalizzare il protocollo di serializzazione mediante l'implementazione della interfaccia Externalizable public void writeexternal(objectoutput out) throws IOException; public void readexternal(objectinput in) throws IOException, ClassNotFoundException; Laura Ricci 44

45 INVIO OGGETTI SU STREAM Per inviare oggetti su connessioni TCP associare i filtri ObjectInputStream/ObjectOutputStream agli stream di bytes associati al socket e restituiti da getinputstream/getoutputstream inviare/ricevere degli oggetti sullo/dallo stream avviene mediante scritture/letture sullo stream writeobject ReadObject i metodi precedenti implementano la serializzazione di un oggetto (discussa nella seconda parte della lezione) Laura Ricci 45

46 INVIO DI OGGETTI import java.io.*; public class Studente implements Serializable { private int matricola; private String nome, cognome, corsodilaurea; public Studente(int matricola, String nome, String cognome, String corsodilaurea) {this.matricola = matricola; this.nome = nome; this.cognome = cognome; this.corsodilaurea = corsodilaurea;} public int getmatricola () { return matricola; } public String getnome () { return nome; } public String getcognome () { return cognome; } public String getcorsodilaurea () { return corsodilaurea; } } Laura Ricci 46

47 INVIO DI OGGETTI SU STREMS import java.io.*; import java.net.*; public class Server { public static void main (String args[]) { try { ServerSocket server = new ServerSocket (3575); Socket clientsocket = server.accept(); ObjectOutputStream output = new ObjectOutputStream (clientsocket.getoutputstream ()); output.writeobject("<welcome>"); Studente studente = new Studente (14520,"Mario","Rosso","Informatica"); output.writeobject(studente); output.writeobject("<goodbye>"); clientsocket.close(); server.close();} catch (Exception e) { } } } Laura Ricci 47

48 COME CHIUDERE UNO STREAM public class Client { public static void main (String args[ ]) { try {Socket socket = new Socket ("localhost",3575); ObjectInputStream input=newobjectinputstream(socket.getinputstream()); String beginmessage = (String) input.readobject(); System.out.println (beginmessage); Studente studente = (Studente) input.readobject(); System.out.print (studente.getmatricola()+" - "); System.out.print (studente.getnome()+""+studente.getcognome()+"- "); System.out.print (studente.getcorsodilaurea()+"\n"); String endmessage = (String)input.readObject(); System.out.println (endmessage); socket.close();} catch (Exception e) { System.out.println (e); } } } Laura Ricci 48

49 INVIO DI OGGETTI SU STREAMS Stampa prodotta lato Client <Welcome> Mario Rossi - Informatica <Goodbye> Laura Ricci 49

50 CHIUSURA DI STREAMS import java.net.*; import java.io.*; import java.util.*; public class closer { public static void main(string args[])throws Exception{ InetAddress ia = InetAddress.getByName("localhost"); Socket out =new Socket(ia,2500); OutputStream outs= out.getoutputstream(); ObjectOutputStream oos = new ObjectOutputStream(outs); Date d= new Date(); oos.writeobject(d); out.shutdownoutput(); } } Laura Ricci 50

51 CHIUSURA DI STREAMS import java.net.*; import java.io.*; import java.util.*; public class server { public static void main (String args[]) throws Exception {ServerSocket ss = new ServerSocket(2500); Socket s=ss.accept(); InputStream is = s.getinputstream(); ObjectInputStream ois = new ObjectInputStream(is); boolean go=true; while (go) {try{ Date d =(Date) ois.readobject(); System.out.println(d);} catch (IOException e) {System.out.println(e); go=false; }}}} Laura Ricci 51

52 ASTA ELETTRONICA Sviluppare un programma client server per il supporto di un'asta elettronica. Ogni client possiede un budget massimo B da investire. Il client può richiedere al server il valore V della migliore offerta pervenuta fino ad un certo istante e decidere se abbandonare l'asta, oppure rilanciare. Se il valore ricevuto dal server supera B, l'utente abbandona l'asta, dopo aver avvertito il server. Altrimenti, il client rilancia, inviando al server un valore maggiore di V. Il server invia ai client che lo richiedono il valore della migliore offerta ricevuta fino ad un certo momento e riceve dai client le richieste di rilancio. Per ogni richiesta di rilancio, il server notifica al client se tale offerta può essere accettata (nessuno ha offerto di più nel frattempo), oppure è rifiutata. Laura Ricci 52

53 ASTA ELETTRONICA Il server deve attivare un thread diverso per ogni client che intende partecipare all'asta. La comunicazione tra clients e server deve avvenire mediante socket TCP. Sviluppare due diverse versioni del programma che utilizzino, rispettivamente: la serializzazione offerta da in modo da scambiare oggetti tramite ule connessione TCP una codifica testuale dei messaggi spediti tra client e sever Laura Ricci 53

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

Java e Serializzazione dalla A all'xml di Leonardo Puleggi dalla A all'xml di Leonardo Puleggi Indice generale Introduzione2 Grafo di Riferimenti 4 Attributi Transient.. 6 Metodi writeobject e readobject... 7 Ereditarietà e Serializzazione...10 Serializzazione

Dettagli

LEZIONE N.5 LPR INFORMATICA APPLICATA CONNECTION ORIENTED SOCKETS (2)

LEZIONE N.5 LPR INFORMATICA APPLICATA CONNECTION ORIENTED SOCKETS (2) LEZIONE N.5 LPR INFORMATICA APPLICATA CONNECTION ORIENTED SOCKETS (2) 17/03/2008 Laura Ricci Laura Ricci 1 STREAM MODE SOCKET API: INTEZIONE CON SERVERS PREDEFINITI Esercizio: considerare un servizio attivo

Dettagli

domenica 9 giugno 13 Serializzazione

domenica 9 giugno 13 Serializzazione Serializzazione A cosa serve? Ad ottenere una rappresentazione di una struttura dati che possiamo memorizzare, trasmettere via rete Cosa possiamo serializzare? OK NO Tipi primitivi, Riferimenti stringhe

Dettagli

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione

Serializzazione Java. Serializzazione. Calendario esercitazioni e laboratori. Applicazioni della Serializzazione Calendario esercitazioni e laboratori 29 Marzo esercitazione 12 Aprile esercitazione 26 Aprile laboratorio (lab721) 2 Maggio laboratorio (lab721) 3 Maggio esercitazione 9 Maggio laboratorio (???) 17 Maggio

Dettagli

La Serializzazione in Java. L24_Serialization 1

La Serializzazione in Java. L24_Serialization 1 La Serializzazione in Java L24_Serialization 1 La Serialization è la trasformazione di un oggetto in memoria in una sequenza di byte (ospitata in un file, trasmessa in rete, ecc). La Deserialization è

Dettagli

Il linguaggio Java. Gli stream

Il linguaggio Java. Gli stream Il linguaggio Java Gli stream Overview Uno stream è un flusso unidirezionale di informazioni da una sorgente esterna ovvero verso una sorgente esterna a cui si accede in modo sequenziale 2 Algoritmi di

Dettagli

Unità 2 I file binari

Unità 2 I file binari Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA file binari file di tipi primitivi file di oggetti serializzazione (B) CONOSCENZA E COMPETENZA Rispondere alle seguenti domande

Dettagli

Programmazione distribuita in Java. Socket & Client-Server

Programmazione distribuita in Java. Socket & Client-Server Programmazione distribuita in Java Socket & Client-Server 1 Strumenti per networking Libreria java.net Socket (Astrazione per una presa di comunicazione) Serializzazione Socket Per comunicare si apre una

Dettagli

INPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte)

INPUT OUTPUT Programmazione in rete e laboratorio. Le operazioni di I/O avvengono attraverso stream (sequenze di byte) INPUT OUTPUT 2004-05 Le operazioni di I/O avvengono attraverso stream (sequenze di byte) programma stream in lettura sorgente Programmazione in rete e laboratorio programma stream in scrittura destinazione

Dettagli

Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP. 11/4/2013 Laura Ricci

Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP. 11/4/2013 Laura Ricci Università degli Studi di Pisa Lezione n.7 LPR -Informatica applicata Socket e Datagram UDP 11/4/2013 Laura Ricci Laura Ricci 1 COMUNICAZIONE CONNECTION ORIENTED VS. CONNECTIONLESS Comunicazione Connection

Dettagli

789:;<:' .&+/"0&12%34%5&66+,("%3787%% %"+&%88$77%9%8:$:7%% ;<'&12%8%=,+>"%3787 % % % %"+&%88$77%9%8:$:7%

789:;<:' .&+/0&12%34%5&66+,(%3787%% %+&%88$77%9%8:$:7%% ;<'&12%8%=,+>%3787 % % % %+&%88$77%9%8:$:7% !"#$"%&'()')*+'!"#$%!&'()%*&++,+&-%%!"#$%&'"(()("*+,#$'"&$-. 789:;"%3787 % % % %"+&%88$77%9%8:$:7%?("'(%)"'"%'&0% 0,6"+,@"+("%1(%A'5"+=,B/,%C+,'1&$%

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete

ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete Compito in classe proposto Realizzare un applicazione C/S per trasferire al Client il contenuto

Dettagli

20 - Input/Output su File

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

Dettagli

Scritto da Enrico Battuello Giovedì 25 Novembre 2010 21:11 - Ultimo aggiornamento Venerdì 07 Gennaio 2011 23:50

Scritto da Enrico Battuello Giovedì 25 Novembre 2010 21:11 - Ultimo aggiornamento Venerdì 07 Gennaio 2011 23:50 Nell'informatica e in particolare nell'ambito del salvataggio e della trasmissione dei dati, la serializzazione è il processo mediante il quale è possibile convertire una struttura dati e/o un insieme

Dettagli

Applicazioni web. Parte 10 Socket. Alberto Ferrari

Applicazioni web. Parte 10 Socket. Alberto Ferrari Applicazioni web Parte 10 Socket Protocolli I computer collegati ad Internet comunicano tra loro usando il Transmission Control Protocol (TCP) o lo User Datagram Protocol (UDP) Quando si scrivono programmi

Dettagli

Corso di Telematica II

Corso di Telematica II Corso di Laurea Triennale in Ingegneria Informatica ed Ingegneria delle Telecomunicazioni Corso di Telematica II Matricola Nome, Cognome Data Orale... Prova scritta del 21/07/2005 Si implementi, in linguaggio

Dettagli

Multithreading. Multithreading/2

Multithreading. Multithreading/2 Multithreading Osservazioni su EchoServer Programmazione TCP in Java EchoServer ed EchoClient Uso del multithreading nella programmazione di rete ChatClient e ChatServer Esempio di Web server(?) Multithreading/2

Dettagli

Il package java.io fornisce le classi necessarie per effettuare input e output su file/rete/console/aree di memoria RAM eccetera.

Il package java.io fornisce le classi necessarie per effettuare input e output su file/rete/console/aree di memoria RAM eccetera. IL PACKAGE JAVA.IO Il package java.io fornisce le classi necessarie per effettuare input e output su file/rete/console/aree di memoria RAM eccetera. Il package può essere classificato secondo vari punti

Dettagli

Fondamenti di Informatica C Esercitazioni di Laboratorio / 4 Outline

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

Dettagli

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

Dettagli

LPR A 2005/2006 Lezione 4

LPR A 2005/2006 Lezione 4 LPR A 2005/2006 Lezione 4 JAVA invio invio streams di dati di tipo primitivo su socket UDP di oggetti il paradigma di programmazione client/server JAVA: IL CONCETTO DI STREAM, Studiare capitolo 4 Java

Dettagli

Sockets in Java. Lorenzo Gallucci

Sockets in Java. Lorenzo Gallucci Sockets in Java Lorenzo Gallucci Sockets La libreria Java dispone di un API per la gestione dell I/O di rete Il package di riferimento è java.net Vari compiti: Gestione dell I/O su socket (sia TCP che

Dettagli

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

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe

Dettagli

RTTI Run-time type identification

RTTI Run-time type identification RTTI Run-time type identification Come determinare il tipo di un oggetto durante l'esecuzione RTTI 1 Ereditarietà Forma Linea Rettangolo Cerchio interface Forma { class Linea implements Forma { void ;

Dettagli

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione

Server Sequenziale. Server Concorrente. Esercitazione: Socket Java con connessione Esercitazione: Socket Java con connessione Sviluppare un applicazione C/S che effettui il trasferimento di un file dal client al server (put) usando una connessione. In particolare nel servizio: il client

Dettagli

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

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

Dettagli

Laboratorio di reti I

Laboratorio di reti I Laboratorio di reti I Stefano Brocchi brocchi@dsi.unifi.it 13 ottobre, 2009 Stefano Brocchi Laboratorio di reti I 13 ottobre, 2009 1 / 27 Introduzione Obiettivi del corso Aspetti di programmazione Java

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public

Dettagli

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) (RMI) Remote Method Invocation (RMI) in Java. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. e-mail: cazzola@disi disi.unige.it Walter Cazzola Java: Remote

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 2 (svolta) Socket Java con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione 2 1 Architettura

Dettagli

Esercizio Anello e URL

Esercizio Anello e URL Esercitazione di Laboratorio 31/10/2007 Esercizio su Anello UDP Si consideri una grande azienda produttrice di computer che possieda n filiali sparse sul territorio. Ogni filiale commercializza 10 modelli

Dettagli

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

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

Dettagli

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2010/2011 Corso di Reti di Calcolatori Lucidi delle Esercitazioni Raffaele Giordanelli 1 Socket TCP 2 Echo Application

Dettagli

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

Datagrammi. NOTA: MulticastSocket estende DatagramSocket Datagrammi Le applicazioni che comunicano tramite socket possiedono un canale di comunicazione dedicato. Per comunicare, un client ed un server stabiliscono una connessione, trasmettono dati, quindi chiudono

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 Esercizi svolti Esercizi proposti Paradigma OO Nella programmazione tradizionale,

Dettagli

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

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

Dettagli

Esempi in Java di program.ne O-O

Esempi in Java di program.ne O-O Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico

Dettagli

Informatica I. Ingegneria Medica. Prof. Diego Salamon

Informatica I. Ingegneria Medica. Prof. Diego Salamon Informatica I Ingegneria Medica Prof. Diego Salamon Gestione I/O Prof. Diego Salamon Introduzione Nella creazione e gestione del software è necessario interagire con entità esterne a quelle del programma

Dettagli

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

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

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni 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 Corso

Dettagli

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

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

Lezione 16 programmazione in Java

Lezione 16 programmazione in Java Lezione 16 programmazione in Java Nicola Drago drago@sci.univr.it Dipartimento di Informatica Università di Verona Anteprima Approfondimenti della programmazione OO I FILE Sgli stream (flussi) I file ad

Dettagli

Flussi, lettori e scrittori

Flussi, lettori e scrittori Flussi, lettori e scrittori Per sequenze di byte, InputStream, OutputStream e loro sottoclassi. Es: InputStream in = ; int next = in. read(); if (next!= -1) byte b = (byte) next; Per sequenze di caratteri,

Dettagli

Esercitazione OBIETTIVI DELL ESERCITAZIONE

Esercitazione OBIETTIVI DELL ESERCITAZIONE Esercitazione OBIETTIVI DELL ESERCITAZIONE Sperimentare le classi di i/o relative a file di testo e a stream di byte Prendere confidenza con i meccanismi delle eccezioni Esercizi I/O Lo scenario GESTIONE

Dettagli

Esercitazione: Socket Java senza connessione

Esercitazione: Socket Java senza connessione Esercitazione: Socket Java senza connessione Client e Server Datagram Sviluppare un applicazione C/S in cui: il client invia al server pacchetti contenenti il nome del file e il numero della linea del

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

Prof. D. Malerba Dr. A. Appice - Dr. M.Ceci. Il sistema Input/Output di Java

Prof. D. Malerba Dr. A. Appice - Dr. M.Ceci. Il sistema Input/Output di Java Il sistema Input/Output di Java 1 Il sistema Input/Output di Java La libreria standard di Java offre una vasta gamma di classi per la gestione dell I/O. Queste permettono di gestire tanto un collegamento

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

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

Dettagli

Corsi di Reti di Calcolatori (Docente Luca Becchetti)

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Corsi di Reti di Calcolatori (Docente Luca Becchetti) NOT : le soluzioni proposte sono volutamente sintetiche. Lo studente dovrebbe fare uno sforzo per risolvere i quesiti in modo autonomo, espandendo

Dettagli

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione (sede di Latina) Corso di Laurea in Ingegneria dell Informazione (consorzio Nettuno) Eccezioni L esistenza di

Dettagli

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria CORSO DI FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Prof. Zambonelli, Ing. Cabri, Ing. Denti, Ing. Andrea Aime Zambonelli,

Dettagli

Informazioni sull esame e Regole per lo svolgimento dei progetti

Informazioni sull esame e Regole per lo svolgimento dei progetti Informazioni sull esame e Regole per lo svolgimento dei progetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

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

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2012 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2011-12 17 settembre 2012 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete

Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete Corsi di Reti di Calcolatori (Docente Luca Becchetti) Esercizi su strati di trasporto e di rete 1. Si consideri un protocollo per il trasporto non affidabile di dati realtime. Il sender spedisce un pacchetto

Dettagli

IL PACKAGE java.io. Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione.

IL PACKAGE java.io. Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione. IL PACKAGE java.io Il package java.io definisce i concetti base per gestire l'i/o da qualsiasi sorgente e verso qualsiasi destinazione. CONCETTO BASE: LO STREAM Uno stream è un canale di comunicazione

Dettagli

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la

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 Eccezioni Categorie di eccezioni checked unchecked Gestione delle eccezioni Clausola throws Costrutto try - catch - finally Comando

Dettagli

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

Dettagli

Eccezioni predefinite

Eccezioni predefinite Eccezioni predefinite Java mette a disposizione molte eccezioni già confezionate, che descrivono la maggioranza dei problemi che possono verificarsi a run-time. Ognuna di queste è una classe. Tutte queste

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

Programmazione 1 A.A. 2015/2016

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,

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a gennaio 2012

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a gennaio 2012 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2011-12 16 gennaio 2012 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

File, flussi e pacchetto java.io

File, flussi e pacchetto java.io File, flussi e pacchetto java.io Formato binario e formato di testo I dati sono memorizzati nei files in due formati: testo (successione di caratteri) binario (successione di bytes) Ad es. numero 12345

Dettagli

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio) Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro A.A. 2005/06 Tutor: Loris Cancellieri loris.cancellieri@studio.unibo.it Riferimenti ad oggetti: Cosa si può fare con i riferimenti?

Dettagli

Programmazione ad Oggetti. Java Parte II

Programmazione ad Oggetti. Java Parte II Programmazione ad Oggetti Java Parte II Overview Caratteristiche lessicali Il primo programma Java 1 Commenti /* Commento tradizionale, eventualmente su più linee, non nidificato */ // Commento su di una

Dettagli

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Catia Trubiani. Laboratorio di Ingegneria del Software a.a 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

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo parametrico vs polimorfismo per inclusione Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico

Dettagli

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni Esercizio 1 Nella classe definita di seguito indicare quali sono le variabili di istanza, quali sono le variabili

Dettagli

Creazione, eliminazione, lettura e scrittura di file di testo

Creazione, eliminazione, lettura e scrittura di file di testo Creazione, eliminazione, lettura e scrittura di file di testo Java mette a disposizione degli sviluppatori diverse classi per lavorare con i file di testo, analizziamo le principali: java.io.file La 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 Sommario Programmazione O.O. Oggetti e Classi Metodi Parametri Variabili di istanza Costruttori Variabili locali Esercizi Implica: Programmazione

Dettagli

ALTRI TIPI DI CONNESSIONE

ALTRI TIPI DI CONNESSIONE ALTRI TIPI DI CONNESSIONE Socket Un socket è una connessione a una porta su un computer remoto, che è usata per scambiare informazioni con comandi HTTP Supponiamo che la nostra applicazione voglia ricevere

Dettagli

Corso di Reti di Calcolatori

Corso di Reti di Calcolatori Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

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

Dettagli

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Programmazione Java Struttura di una classe, Costruttore, Riferimento this Programmazione Java Struttura di una classe, Costruttore, Riferimento this romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap > Struttura di una classe > Costruttore > Riferimento

Dettagli

Corso di Reti di Calcolatori. Datagrammi

Corso di Reti di Calcolatori. Datagrammi Corso di Reti di Calcolatori UNICAL Facoltà di Ingegneria a.a. 2002/2003 Esercitazione sul networking in Java (3 a parte) e comandi di rete paolo.trunfio@deis.unical.it 1 Datagrammi Le applicazioni che

Dettagli

Programmazione Java Avanzata Programmazione Object- Oriented in Java

Programmazione Java Avanzata Programmazione Object- Oriented in Java Programmazione Java Avanzata Programmazione Object- Oriented in Java Ing. Gianluca Caminiti Testi di Riferimento (Java) Cay Horstmann Concetti di informatica e fondamenti di Java Apogeo, 2007 (Versione

Dettagli

Laboratorio di Programmazione 1 [Java]

Laboratorio di Programmazione 1 [Java] Laboratorio di Programmazione 1 [Java] Prova di esame - 26 Gennaio 2011 Tempo massimo: 50 minuti Si implementino in Java le classi Tavolo e Pizzeria. La classe Tavolo ha i seguenti attributi: nome (una

Dettagli

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array

Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array Fondamenti di Informatica L-B Esercitazione n 5 Java: Interfaccia Comparable, Array A.A. 2007/08 Tutor: Barbara Pettazzoni barbara.pettazzoni@studio.unibo.it Interfaccia Comparable L altra volta abbiamo

Dettagli

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell

Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: dario.bottazzi@unibo.it, SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e

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

Remote Method Invocation

Remote Method Invocation JAVA RMI LSO 2008 Remote Method Invocation Perché RMI? L obiettivo è di permettere ad una applicazione in esecuzione su una macchina locale di invocare i metodi di un oggetto in esecuzione su un altro

Dettagli

Input/Output in Java

Input/Output in Java Corso Java Input/Output in Java Docente: Dott. Marco Bianchi Slide realizzate da Ing. A.Bei, Dott. M.Bianchi, Dott. F.Lombardi Input/Output in Java Per effettuare operazioni di I/O in Java è possibile

Dettagli

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

Programmazione 2 - Marco Ronchetti. Fondamenti di Java. Fac.Scienze Università di Trento. Static

Programmazione 2 - Marco Ronchetti. Fondamenti di Java. Fac.Scienze Università di Trento. Static 1 Fondamenti di Java Static 2 Modificatori: static Variabili e metodi associati ad una Classe anziche ad un Oggetto sono definiti static. Le variabili statiche servono come singola variabile condivisa

Dettagli

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

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Dettagli

Laboratorio di Programmazione 1 [Java]

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

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

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

Dettagli

I Thread. un thread è uno stream di esecuzione del programma

I Thread. un thread è uno stream di esecuzione del programma I Thread un thread è uno stream di esecuzione del programma Sistema Operativo e Thread Un processo o thread una successione di operazioni che vengono eseguite dal sistema operativo in modo sequenziale

Dettagli

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

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Design Pattern Dott. Alessandro Roncato 18/10/2011 Design Patters I Design Patters sono soluzioni di progettazione standard e ben collaudate che possono essere usate in

Dettagli

Java RMI (Remote Method Invocation)

Java RMI (Remote Method Invocation) Java RMI (Remote Method Invocation) Accesso ad oggetti remoti In Java non sono possibili riferimenti remoti RPC in JAVA Le RMI introducono la possibilità di richiedere esecuzione di metodi remoti in JAVA

Dettagli

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà L ereditarietà è il meccanismo attraverso cui viene implementata la relazione di specializzazione (is-a). L ereditarietà è il meccanismo attraverso cui una classe (derivata) eredita da un altra classe

Dettagli