SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC...

37
SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1

Transcript of SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC...

Page 1: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO DE OBJETOSProgramação Orientada a ObjetosProf. Christian Danniel Paz Trillo

SENAC – BSI/BCC – 3ro Semestre

1

Page 2: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

REPRESENTAÇÃO DE OBJETOS

Quando um programa é executado: Se reserva um espaço de memória para o

processamento do mesmo. Se reserva um espaço de memória para as

variáveis e objetos criados. Inicializa e atualiza os valores das variáveis e

objetos. Muitas vezes inseridos pelo usuário. Muitas vezes calculados. Obtidos de outras fontes.

Quando o programa finaliza: O espaço de memória reservado é eliminado. Os valores dos objetos são perdidos.

2

Page 3: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

REPRESENTAÇÃO DE OBJETOS

Com isto, na segunda execução do programa o usuário terá que digitar de novo os valores que ele tinha inserido. Facebook – Exemplo:

Cadastramos usuários, amigos, etc. Alteramos os dados, e fechamos o programa. Ao executar de novo, os usuários que foram

cadastrados foram perdidos.

3

Page 4: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO

Para lidar com esse problema, existe o processo de serialização.

A serialização é um processo de converter um objeto em um formato que pode ser armazenado e recuperado posteriormente. O objeto recuperado deve ser exatamente igual

ao objeto que foi armazenado. A descrição da classe (nomes dos atributos e

operações) não requer ser armazenada. Quando um objeto deve-se manter através

de diversas execuções do programa, diz-se que o objeto é “persistente”. 4

Page 5: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – EXEMPLO

Criei esta PPT. Abri o MS Power Point.

Criei uma nova apresentação em branco -> Objeto. Criei slides, inseri imagens -> tudo em memória, no

objeto. Chegou a hora do almoço, e agora? .... Botão Salvar! O objeto PPT é armazenado como um arquivo BSI

- POO – Aula 10.ppt. Depois do almoço abro o arquivo e volto

exatamente aonde estava.5

Page 6: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – EXEMPLO

O armazenamento de um arquivo .ppt é um exemplo muito bom de serialização: Auto-Save: serialização temporária. Formato:

ppt (Office 2000) ppt (Office 97) pptx (Office 2007)

Compatibilidade entre versões. E como o Open Office consegue salvar/abrir um

ppt? Pode ser visto como uma tentativa de “quebrar” o

formato do ppt (Open Source). Algumas coisas são interpretadas de forma diferente. 6

Page 7: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – USOS

Persistir objetos. Enviar objetos entre computadores: Web-

Services por exemplo. Detectar mudanças: mudanças entre o início

e o final da execução. Comunicação entre programas

independentemente de: Linguagem de programação. Sistema Operacional. Espaço Físico.

7

Page 8: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - STRING

Objeto -> String

Aluno a = new Aluno(“Julio”, {8, 5, 6, 9}); Serialização como String:

String serializado = a.serializa(); serializado = “Julio;[8,5,6,9];7”;

8

Aluno# String nome;# int [4] nota;- double media;

+ void leInformacao();+ double calculaMedia();+ void imprimeDados();

Page 9: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - STRING

Consigo recriar o objeto original? Se o programa que vai recriar conhece o

“formato” da tradução: SIM. a.desseralizar(“Julio;[8,5,6,9];7”); Aluno desserealizar(String serializado) {

String [] tokens = serializado.split(“;”); String nome = tokens[0]; String []notasS = tokens[1].split(“,”); int []notas = new int[4]; notas[0] = Integer.parseInt(notasS[0]); .... double media = Double.parseDouble(tokens[2]); Aluno a = new Aluno(nome, notas); return a;

}9

Page 10: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - STRING

Vantagens: Não depender de bibliotecas externas. A serialização e desserialização podem ser métodos

do próprio objeto. “Não” depende da linguagem de programação.

Desvantagens: Sempre precisarei escrever:

Serializador Desserializador.

Complexidade dos processos cresce com a complexidade do objeto: Objeto Eleição que tem uma lista de eleitores e de

candidatos. O formato é “fácil de ler” por humanos -> Segurança.

10

Page 11: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - BINÁRIO

Uma das principais desvantagens de serializar em Strings é que a informação fica altamente exposta. Ex:

O formato ppt seria mais fácil de quebrar. Uma imagem seria armazenada de forma muito

ineficiente.

Outra desvantagem é o espaço necessário, escrever diretamente em texto pode não aproveitar a possibilidade de armazenar um determinado tipo de objeto de melhor forma: “32000” (5 x 2 bytes) ocupa mais que 32000 (4

bytes).11

Page 12: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - BINÁRIO

Java oferece um mecanismo de serialização que permite armazenar os dados em um objeto complexo em um único fluxo de bytes.

Aluno a = new Aluno(“Julio”, {8, 5, 7, 9});

Serialização:

¬í sr poo.Aluno…›S³ëÍ D mediaL nomet Ljava/lang/String;[ notat [Ixp@ t Juliour [IMº`&vê²¥ xp

12

Page 13: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - BINÁRIO

É um formato mais difícil de entender e alterar.

Armazena mais informações: Nome da classe. Nomes de alguns atributos (media, nome, nota). Informações de verificação: São dados

redundantes que permitem verificar se os valores lidos são válidos.

Ex: O CPF utiliza esta idéia: os dois últimos dígitos do CPF

permitem validar se um CPF é válido. Não preciso implementar métodos de

serialização / desserialização, Java sabe o que armazenar e o que não armazenar.

13

Page 14: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – BINÁRIO

Para podermos serializar um objeto de uma classe X: Precisamos informar que X implementa a

interface Serializable. Declarar uma constante que indica a versão

(como no caso do ppt): serialVersionUID.

Utilizaremos duas classes para serializar: ObjectOutputStream e FileOutputStream.

Utilizaremos duas classes para desserializar: ObjectInputStream e FileInputStream.

14

Page 15: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – BINÁRIO

Exemplo de código:

public class Aluno implements Serializable{

private static final long serialVersionUID = -8819364088302023420L;

protected String nome;

protected int [] nota;

private double media;

}

15

Page 16: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – BINÁRIO

Exemplo de código:

Aluno a = new Aluno(“Julio", 8, 5, 6, 9);

try {

ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("c:\\a.bin"));

o.writeObject(a);

} catch (IOException e) {

e.printStackTrace();

}

16

Page 17: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - BINÁRIO

ObjectOutputStream é responsável pela serialização: traduzir o objeto a um fluxo de bytes.

FileOutputStream é responsável por escrever o fluxo de bytes a um arquivo no sistema operacional. Se trocamos a linha 3 por:

ObjectOutputStream o = new ObjectOutputStream(System.out);

O fluxo será escrito diretamente na tela (System.out).

O método writeObject realiza o processo de serialização.

17

Page 18: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – BINÁRIO

Exemplo de código:

try {

ObjectInputStream i = new ObjectInputStream(new FileInputStream("c:\\a.bin"));

Aluno a2 = (Aluno) i.readObject();

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

18

Page 19: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - BINÁRIO

ObjectInputStream é responsável pela desserialização: traduzir o fluxo de bytes a um objeto.

FileInputStream é responsável por ler o fluxo de bytes de um arquivo no sistema operacional.

O método readObject realiza o processo de desserialização.

A exceção ClassNotFoundException pode ser lançada pois podemos tentar recuperar um objeto de uma classe X criada por outro programa do qual não temos a definição. 19

Page 20: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO - BINÁRIO

Vantagens: Não é preciso implementar nada. Menos fácil de alterar diretamente no

arquivo(dificulta fraudes). Desvantagens:

Depende da linguagem de programação. Se bem alguns tipos de dados são armazenados

eficientemente, não aproveita possibilidades de compactação para reduzir o tamanho do arquivo. O arquivo cresce linearmente com o número de

objetos armazenados. Mudanças na estrutura da classe (versões)

podem levar a incompatibilidade. 20

Page 21: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO –FORMATOS PADRÃO

Uma das principais desvantagens de um formato próprio de uma linguagem é a possibilidade de trocar dados entre programas.

Para isso existem outros formatos padrão para serializar: XML, CSV, JSON. XML: Baseado na linguagem de marcação criada

para páginas Web (HTML). CSV (Comma Separated Values): Armazenamento

de dados simples no estilo banco de dados. Cada objeto é representado por uma linha e os atributos

separados por algum caractere (vírgula, ponto e vírgula, etc.

JSON (JavaScript Object Notation): Formato criado para troca de informações na Web. Pode ser diretamente avaliado pelo compilador JavaScript.

21

Page 22: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO DE OBJETOS XML - XSTREAMProgramação Orientada a ObjetosProf. Christian Danniel Paz Trillo

SENAC – BSI / BCC – 3ro Semestre

22

Page 23: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XML

XML: Extensible Markup Language. É um dos formatos mais utilizados para

descrever objetos e tipos de dados. É uma linguagem Padrão W3C (WWW

Consortium).

23

Page 24: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XML

<?xml version="1.0" encoding="ISO-8859-1"?>

<receita nome="pão" tempo_de_preparo="5 minutos" tempo_de_cozimento="1 hora">

<titulo>Pão simples</titulo>

<ingredientes><ingrediente quantidade="3" unidade="xícaras">Farinha</ingrediente><ingrediente quantidade="7" unidade="gramas">Fermento</ingrediente><ingrediente quantidade="1.5" unidade="xícaras"

estado="morna">Água</ingrediente><ingrediente quantidade="1" unidade="colheres de chá">Sal</ingrediente>

</ingredientes>

<instrucoes><passo>Misture todos os ingredientes, e dissolva bem.</passo><passo>Cubra com um pano e deixe por uma hora em um local morno.</passo> <passo>Misture novamente, coloque numa bandeja e asse num forno.</passo>

</instrucoes>

</receita>24

Page 25: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XML

XML permite descrever: Valores (String):

<titulo>Pão simples</titulo> Objetos:

<ingrediente quantidade="3" unidade="xícaras">Farinha</ingrediente>

Coleções (String ou de Objetos):<instrucoes>

<passo>Misture todos os ingredientes, e dissolva bem.</passo>

<passo>Cubra com um pano e deixe por uma hora em um local morno.</passo>

<passo>Misture novamente, coloque numa bandeja e asse num forno.</passo>

</instrucoes>25

Page 26: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XML - OBJETO

Com isso, é possível utilizar XML para serializar objetos.

26

<?xml version="1.0" encoding="ISO-8859-1"?>

<receita nome="pão" tempo_de_preparo="5 minutos" tempo_de_cozimento="1 hora">

<titulo>Pão simples</titulo>

<ingredientes><ingrediente quantidade="3"

unidade="xícaras">Farinha</ingrediente><ingrediente quantidade="7"

unidade="gramas">Fermento</ingrediente><ingrediente quantidade="1.5" unidade="xícaras"

estado="morna">Água</ingrediente><ingrediente quantidade="1" unidade="colheres de

chá">Sal</ingrediente>

</ingredientes>

<instrucoes><passo>Misture todos os ingredientes, e dissolva

bem.</passo><passo>Cubra com um pano e deixe por uma hora em

um local morno.</passo> <passo>Misture novamente, coloque numa bandeja e

asse num forno.</passo>

</instrucoes>

</receita>

ReceitaString nome;Strimg tempoPreparo;String tempoCozimento;String titulo;Collection<String> instrucoes;

Ingredienteint quantidade;String unidade;String nome;String estado;

0..*

Page 27: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XSTREAM

Xstream é uma biblioteca para serializar e desserealizar objetos a XML de forma simples.

https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar

Características: Fácil de Usar. Não é necessário realizar mapeamentos de tipos de

objetos, a biblioteca já reconhece a maioria de tipos de dados: String, int, bool, ... Coleções, Mapas, Vetores, ...

O XML resultante é de fácil leitura para humanos. Serializa atributos públicos, privados e protegidos.

27

Page 28: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

BIBLIOTECA - JAVA

Para associar uma biblioteca a nossa aplicação, é necessário referenciá-la desde o nosso projeto (no caso do Eclipse ou do NetBeans).

Para isso colocamos a biblioteca dentro da estrutura do nosso programa em uma pasta lib por exemplo. lib\xstream-1.3.1.jar.

Associamos a biblioteca no Build Path (Clic Direito no Projeto -> Build Path -> Configure -> Add Jar.

Com essa referência, poderemos utilizar as classes da biblioteca como se forem do nosso projeto.

28

Page 29: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XSTREAM

//Inicialização de Objetos Receita receita = new Receita(); receita.nome = “pão”; ... receita.ingredientes.add(new

Ingrediente(“Farinha”, 3, “xicaras”)); ... //Serialização a um String com formato XML XStream xstream = new XStream(new

DomDriver()); String xml = xstream.toXML(receita); Receita copia = (Receita)xstream.fromXML(xml);

29

Page 30: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XSTREAM

... String xml = xstream.toXML(receita); //Desserialização a um String com formato

XML Receita copia =

(Receita)xstream.fromXML(xml); //Imprime “pão” System.out.println(copia.nome);

30

Page 31: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XSTREAM – XML GERADO <Receita> <nome>pão</nome> <titulo>pão simples</titulo> <tempoCozimento>1 hora</tempoCozimento> <tempoPreparo>5 minutos</tempoPreparo> <ingredientes> <poo.Ingrediente> <nome>Farinha</nome> <quantidade>3</quantidade> <unidade>xicaras</unidade> </poo.Ingrediente> </ingredientes> <instrucoes/> </Receita>

31

Page 32: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

XSTREAM - ARQUIVOS

Como para poder persistir a informação é necessário armazená-la em arquivos, mudaremos as chamadas ao fromXML e toXML para ler escrever em arquivos:

Leitura: Receita copia = (Receita)xstream.fromXML(new

FileInputStream("c:\\receita.xml")); Escrita:

xstream.toXML(receita, new FileOutputStream("c:\\receita.xml"));

Dica: Quando escrevemos em arquivos é necessário cuidar dos caracteres acentuados. 32

Page 33: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

SERIALIZAÇÃO – RESUMO

A Serialização é um processo muito utilizado em sistemas complexos: Não tanto para armazenar informação de forma

permanente, pois os Bancos de Dados fazem isso de forma mais eficiente e flexível.

Para transmitir informação entre aplicações de diversas plataformas.

Para transmitir informação pela internet – Web Services.

Para popular páginas Web.

33

Page 34: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

EXERCÍCIO DE PROGRAMAÇÃO FINALProgramação Orientada a ObjetosProf. Christian Danniel Paz Trillo

SENAC – BSI / BCC – 3ro Semestre

34

Page 35: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

EXERCÍCIO DE PROGRAMAÇÃO

Criar um programa orientado a objetos que implemente operações de Matrizes (como vetores bi-dimensionais ou como matrizes esparsa).

35

Page 36: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

EXERCÍCIO DE PROGRAMAÇÃO

Aplicação: Manipulação de Imagens

36

X matrizEspelho

Transposta

Page 37: SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1.

EXERCÍCIO DE PROGRAMAÇÃO

Data de Entrega: 11 de Junho. Grupos de 2 ou 3 pessoas. Requisitos:

Implementação de Interface de usuário: 2 pontos.

Criação da classe Matriz Comum: 2 pontos. Criação da classe Matriz Sparsa: 3 pontos. Implementação do método

calcularDeterminante: 1 ponto. Algum exemplo de manipulação de imagens: 2

pontos. Peso na Nota Final: 30% 37