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

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

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

Apresentações semelhantes


Apresentação em tema: "SERIALIZAÇÃO DE OBJETOS Programação Orientada a Objetos Prof. Christian Danniel Paz Trillo SENAC – BSI/BCC – 3ro Semestre 1."— 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 1

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

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

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

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

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

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

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

10 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

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: (5 x 2 bytes) ocupa mais que (4 bytes). 11

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 12

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

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

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

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

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

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

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

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

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

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

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

24 XML Pão simples Farinha Fermento Água Sal Misture todos os ingredientes, e dissolva bem. Cubra com um pano e deixe por uma hora em um local morno. Misture novamente, coloque numa bandeja e asse num forno. 24

25 XML XML permite descrever: Valores (String): Pão simples Objetos: Farinha Coleções (String ou de Objetos): Misture todos os ingredientes, e dissolva bem. Cubra com um pano e deixe por uma hora em um local morno. Misture novamente, coloque numa bandeja e asse num forno. 25

26 XML - O BJETO Com isso, é possível utilizar XML para serializar objetos. 26 Pão simples Farinha Fermento Água Sal Misture todos os ingredientes, e dissolva bem. Cubra com um pano e deixe por uma hora em um local morno. Misture novamente, coloque numa bandeja e asse num forno. Receita String nome; Strimg tempoPreparo; String tempoCozimento; String titulo; Collection instrucoes; Ingrediente int quantidade; String unidade; String nome; String estado; 0..*

27 X STREAM Xstream é uma biblioteca para serializar e desserealizar objetos a XML de forma simples. https://nexus.codehaus.org/content/repositories/releases/com/thou ghtworks/xstream/xstream/1.3.1/xstream jar https://nexus.codehaus.org/content/repositories/releases/com/thou 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. 27

28 B IBLIOTECA - J AVA 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. 28

29 X STREAM //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

30 X STREAM... 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

31 X STREAM – XML GERADO pão pão simples 1 hora 5 minutos Farinha 3 xicaras 31

32 X STREAM - A RQUIVOS 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

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

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

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

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

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


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

Apresentações semelhantes


Anúncios Google