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

Documenti analoghi
domenica 9 giugno 13 Serializzazione

La Serializzazione in Java. L24_Serialization 1

Il linguaggio Java. Gli stream

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

Programmazione Java Struttura di una classe, Costruttore, Riferimento this

Definizione di classi. Walter Didimo

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

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

Programmazione Java Avanzata Programmazione Object- Oriented in Java

14 - Metodi e Costruttori

Java: Definire Classi e Creare Oggetti

La Gestione della Memoria. Carla Binucci e Walter Didimo

Programmazione orientata agli oggetti Oggetti Composti. Oggetti composti

18 - Classi parzialmente definite: Classi Astratte e Interfacce

Ereditarietà e Polimorfismo

20 - Input/Output su File

La classe java.lang.object

Laboratorio di programmazione

Oggetti Composti (1) Oggetti Composti (2)

Esempio 2: Subtyping

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

I costruttori. Il costruttore standard. Esempio di valori di default. Alterare il costruttore standard

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Il linguaggio Java è un linguaggio di programmazione ad alto livello

Java. Java : compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Programmazione con Java

Java. Java: compilatore e interprete. Programma Java. Java Virtual Machine. Token. Alfabeto

Le basi del linguaggio Java

Oggetti e classi. Cos è un oggetto

Ingegneria del Software

Proprietà delle Classi e degli Oggetti in Java

Programmazione orientata agli oggetti Classi astratte e interfacce

Interfacce. Un interfaccia Java è una collezione di metodi astratti (e di costanti) Un metodo astratto è un metodo non implementato

Installazioni preliminari

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

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali. Esempio Animali

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Programmazione orientata agli oggetti. Ivan Lanese

Esempio: Costruttori ed ereditarietà

Agenti Mobili in Java RMI

Lezione n.6 LPR Informatica Applicata Serializzazione JAVA

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Gerarchia di classi Java 1

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

Operazioni numeriche - Input

Object-Oriented Programming

Ereditarietà e Polimorfismo. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

1 Il Paradigma ad Oggetti

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

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

Object-Oriented Technology. Giuliano Armano 1

Riprendiamo l esercizio calcolatrice

Corso di Reti di Calcolatori L-A

Fondamenti di Programmazione Prof.ssa Elisa Tiezzi. Programmazione orientata a oggetti

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

Strutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05

Basi di dati a oggetti

Java RMI. Alcune premesse Interfaccia e Implementazione RMI. Architettura. Esempi interfaccia e implementazione

Il Linguaggio Java. Le interfacce

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

Esercitazione OBIETTIVI DELL ESERCITAZIONE

Programmazione Java Variabili membro, Metodi La parola chiave final

Esonero del corso di Programmazione a Oggetti

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

Programmazione orientata agli oggetti Ereditarietà

Implementazione Java di un ADT

Linguaggio C: PUNTATORI

Ereditarietà (ultima)

La programmazione ad oggetti (OOP)

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

Puntatori in C. Puntatori. Variabili tradizionali Esempio: int a = 5; Proprietà della variabile a: nome: a

Lettura e scrittura di file di dati input/output

Una classe Borsellino. Tipi numerici di base - Costanti. Esempio d uso. Classe Borsellino cont d. Primi passi per l implementazione di Purse

Modulo 2: Strutture fondamentali della programmazione Java

Metodi. Un metodo è una porzione di codice a cui si associa un nome. Un istruzione eseguita da un metodo può essere:

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

Fondamenti di Informatica T1 Mappe

Programmazione Orientata agli Oggetti

Programmazione di sistemi distribuiti

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

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

RMI. Remote Method Invocation. Enrico Tassi, 3/4/2009. Slides originali di Nicola Gessa

Programmazione Java Finalization di oggetti, Package, Modificatori di accesso

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Distribuiti e Java RMI

Thread in Java. Thread = flusso di esecuzione indipendente nel codice del programma

Remote Method Invocation (RMI)

Corso Programmazione Java Standard

Tipi di Dati Astratti

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Obiettivi. Comprendere i vantaggi offerti dal meccanismo dell ereditarietà Attivare processi di astrazione e specializzazione.

Il paradigma OO e le Classi

OO puro. Primi concetti di Java. Tipi primitivi. Ogni cosa è un oggetto. Java è object-oriented puro Non come il C+ + (OO ibrido) Lorenzo Bettini

Strutture Dati Dinamiche

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Derivazione di Classi

Derivazione di Classi

Primi passi col linguaggio C

Transcript:

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 esercitazione 30 Maggio laboratorio (???) Serializzazione Java Esercitazione di Sistemi Distribuiti Leonardo Mariani mariani@disco.unimib.it Serializzazione Applicazioni della Serializzazione La serializzazione è il processo di trasformazione di un oggetto (o di un grafo di oggetti) in uno stream di byte La deserializzazione (o ripristino) è il processo inverso, cioè la ricostruzione dell oggetto (o del grafo di oggetti) che corrisponde ad uno stream di byte Implementazione dei meccanismi di persistenza Trasmissione di oggetti nella rete alla base delle tecnologie per applicazioni OO distribuite Non esiste solo la serializzazione Java es.,.net, XML,...

Complicazioni 1/2 Complicazioni 2/2 Non è difficile intuire cosa avviene per un oggetto semplice: public class Point implements java.io.serializable { private int x; private int y; Public Point(int x, int y) { this.x = x; this.y = y; } } Cosa accade per un grafo di oggetti? Cosa accade se si vuole serializzare solo parte del grafo? Cosa accade se il ricevente non conosce il tipo (la classe) corrispondente all oggetto serializzato? E se i processi in comunicazione hanno versioni diverse della stessa classe? Cosa accade se solo parte dello stato di un oggetto è serializzabile? Argomenti Trattati Oggetti Serializzabili Il comportamento della Serializzazione Modificare il comportamento della serializzazione Consistenza costruttori<->deserializzazione Gestione delle Versioni Mantenimento dell Identità e Garbage Collection Serializzazione ed Ereditarietà Gli oggetti Java sono serializzabili fanno eccezioni quelli che fanno riferimento a risorse native del sistema Serializzazione/Deserializzazione Un oggetto può essere serializzato usando il metodo writeobject(object ) della classe ObjectOutputStream. Un oggetto può essere ripristinato usando il metodo readobject() della classe ObjectInputStream. Metadati La serializzazione include dei metadati nella rappresentazione dell oggetto che sono poi usati nella deserializzazione.

Esempio 01 serializzazione di un vettore di Integer Esempio 02 serializzazione di un oggetto di tipo Point L interfaccia java.io.serializable Esempio 03 Gli oggetti serializzabili devono essere esplicitamente dichiarati nelle corrispondenti classi si implementa l interfaccia java.io.serializable l interfaccia non implementa nessun metodo, serve solo da marcatore serializzazione di un oggetto di tipo Point Il tentativo di serializzare un oggetto non serializzabile provoca la generazione della eccezione java.io.notserializableexception La serializzazione indiscriminata di qualsiasi oggetto può risultare dannosa per il sistema, es., prestazioni e sicurezza

Oggetti Complessi Gli attributi di stato di un oggetto possono essere a loro volta oggetti Cosa vi aspettate che accada se tentate di serializzare un oggetto di tipo Padre? Esempio 04 serializzazione di un oggetto Padre Chiusura Transitiva gli oggetti referenziati da un oggetto serializzato sono serializzati con l oggetto stesso altrimenti sarebbe onere del programmatore mantenere la consistenza delle informazioni serializzate assieme ad un oggetto Osservazione: in questo modo si può rischiare di serializzare una intera applicazione quando un oggetto viene serializzato!! Transient transient può essere usato nella dichiarazione di un attributo di una classe un attributo transient non viene serializzato con il proprio oggetto se si dichiara come transient l attributo lavoro nella classe persona dell esempio 04 cosa accade durante la deserializzazione?

Esempio 05 esempio 04 modificato, l attributo lavoro della classe Persona è transient. Oggetti non Serializzabili Cosa accade se nel grafo di oggetti da serializzare sono inclusi oggetti non serializzabili? Viene generata una eccezione java.io.notserializableexception Argomenti Trattati Rami Pendenti... Il comportamento della Serializzazione Modificare il comportamento della serializzazione Consistenza costruttori<->deserializzazione Gestione delle Versioni Mantenimento dell Identità e Garbage Collection Serializzazione ed Ereditarietà L attributo transient è spesso usato per evitare che vengano serializzati dei riferimenti a delle risorse locali Tali attributi andrebbero propriamente ri-inizializzati durante la deserializzazione Esempio, un agente mobile mantiene un riferimento alla piattaforma di esecuzione corrente. L agente viene serializzato per spostarsi nella nuova piattaforma. Durante la de-serializzazione il riferimento dovrebbe essere aggiornato alla nuova piattaforma. Come realizzarlo???

Modifica del comportamento di default della serializzazione è possibile implementare i metodi private readobject(objectinputstream) private writeobject(objectoutputstream) questi metodi sono invocati per leggere e scrivere oggetti serializzati questi metodi possono essere sovrascritti per modificare il comportamento della serializzazione Esempio 06 Agent mobile che viene serializzato e ripristinato. Nella serializzazione viene troncato il riferimento alla piattaforma locale, che è poi ripristinato durante la deserializzazione. Implementazione di writeobject e readobject I metodi possono essere implementati in modo da cambiare completamente il meccanismo di serializzazione Es., serializzazione in uno stream XML Oggetti Esternalizzabili Un oggetto può implementare java.io.externalizable invece di java.io.serializable bisogna implementare void writeexternal(objectoutput out) void readexternal(objectinput in) in questo caso i meccanismi di serializzazione DEVONO essere implementati manualmente

Argomenti Trattati Variabili Statiche Il comportamento della Serializzazione Modificare il comportamento della serializzazione Cosa accade quando un oggetto serializzato usa variabili statiche? Consistenza costruttori<->deserializzazione Gestione delle Versioni Mantenimento dell Identità e Garbage Collection Serializzazione ed Ereditarietà Esempio 07 Un padre che cerca di mantenere traccia dei propri figli... Consistenza della deserializzazione con le variabili statiche le variabili statiche sono variabili di classe e quindi non devono essere serializzate con un oggetto un oggetto deserializzato automaticamente accede alle variabili statiche esistenti nel momento del suo ripritino le variabili statiche indicano proprietà del contesto in cui l oggetto è eseguito quando il valore delle variabili statiche dipende dagli oggetti presenti nel sistema, il ripristino di un oggetto deve essere implementato opportunamente (consistenza deserializzazione<->costruzione)

Esempio 08 Un padre che riesce a mantenere traccia dei propri figli. Argomenti Trattati Il comportamento della Serializzazione Modificare il comportamento della serializzazione Consistenza costruttori<->deserializzazione Gestione delle Versioni Mantenimento dell Identità e Garbage Collection Serializzazione ed Ereditarietà Il Problema delle Versioni La versione di una classe usata per la serializzazione di un oggetto può essere differente rispetto a quella usata per ripristinarlo, es. upgrade del sistema comunicazione con applicazioni remote serialversionuid E un numero a 64bit che viene associato ad ogni classe Dipende dai metadati (metodi, attributi,...) la JVM confronta il serialversionuid di un oggetto e della classe a disposizione per stabilirne la compatibilità serialver <classname> permette di conoscere il servialversionuid di una classe

Compatibilità tra le Versioni Esempio 09 1.0 host A 2.0 host B scrittura di un oggetto in una nuova versione a) writeobject 1.0 host A 2.0 host B readobject b) 1.0 host A 2.0 host B Argomenti Trattati Il comportamento della Serializzazione Modificare il comportamento della serializzazione Consistenza costruttori<->deserializzazione Gestione delle Versioni Mantenimento dell Identità e Garbage Collection Serializzazione ed Ereditarietà Scritture ripetute dello stesso oggetto Cosa accade se si serializza un oggetto di tipo Padre? Cosa accade se si serializza per due volte un oggetto di tipo Lavoro?

Token Per evitare che uno stesso oggetto sia scritto più volte in uno stream si usano dei tokens numerici Esempio writeobject(padre) 1 padre 2 figlio 1 3 lavoro 4 indirizzo stream Un token è un identificatore di un oggetto serializzato per lo stream preso in considerazione writeobject(lavoro) writeobject(lavoro) 1 lavoro 2 indirizzo 1 stream Identificazione degli oggetti Garbage Collection tabella dei riferimenti 1 2 3 4 padre figlio 1 lavoro indirizzo 1 2 3 14 stream Problema: anche se un oggetto serializzato perde tutti i suoi riferimenti non può essere vittima del garbage collection, infatti il riferimento dello stream rimane Soluzione: invocazione di reset() sullo stream! reset elimina il contenuto della tabella dei riferimenti. ma attenzione al suo uso...

Esempio 10 Esempio 11 Abusare di reset può portare alla duplicazione di oggetti...... ma non usarlo può portare alla perdita di informazioni importanti Argomenti Trattati Ereditarietà Il comportamento della Serializzazione Modificare il comportamento della serializzazione Consistenza costruttori<->deserializzazione Gestione delle Versioni Mantenimento dell Identità e Garbage Collection Serializzazione ed Ereditarietà Considerate una classe Persona (non serializzabile) ed una classe Studente (serializzabile). La classe Studente estende la classe Persona. Studente è serializzabile? Se si tenta di serializzare uno Studente cosa accade?

Esempio 12 serializzazione dello studente Ripristino di oggetti con stato parzialmente serializzabile Un oggetto serializzabile ha uno stato composto da due parti: la parte serializzabile la parte non serializzabile Il ripristino della parte serializzabile è gestito dal metodo readobject Il ripristino della parte non serializzabile è gestito dai costruttori Conclusioni Il comportamento di default della serializzazione si adatta bene alla maggior parte dei casi, ma bisogna considerare uso dei transient per limitare il grafo serializzato ridefinizione dei processi di serializzazione/deserializzazione consistenza tra il ripristino degli oggetti e l ambiente gestione degli upgrades meccanismo dei tokens classi serializzabili che ereditano da classi non serializzabili