SERIALIZAÇÃO DE OBJETOS

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação em Java Prof. Maurício Braga
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Ferramenta de Desenvolvimento Material IV-Bimestre Tratamento de.
Construção de Algoritmos 2
Programação em Java Prof. Maurício Braga
Transmissão de pacotes
Orientação – acesso ambiente virtual
Entrada e Saída Marco Antonio Arquiteto de Software Dezembro/2007.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Capítulo 1 Introdução.
Introdução à Programação usando Processing Programação Gráfica 2D Animações Exercício Animações 14/10/09 Bruno C. de Paula 2º Semestre 2009 > PUCPR >
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
Laboratório de Informática Introdução à Linguagem HTML
BD em.NET: Passo a passo conexão com SQL Server 1º Semestre 2010 > PUCPR > BSI Bruno C. de Paula.
Windows Forms 2º Semestre 2010 > PUCPR > TPU Bruno C. de Paula.
03/08/2011 Professor Leomir J. Borba- –
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
Interação entre objetos
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.
Programação para Engenharia I
Software Básico Silvio Fernandes
Orientação a Objetos: Encapsulamento e Classificação
Java: Pacotes e Modificadores de Visibilidade
Persistência de objetos em arquivo texto usando Java
Java: Pacotes e Modificadores de Visibilidade
Arrays Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein) Arrays Exercícios.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Programação Orientada a Objetos I Material IV-Bimestre Criando um.
Aula 4 Nomes, Vinculações, Tipos e Escopos
Linguagem C Strings.
Tratamento de Ficheiros
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Listas Encadeadas.
Revisão da Linguagem C.
Classes e objetos Arrays e Sobrecarga
Classes e objetos Modelagem
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação JAVA
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
Desenvolvimento de Projetos e Aplicações Web
JAVA: Conceitos Iniciais
PROGRAMAÇÃO I UNIDADE 1.
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Capítulo 2 Java Servlets.
Conteúdos do tutorial O que é um Slide Mestre?
Programação I Aula 2 (Métodos)
Entendendo as definições de classe
Extranet GRD – Guia de Remessa de Documentos
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
EXERCÍCIOS PARA GUARDA-REDES
Projeto de Banco de Dados
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Computação Gráfica Aula 3 Transformações Geométricas
Professor: Márcio Amador
Banco de Dados Parte 04 Ceça. Ceça Moraes 2 Conteúdo  Os três níveis da arquitetura  Mapeamentos  Arquitetura cliente-servidor.
Campus de Caraguatatuba Aula 2: Somatório e Produtório
FORMATANDO O TRABALHO NO WORD 2007
BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de Arquivos em Java.
INTRODUÇÃO À ORIENTAÇÃO A OBJETOS EM JAVA
Profa. Patrícia A. Jaques
Profª. Patrícia Barreto
Aula Prática 4 Monitoria IP/CC (~if669).
Análise Léxica Prof. Alexandre Monteiro
+ Java Básico Aula 1 por Flávio Juvenal. + Histórico Green Project (1991) Desenvolver plataforma para eletrodomésticos inteligentes Tentaram usar C++
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

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

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.

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.

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

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.

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.

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.

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

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

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.

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

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    

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.

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.

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

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

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.

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

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.

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.

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.

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

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

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>

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>

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

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

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.

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

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

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>

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.

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.

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

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

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

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%