A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SERIALIZAÇÃO DE OBJETOS

Apresentações semelhantes


Apresentação em tema: "SERIALIZAÇÃO DE OBJETOS"— Transcrição da apresentação:

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

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

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

4 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”.

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

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

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

8 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”; Aluno # String nome; # int [4] nota; - double media; + void leInformacao(); + double calculaMedia(); + void imprimeDados();

9 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; }

10 SERIALIZAÇÃO - STRING Vantagens: Desvantagens:
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.

11 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 (4 bytes).

12 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 t Juliour [IMº`&vê²¥ xp    

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

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

15 SERIALIZAÇÃO – BINÁRIO
Exemplo de código: public class Aluno implements Serializable{ private static final long serialVersionUID = L; protected String nome; protected int [] nota; private double media; }

16 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(); }

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

18 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(); }

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

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

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

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

23 XML XML: Extensible Markup Language.
É um dos formatos mais utilizados para descrever objetos e tipos de dados. É uma linguagem Padrão W3C (WWW Consortium).

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

25 XML XML permite descrever: Valores (String): Objetos:
<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>

26 XML - Objeto Com isso, é possível utilizar XML para serializar objetos. Receita <?xml version="1.0" encoding="ISO "?> <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> String nome; Strimg tempoPreparo; String tempoCozimento; String titulo; Collection<String> instrucoes; 0..* Ingrediente int quantidade; String unidade; String nome; String estado;

27 Xstream Xstream é uma biblioteca para serializar e desserealizar objetos a XML de forma simples. ghtworks/xstream/xstream/1.3.1/xstream 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.

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

29 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);

30 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);

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

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

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

34 EXERCÍCIO DE PROGRAMAÇÃO FINAL
Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI / BCC – 3ro Semestre

35 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).

36 EXERCÍCIO DE PROGRAMAÇÃO
Aplicação: Manipulação de Imagens Transposta X matrizEspelho

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


Carregar ppt "SERIALIZAÇÃO DE OBJETOS"

Apresentações semelhantes


Anúncios Google