Java e Serializzazione dalla A all'xml di Leonardo Puleggi
|
|
|
- Adamo Donati
- 10 anni fa
- Visualizzazioni
Transcript
1 dalla A all'xml di Leonardo Puleggi
2 Indice generale Introduzione2 Grafo di Riferimenti 4 Attributi Transient.. 6 Metodi writeobject e readobject... 7 Ereditarietà e Serializzazione...10 Serializzazione su Canali diversi.. 12 Serializzazione in XML..14 Riferimenti 15 Pag. 1/16
3 Introduzione La serializzazione è un'attività che permette di salvare un oggetto o un grafo di oggetti in uno stream di byte che successivamente può essere salvato in maniera persistente ad esempio in un file oppure inviato sulla rete. La deserializzazione è il processo inverso, che permette, cioè, di ricostruire l'oggetto o il grafo di oggetti dallo stream di byte. Per capire come funziona iniziamo subito con un esempio molto semplice; abbiamo una classe Punto che rappresenta un punto:) nello spazio euclideo in base alle due variabili di istanza x e y. Ecco il codice di questa semplicissima classe con evidenziate in rosso le parti relative alla serializzazione. import java.io.serializable; public class Punto implements Serializable{ private static final long serialversionuid = 1; private int x; private int y; public Punto(int x,int y){ this.x=x; this.y=y; public String tostring(){ return "Il punto ha coordinate "+x+" e "+y; Come è possibile vedere l'unica cosa che dobbiamo fare è : 1. far implementare alla classe l'interfaccia Serializable 2. definire una versione relativa alla classe (se non inserito la JVM provvede a calcolarlo in maniera autonoma, e questo potrebbe portare a errori) La prima delle due richieste è ovvia (anche se ci potrebbe sorprendere il fatto che non abbiamo definito nessun metodo relativo all'interfaccia implementata, ma vedremo dopo che questo sarà nostro compito solo in casi particolari); in pratica si tratta di una interfaccia marker. La versione serve in fase di deserializzazione per verificare che la classi usate Pag. 2/16
4 da chi ha serializzato l'oggetto e chi lo sta deserializzando siano compatibili; se, infatti, le versioni non corrispondono sarà sollevata una InvalidClassException. Una classe può dichiarare la propria versione usando un campo chiamato serialversionuid che deve essere static, final e di tipo long, quindi: <Ogni-Modificatore-di-Accesso> static final long serialversionuid=1l; Vediamo ora il codice per serializzare un oggetto Punto in uno stream di byte (vedi esempio_01): public class SerializzaPunto { public static void main(string[] args) { Punto p=new Punto(2,3); ObjectOutputStream output=null; try{ output=new ObjectOutputStream(new FileOutputStream("dati.dat")); catch (FileNotFoundException e) {. catch(ioexception ioe){ output.writeobject(p); catch (IOException e1) { output.close(); catch (IOException e2) { System.out.println("Serializzazione completata."); Come è possibile vederei passi base per la serializzazione sono: 1. Definire l'oggetto da serializzare :) 2. Definire un ObjectOutputStream su cui andremo a salvare il nostro flusso di byte ( in questo esempio lo stream sarà salvato in un file ma niente vieta di usare anche altri strumenti,vedi esempi con la rete ). 3. Scrivere l'oggetto. 4. Chiudere lo stream. Pag. 3/16
5 Vediamo ora il procedimento inverso, ovvero la deserializzazione: public class DeSerializzaPunto { public static void main(string[] args) { ObjectInputStream ois = null; ois = new ObjectInputStream(new FileInputStream("dati.dat")); catch (FileNotFoundException e) {... catch (IOException e) {... Punto p = null; p = (Punto) ois.readobject(); catch (IOException e1) {. catch (ClassNotFoundException e1) {. System.out.println(p.toString()); Come possiamo vedere il procedimento è banalmente simile: 1. Si definisce un ObjectInputStream (che, in questo caso, prenderà il flusso dal file creato in precedenza) 2. Definiamo un Punto e proviamo a leggerlo dallo stream Grafo di Riferimenti Abbiamo visto come sia possibile serializzare un oggetto semplice che ha come variabili di istanza solo dati primitivi, ma cosa succede se invece la nostra classe definisce variabili di istanza? Vedremo che viene seguito il grafo dei riferimenti in modo che sia completamente ricostruibile lo stato dell'oggetto al momento della serializzazione. Vediamo un esempio in cui abbiamo due classi: Un Padre che ha come variabile di istanza una lista dei suoi Figli Una classe Figlio Pag. 4/16
6 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>();.ecc 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; Per serializzare un oggetto di tipo Padre non dobbiamo fare altro che richiamare il metodo writeobject esattamente come abbiamo fatto prima; se tutti gli oggetti che è possibile trovare nel grafo dei riferimenti sono serializzabili allora non ci saranno problemi. Vediamo come è possibile fare facilmente quanto indicato (vedi esempio_02): public class SerializzaPadre { public static void main(string[] args) { Figlio a=new Figlio("leo","puleggi"); Figlio b=new Figlio("ale","puleggi"); Padre p=new Padre("claudio","puleggi"); p.aggiungifiglio(a); p.aggiungifiglio(b); ObjectOutputStream output=null; Pag. 5/16
7 try{ output=new ObjectOutputStream(new FileOutputStream("dati.dat")); catch (FileNotFoundException e) { catch(ioexception ioe){ output.writeobject(p); catch (IOException e1) { output.close(); catch (IOException e2) { System.out.println("Serializzazione completata."); La deserializzazione è simile a quanto già visto in precedenza. Come abbiamo visto è possibile ricostruire completamente il grafo dei riferimenti dell'oggetto Padre; per realizzarlo si sfrutta la chiusura transitiva, cioè vengono serializzati anche tutti gli oggetti referenziati. E' banale individuare alcuni problemi : Serializzando un oggetto si rischia di serializzare tutta l'applicazione Cosa accade se uno degli oggetti referenziati non è serializzabile?? Per quanto riguarda il secondo problema viene sollevata una eccezione NotSerializableException che porta il programma a fallire (vedi l'esempio 03, uguale al 02 tranne per il fatto che Figlio non è serializzabile). Per il primo problema la questione è più complessa e sarà analizzata nel prossimo capitolo. Attributi Transient Per far si che nella serializzazione non vengano coinvolti particolari oggetti istanza si sfrutta la parola chiava transient che specifica di non serializzare quell'attributo. Vediamo come è possibile modificare l'esempio 02 per ottenere che la collezione contenente i figli non sia serializzata con l'oggetto Padre. Pag. 6/16
8 public class Padre implements Serializable { private static final long serialversionuid = 1L; private String nome; private String cognome; transient private Collection<Figlio> figli; Andando ad eseguire l'esempio_04 notiamo infatti che il riferimento alla collezione è un null, cosa che ci aspettavamo. Con la parola chiave transient siamo riusciti ad impedire di seguire tutto il grafo dei riferimenti, ma si pone il problema di ricostruire, in fase di deserializzazione, le informazioni che avevamo volutamente omesso. Metodi writeobject e readobject Per risolvere il problema con il quale abbiamo concluso il capitolo precedente possiamo adottare due tecniche (che consistono sostanzialmente nella definizione dei metodi di serializzazione e deserializzazione che finora abbiamo sempre ignorato). Le due tecniche sono: 1. Ridefinire i due metodi privati responsabili della scrittura e lettura degli oggetti sugli stream 2. Implementare l'interfaccia Externalizable e definire in modo manuale come salvare e leggere da stream i vari oggetti definendo due metodi : void writeexternal(objectoutput out) void readexternal(objectinput in) Vediamo prima un esempio per capire la prima tecnica; ipotizziamo di aver bisogno di un particolare programma che si sposta su vari computer e a seconda del sistema operativo deve eseguire determinate operazioni. Abbiamo quindi una variabile di istanza che per semplicità è una stringa che rappresenta il sistema operativo (vedi esempio_05) e che dobbiamo escludere dalla serializzazione e ricostruire in fase di deserializzazione. Pag. 7/16
9 public class Agente implements Serializable{ private static final long serialversionuid = 1L; private String nome; transient private String piattaforma; public Agente(String nome){ this.nome=nome; this.piattaforma=system.getproperty("os.name"); private void readobject(objectinputstream ois) throws IOException, ClassNotFoundException { ois.defaultreadobject(); piattaforma = System.getProperty("os.name"); Come è possibile vedere ridefinendo il metodo è possibile specificare come ricostruire eventuali informazioni che non era possibile inserire nella serializzazione; in questo modo sarà possibile ad esempio far agire l'agente su un certo sistema, quando questo avrà completato sarà serializzato insieme alle informazioni accumulate e sarà spostato su un nuovo sistema dove in comportamento dovrà essere dato ad esempio dal sistema operativo. Questa tecnica può essere usata anche per ricostruire eventuali variabili statiche della classe che non vengono salvate dalla serializzazione (vedi esempio_06). In questo esempio la classe Padre mantiene in una variabile statica il numero dei figli. Purtroppo se proviamo a serializzare semplicemente l'oggetto padre otteniamo un errore molto simpatico. Eseguendo infatti l'esempio_06 otteniamo come output della serializzazione Padre nome: claudio cognome: puleggi Figli: [nome: leo cognome: puleggi, nome: ale cognome: puleggi] Numero Figli: 0 Ovviamente si tratta di un errore; per risolverlo bisogna anche qui ridefinire il metodo per leggere l'oggetto dallo stream in modo che ricostruisca correttamente l'informazione mancante. Vediamo il codice importante per questa operazione dall'esempio_07 Pag. 8/16
10 private void readobject(objectinputstream ois) throws IOException, ClassNotFoundException { ois.defaultreadobject(); numero_figli=figli.size(); La seconda tecnica, che consente di risolvere sia i problemi di eventuali variabili non serializzabili sia quelli legati a variabili statiche, consiste nell'implementare un'altra interfaccia, la Externalizable e definire in modo manuale come salvare e leggere da stream i vari oggetti definendo due metodi: void writeexternal(objectoutput out) void readexternal(objectinput in) La differenza sostanziale con la prima tecnica è che definendo noi i metodi per la serializzazione possiamo ottenere un notevole vantaggio in termini di lunghezza dello stream; a fronte di questa maggiore efficienza dobbiamo abbandonare la semplicità del procedimento standard. Questa soluzione può essere usata ad esempio per salvare le informazioni in un documento XML. Vediamo l'esempio_08 in cui abbiamo una classe che rappresenta un proprietà dotata di nome e di un valore(entrambi stringhe): public class Proprietà implements Externalizable{ private static final long serialversionuid = 1L; private String nome; private String valore; public Proprietà(){ public Proprietà(String nome,string valore){ public String tostring(){ public void writeexternal(objectoutput out) throws java.io.ioexception{ out.writeobject(nome); out.writeobject("="); out.writeobject(valore); public void readexternal(objectinput in) throws IOException,ClassNotFoundException{ nome=(string)in.readobject(); String temp=(string)in.readobject(); valore=(string)in.readobject(); Pag. 9/16
11 Come è possibile vedere dal codice, dobbiamo definire ovviamente i metodi richiesti dalla nuova interfaccia che indicano come andranno salvate le informazioni sullo stream (in questo caso abbiamo deciso di scrivere solamente la coppia con in mezzo un carattere = ) ma anche un costruttore no-args(vedremo al momento della deserializzazione il perché). Vediamo come è possibile serializzare un oggetto Proprietà. public class SerializzaProprietà { public static void main(string[] args) { Proprietà p=new Proprietà("password","leonardo"); ObjectOutputStream output=null; try{ output=new ObjectOutputStream(new FileOutputStream("dati.dat")); catch (FileNotFoundException e) { catch(ioexception ioe){ p.writeexternal(output); catch (IOException e1) { output.close(); catch (IOException e2) { System.out.println("Serializzazione completata."); Più interessante è la deserializzazione: public class DeSerializzaProprietà { public static void main(string[] args) { ObjectInputStream ois = null; ois = new ObjectInputStream(new FileInputStream("dati.dat")); catch (FileNotFoundException e) { Pag. 10/16
12 catch (IOException e) { Proprietà p=new Proprietà(); p.readexternal(ois); catch (IOException e1) { catch (ClassNotFoundException e1) { System.out.println(p.toString()); Ora è possibile capire la necessità del costruttore no-args che avevamo precedentemente definito; nella deserializzazione infatti creiamo un oggetto Proprietà che poi avrà la responsabilità di istanziare correttamente le sue variabile di istanza; infatti, come è possibile vedere dal codice, noi passiamo al metodo readexternal il flusso di byte in modo che poi lui possa usarlo per istanziare correttamente le sue variabile di istanza. Ereditarietà e Serializzazione Un altro uso tipico dell'interfaccia Externalizable è nel momento in cui ho la necessità di serializzare una classe che estende un'altra che non è serializzabile. Il problema che si pone è quello illustrato nell'esempio_09 (che è la copia dell'esempio 12 in [1]). In questo esempio abbiamo una classe Persona non serializzabile (e supponiamo non modificabile) e una classe Studente serializzabile che estende Persona. Nel momento della deserializzazione, bisogna quindi usare o il campo serialpersistentfields (che però non tratteremo ulteriormente) oppure usare l'interfaccia Externalizable. L'output dell'esempio 09 è questo: Serializzazione: Creazione studente in corso... Studente creato: John Smith nazionalita Inglese matricola N=AA07594 Inizio serializzazione di John Oggetto John serializzato Deserializzazione: Inizio ripristino studente Ripristino completato Info Studente: Pag. 11/16
13 null null nazionalita Italiana matricola N=AA07594 Come è possibile vedere vengono perse tutte le informazioni che riguardano la classe Persona che non è serializzabile. Vediamo come sia possibile tramite l'interfaccia Externalizable con l'esempio_10: package application; public class Persona { private String nome; private String cognome; private String nazionalita; private static final String NAZIONALITA_DEFAULT = "Italiana"; public Persona() { this.nazionalita = NAZIONALITA_DEFAULT; public String getcognome() { return cognome; public void setcognome(string cognome) { this.cognome = cognome; public String getnazionalita() { return nazionalita; public void setnazionalita(string nazionalita) { this.nazionalita = nazionalita; public String getnome() { return nome; public void setnome(string nome) { this.nome = nome; public String tostring() { return nome + " "+ cognome + " nazionalita " + nazionalita; package application; public class Studente extends Persona implements Externalizable{ private String matricola; public String getmatricola() { return matricola; Pag. 12/16
14 public void setmatricola(string matricola) { this.matricola = matricola; public String tostring() { return super.tostring() + " matricola N=" + matricola; public void writeexternal(objectoutput out) throws java.io.ioexception{ out.writeobject(super.getnome()); out.writeobject(super.getcognome()); out.writeobject(super.getnazionalita()); out.writeobject(matricola); public void readexternal(objectinput in) throws IOException,ClassNotFoundException{ super.setnome((string)in.readobject()); super.setcognome((string)in.readobject()); super.setnazionalita((string)in.readobject()); matricola=(string)in.readobject(); Come è possibile vedere dal codice non abbiamo fatto altro che ottenere dalla superclasse le variabili di istanza, salvarle sullo stream e in fase di deserializzazione ricostruire lo stato della superclasse. Serializzazione su Canali diversi In questo capitolo vedremo come, tramite la serializzazione, è possibile condividere, tramite la rete, oggetti tra programmi differenti. Vedremo come è possibile inviare lo stream di byte che rappresenta la serializzazione dell'oggetto su un pacchetto UDP. Definiamo quindi le classi che andremo ad usare; una classe Figlio banale: 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; Vediamo il codice relativo al client che invierà il pacchetto contenente la serializzazione di una istanza di Figlio Pag. 13/16
15 import java.net.*; public class FiglioUDPClient { public static void main(string[] args) { String nome_server=new String("localhost"); int serverport = 6789; serverport); ByteArrayOutputStream bytestrem=new ByteArrayOutputStream(); ObjectOutputStream out=new ObjectOutputStream(byteStrem); out.writeobject(new Figlio("leo","puleggi")); out.close(); byte[] dati=bytestrem.tobytearray(); DatagramSocket udp_socket=new DatagramSocket(); InetAddress server = InetAddress.getByName(nome_server); DatagramPacket pct_udp=new DatagramPacket(dati, dati.length, server, udp_socket.send(pct_udp); catch(exception e){ Come è possibile vedere dal codice bisogna solo creare un ByteArrayOutputStream serializzare su questo l'oggetto e poi inviarlo com un qualunque array di byte all'interno del datagramma. Il codice del server che si occuperà di ricevere il pacchetto e di estrarre le informazioni : import java.net.*; public class FiglioUDPServer { public static void main(string[] args) { int serverport = 6789; DatagramSocket socket_ascolto=new DatagramSocket(serverPort); byte[] dati=new byte[1000]; while(true){ DatagramPacket udp=new DatagramPacket(dati,dati.length); socket_ascolto.receive(udp); ByteArrayInputStream bytestream=new ByteArrayInputStream(dati); ObjectInputStream ois=new ObjectInputStream(byteStream); Figlio f=(figlio)ois.readobject(); ois.close(); System.out.println("Il Figlio letto dal pacchetto UDP: "+f.tostring()); Pag. 14/16
16 catch(exception e){ Serializzazione in XML da completare Pag. 15/16
17 Riferimenti [1] Esercitazione di Sistemi Distribuiti di Leonardo Mariani Pag. 16/16
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
10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.
ESERCIZIARIO Risposte ai quesiti: 10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. 10.2. Un numero intero in Java è compreso nell'intervallo ( 2 31 ) e (2 31
Mac Application Manager 1.3 (SOLO PER TIGER)
Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i
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
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
Telematica II 17. Esercitazione/Laboratorio 6
Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che
Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012
Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono
Soluzione dell esercizio del 12 Febbraio 2004
Soluzione dell esercizio del 12/2/2004 1 Soluzione dell esercizio del 12 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. 2. Modello concettuale
Programmazione a Oggetti Modulo B
Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione
Registratori di Cassa
modulo Registratori di Cassa Interfacciamento con Registratore di Cassa RCH Nucleo@light GDO BREVE GUIDA ( su logiche di funzionamento e modalità d uso ) www.impresa24.ilsole24ore.com 1 Sommario Introduzione...
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
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
Strutturazione logica dei dati: i file
Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer
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
Convertitori numerici in Excel
ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel
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
appunti delle lezioni Architetture client/server: applicazioni client
Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un esempio particolarmente
Progettazione : Design Pattern Creazionali
Progettazione : Design Pattern Creazionali Alessandro Martinelli [email protected] 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali
RMI. Java RMI RMI. G. Prencipe [email protected]
Java Remote Method Invocation -- RMI G. Prencipe [email protected] RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti
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
PORTALE CLIENTI Manuale utente
PORTALE CLIENTI Manuale utente Sommario 1. Accesso al portale 2. Home Page e login 3. Area riservata 4. Pagina dettaglio procedura 5. Pagina dettaglio programma 6. Installazione dei programmi Sistema operativo
Concetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
SAPIENZA Università di Roma, Facoltà di Ingegneria
SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: Soluzioni Esercizi 13-23 Soluzione
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
Prova di Laboratorio di Programmazione
Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare
Corso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
Inizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
RISOLUTORE AUTOMATICO PER SUDOKU
RISOLUTORE AUTOMATICO PER SUDOKU Progetto Prolog - Pierluigi Tresoldi 609618 INDICE 1.STORIA DEL SUDOKU 2.REGOLE DEL GIOCO 3.PROGRAMMAZIONE CON VINCOLI 4.COMANDI DEL PROGRAMMA 5.ESEMPI 1. STORIA DEL SUDOKU
Database 1 biblioteca universitaria. Testo del quesito
Database 1 biblioteca universitaria Testo del quesito Una biblioteca universitaria acquista testi didattici su indicazione dei professori e cura il prestito dei testi agli studenti. La biblioteca vuole
PHP e MySQL. Guida scaricata da www.webstyling.it
Home -> Manuali & Tutorials -> Guida PHP PHP e MySQL E' possibile realizzare delle applicazioni in php appoggiandosi ad un database, quale ad esempio MySQL. Con le novità introdotte ai tempi di MySQL 4.1
Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
Introduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
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)
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
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
I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.
I TUTORI Indice Del Manuale 1 - Introduzione al Manuale Operativo 2 - Area Tutore o Area Studente? 3 - Come creare tutti insieme i Tutori per ogni alunno? 3.1 - Come creare il secondo tutore per ogni alunno?
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
Introduzione alla teoria dei database relazionali. Come progettare un database
Introduzione alla teoria dei database relazionali Come progettare un database La struttura delle relazioni Dopo la prima fase di individuazione concettuale delle entità e degli attributi è necessario passare
LE CARATTERISTICHE DEI PRODOTTI MULTIVARIANTE
LE CARATTERISTICHE DEI PRODOTTI MULTIVARIANTE Che cosa sono e a cosa servono le caratteristiche? Oltre a descrivere le qualità di un prodotto con un testo generico (descrizione) è possibile dettagliare
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
Capitolo 2. Operazione di limite
Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A
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
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 [email protected] Programmazione Object Oriented in Java
1) GESTIONE DELLE POSTAZIONI REMOTE
IMPORTAZIONE ESPORTAZIONE DATI VIA FTP Per FTP ( FILE TRANSFER PROTOCOL) si intende il protocollo di internet che permette di trasferire documenti di qualsiasi tipo tra siti differenti. Per l utilizzo
Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica - a.a. 2012-13 25 luglio 2013 Testo Il database di una banca è costituito da due vettori paralleli. Il
NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0
Prodotto Inaz Download Manager Release 1.3.0 Tipo release COMPLETA RIEPILOGO ARGOMENTI 1. Introduzione... 2 2. Architettura... 3 3. Configurazione... 4 3.1 Parametri di connessione a Internet... 4 3.2
Ottava Esercitazione. introduzione ai thread java mutua esclusione
Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione
Esercitazione di Basi di Dati
Esercitazione di Basi di Dati Corso di Fondamenti di Informatica 6 Maggio 2004 Come costruire una ontologia Marco Pennacchiotti [email protected] Tel. 0672597334 Ing.dell Informazione, stanza
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
Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.
www.playnet.it agg. Documento 1/03/2007 REGOLE DEL CLIENT Le regole del client sono un sistema di smistamento dei messaggi (arrivati) fra le varie cartelle di posta presenti sul server. Possono essere
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 [email protected] DII, Modena Via Vignolese (lab. Dottorandi
2 Fortino Lugi. Figura Errore. Nel documento non esiste testo dello stile specificato.-3 -- Finestra attiva o nuovo documento
1 Fortino Lugi STAMPA UNIONE OFFICE 2000 Vi sarà capitato sicuramente di ricevere lettere pubblicitarie indirizzate personalmente a voi; ovviamente quelle missive non sono state scritte a mano, ma utilizzando
Invio SMS. DM Board ICS Invio SMS
Invio SMS In questo programma proveremo ad inviare un SMS ad ogni pressione di uno dei 2 tasti della DM Board ICS. Per prima cosa creiamo un nuovo progetto premendo sul pulsante (Create new project): dove
Oggetti Lezione 3. aspetti generali e definizione di classi I
Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione
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
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
appunti delle lezioni Architetture client/server: applicazioni server
Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante
Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass
0_Iniziare con GRASS Avvio di Grass e creazione della cartella del Database di GRASS Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass
lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000
Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,
www.filoweb.it STAMPA UNIONE DI WORD
STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere
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
Esercizi su. Funzioni
Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità
Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247
Registri RMI Per poter interagire con un server remoto, un client deve essere in possesso di una sua referenza remota (ovvero un oggetto stub). Un servizio di Naming è una risorsa centralizzata che può
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
MANUALE UTENTE Fiscali Free
MANUALE UTENTE Fiscali Free Le informazioni contenute in questa pubblicazione sono soggette a modifiche da parte della ComputerNetRimini. Il software descritto in questa pubblicazione viene rilasciato
Tale attività non è descritta in questa dispensa
Fondamenti di informatica Oggetti e Java ottobre 2014 1 Nota preliminare L installazione e l uso di Eclipse richiede di aver preliminarmente installato Java SE SDK Tale attività non è descritta in questa
Funzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4)
FAQ INVIO DOMANDE CIGO CON FLUSSO XML Cosa serve per inviare una domanda CIGO con il flusso XML? (pag. 2) Come si prepara una domanda in formato XML? (pag. 3) Che differenza c è tra una richiesta XML ed
Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.
DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti
[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008
Se devo memorizzare più valori che sono in qualche modo parenti dal punto di vista logico, posso usare il concetto di vettore di variabili (array). Ad esempio, se devo memorizzare le temperature di tutti
Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara.
Piccolo Manuale Manuale Pt 1ª Registrazione (Login) Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara. Riceverete una email contenente: Link della vostra
Guida all utilizzo del CRM
Guida all utilizzo del CRM Indice: Creare un Lead Aggiungere una Nota o Allegato Aggiungere un promemoria di Chiamata Aggiungere un promemoria (compito) Aggiungere un promemoria di un Appuntamento on energy
Procedura SMS. Manuale Utente
Procedura SMS Manuale Utente INDICE: 1 ACCESSO... 4 1.1 Messaggio di benvenuto... 4 2 UTENTI...4 2.1 Gestione utenti (utente di Livello 2)... 4 2.1.1 Creazione nuovo utente... 4 2.1.2 Modifica dati utente...
Corso di Sistemi di Elaborazione delle informazioni
Corso di Sistemi di Elaborazione delle informazioni Basi di Dati Claudio Marrocco I report I Report sono lo strumento più adatto per ottenere una copia stampata dei dati e delle informazioni ricavate dalle
GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C
GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.
Il web server Apache Lezione n. 3. Introduzione
Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar
Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144
Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe
ARCHIVI E DATABASE (prof. Ivaldi Giuliano)
ARCHIVI E DATABASE (prof. Ivaldi Giuliano) Archivio: è un insieme di registrazioni (o records) ciascuna delle quali è costituita da un insieme prefissato di informazioni elementari dette attributi (o campi).
Antivirus. Lezione 07. A cosa serve un antivirus
Lezione 07 Antivirus A cosa serve un antivirus Un antivirus è un programma studiato per cercare tramite una scansione nel sistema in cui è installato la presenza di virus. La funzionalità di un antivirus
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,
Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011
Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.
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
Excel. A cura di Luigi Labonia. e-mail: [email protected]
Excel A cura di Luigi Labonia e-mail: [email protected] Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo
Soluzione dell esercizio del 2 Febbraio 2004
Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo
MICHELANGELO Piattaforma autorizzativa per la gestione di interventi riservata ai fornitori
MICHELANGELO Piattaforma autorizzativa per la gestione di interventi riservata ai fornitori Questa documentazione conterrà tutti i dettagli operativi relativi all impatto della nuova applicazione web di
Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress
Copyright Andrea Giavara wppratico.com Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress 1. Il pannello amministrativo 2. I dati importanti 3. Creare il database - Cpanel - Plesk
Traccia di soluzione dell esercizio del 25/1/2005
Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello
Facciamo click su Ricerca tra i miei Viaggi
Facciamo click su Ricerca tra i miei Viaggi Lasciamo selezionato Sul sito e click su Inizia la Ricerca Il primo in alto è quello attuale, gli altri sono viaggi fatti e salvati in passato Sono mostrate
Guida all uso. Esso sarà riportato nell intestazione. Vediamo:
faxm@il è un applicazione che permette agli utenti dei sistemi di telefonia IP di inviare, ricevere e gestire fax. Il tradizionale sistema di fax è ormai superato. Con faxm@il non riceviamo né spediamo
Siti web centrati sui dati Architettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI
Pagina 1 UN SISTEMA DI NEWS Sommario UN SISTEMA DI NEWS...1 Introduzione...2 Scelgo l'area su cui operare...3 Un minimo di teoria...3 Creo le Pagine...4 Definizione dello Schedario Novità...6 Compilo la
Preps Crea nuovo modello
indice Preps Crea nuovo modello 1. Introduzione 2. Definizione modello 3. Creazione imposizione 4. Numerazione pagine 5. Definizione del bianco tipografico 6. Definizione abbondanza pagine 7. Aggiunta
