![Page 1: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/1.jpg)
Programação Orientada a Objetos
Objetos, Dados e Serialização
André SantanchèLaboratory of Information Systems – LIS
Instituto de Computação – UNICAMPMaio 2019
Pic
ture
by
Mo
ya
n B
ren
n [
htt
p:/
/ww
w.f
lic
kr.
co
m/p
ho
tos
/aig
le_
do
re/6
225
536
653
/]
![Page 2: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/2.jpg)
Serialização
▪ Transformação do estado de um objeto em um formato de dados que possa ser armazenado ou transmitido
▪ Deserialização – processo inverso
![Page 3: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/3.jpg)
Serialização
![Page 4: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/4.jpg)
Serialização
![Page 5: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/5.jpg)
Serialização
![Page 6: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/6.jpg)
Serialização
![Page 7: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/7.jpg)
Serialização
![Page 8: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/8.jpg)
JavaInterface java.io.Serializable
▪ Implementada por objetos que podem ser serializados
▪ Não define métodos
▫ funciona como marcação
▪ Serialização padrão
▫ feita na forma de reflexão
▪ Serialização customizada
▫ devem ser implementados métodos writeObject, readObject e readObjectNoData
![Page 9: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/9.jpg)
Serializando e Deserializando ObjetosFormato Binário
▪ ObjectOutputStream serialização→
▪ ObjectInputStream deserialização→
![Page 10: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/10.jpg)
Exercício
▪ Considere que objetos da classe Conta também guardem todos as transações executadas em ordem para posteriormente emitirem um extrado.
▪ Escreva um exemplo de como serialização de uma Conta com todos os seus dados e imaginando transações de diferentes tipos.
![Page 11: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/11.jpg)
XML – eXtensible Markup Language
![Page 12: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/12.jpg)
XML
▪ Lançada em 1996 como uma versão simplificada da SGML (Standard Generalized Markup Language), para ser utilizada na Web.
![Page 13: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/13.jpg)
Metalinguagem
▪ Tal como SGML, XML é uma metalinguagem.
▪ HTML ao contrário, foi escrita em SGML.
S G M L
H T M L M a t h M L …S V G
X M L
M e t a l i n g u a g e m
L i n g u a g e m
![Page 14: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/14.jpg)
Linguagem de Marcação
▪ Utiliza marcadores para agregar informações adicionais a documentos.
▪ Tomemos como exemplo a seguinte frase:Horácio escreveu o livro Vida dos Dinossauros.
▪ Desejamos agregar informações que identifiquem quem é o autor e qual a ação realizada.
![Page 15: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/15.jpg)
Linguagem de Marcação
▪ Os marcadores se diferenciam do conteúdo pelos símbolos “<” e “>” (seguem o mesmo princípio de HTML):
<autor>Horácio</autor> <ação>escreveu o livro Vida dos Dinossauros</ação>
• Os marcadores delimitam unidades estruturais denominadas elementos.
![Page 16: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/16.jpg)
Estrutura Hierárquica
▪ Marcações podem ser agrupadas hierarquicamente.
▪ A interpretação de cada marcador está subordinada a seu contexto.
<sentença> <autor>Horácio</autor> <ação>escreveu o <publicação> <tipo>livro</tipo> <título>Vida dos Dinossauros</título> </publicação> </ação></sentença>
![Page 17: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/17.jpg)
Modelo de Dados XML
s e n t e n ç a
H o r á c i o
l i v r o
E s c r e v e u o
V i d a d o s D i n o s s a u r o s
t í t u l ot i p o
p u b l i c a ç ã o
a ç ã oa u t o r
![Page 18: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/18.jpg)
Elementos e Atributos
▪ Atributos:<autor cpf=”487.526.548-74” nascimento=”12/5/1960”> Horácio </autor>
• Elementos vazios:<esgotado/>
• Links para elementos (#):http://www.dominio.org/documento.html#bibliografia
• HTML usa esta estratégia em links para fragmentos.
![Page 19: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/19.jpg)
XML e Objetos
▪ A estrutura hierárquica do XML combina com a estrutura hierárquica dos Objetos
![Page 20: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/20.jpg)
Serializando e Deserializando ObjetosFormato XML
▪ Formato XML
▫ XMLEncoder serialização→
▫ XMLDecoder deserialização→
![Page 21: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/21.jpg)
JSONJavaScript Object Notation
![Page 22: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/22.jpg)
JSON
▪ Padrão aberto de intercâmbio de objetos
▪ Baseado na notação JavaScript
▪ Incorporado ao ECMAScript (Ecma, 2011)
▪ Adotado por diversas linguagens (http://json.org/)
![Page 23: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/23.jpg)
Notação Inline de Objetos JavaScript
![Page 24: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/24.jpg)
Objetos JS{ }
{ "nome": "Asdrubal", "idade": 25}
{ "nome": "Unidos da Esquina", "vitorias": [1961, 1975, 1982]}
vazio
obj_pessoa
nome: “Asdrubal”idade: 25
obj_time
nome: “Unidos da Esquina”
obj_vitorias: Array
0: 19611: 19752: 1982
vitorias
![Page 25: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/25.jpg)
Objetos JS
{ "nome": "Asdrubal", "livro": { "titulo": "Horacio o dino", "ano": 2010 } }
obj_autor
nome: “Asdrubal”
obj_livro
titulo: “Horacio o dino”ano: 2010
livro
![Page 26: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/26.jpg)
Stringify
▪ Serializandovar pessoa = { "nome": "Asdrubal", "idade": 25};var pessoaStr = JSON.stringify(pessoa);
▪ Deserializandovar pessoa2 = JSON.parse(pessoaStr);
![Page 27: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/27.jpg)
Data Access Objet (DAO)Pattern
(Matic, 2004)
![Page 28: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/28.jpg)
Armazenando em Bancos de Dados
![Page 29: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/29.jpg)
BDOBancos de Dados de Objeto
▪ Anteriormente conhecidos como BDOO
▪ “Pode estender a existência de objetos de modo que eles sejam armazenados permanentemente em um banco de dados, e, portanto, os objetos se tornam objetos persistentes...”
(Elmasri, 2011)
![Page 30: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/30.jpg)
SGDO & BDO
BDO
SGDO
Aplicação
![Page 31: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/31.jpg)
SGDOs
▪ O2 – clássico BDO
▪ db4objects (http://www.db4o.com) – Versant
▪ Objectivity/DB (http://www.objectivity.com)
![Page 32: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/32.jpg)
Aplicações OO x BD Relacionais
BDR
SGBDR
Aplicação
![Page 33: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/33.jpg)
SGBDORSGBD Objeto-Relacional
▪ Extensão em SGBDRs para suportar objetos
▪ Extensão do SQL para objetos
▫ Originalmente introduzida no SQL:1999
▫ Atualizados no SQL:2008
(Elmasri, 2011)
![Page 34: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/34.jpg)
SGBDOR & BDOR
BDOR
SGBDOR
Aplicação
![Page 35: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/35.jpg)
Document Databases
▪ XML-based
▫ BaseX (http://basex.org)
▪ JSON
▫ CouchDB (http://couchdb.apache.org)
▫ Mongo DB (http://www.mongodb.org)
![Page 36: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/36.jpg)
Key-value
![Page 37: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/37.jpg)
Web Storage
▪ Cookies
▫ tem sido o principal mecanismo de armazenamento
▪ W3C Web Storage
▫ modelo “mínimo” de armazenamento
▫ baseado em (chave, valor)
(Hickson, 2013)
![Page 38: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/38.jpg)
Web Storage APIsetItem(chave,valor) adiciona/atualiza par chave-valor
getItem(chave) recupera o valor associado à chave
key(n) recupera a enésima chave
removeItem(chave) remove o par que possui a chave
length indica o número de pares chave-valor
clear() remove todos os dados do repositório
![Page 39: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/39.jpg)
Implementações da API
▪ sessionStorage
▫ persistência apenas durante uma seção
▪ localStorage
▫ persistência a longo prazo
![Page 40: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/40.jpg)
Exemplo
▪ Gravando o campo HTML:
Nome: <input type="text" id="nome"></input>
▪ Funções de leitura/gravaçãofunction ler() { var nomeLido = localStorage.getItem("nome_db"); if (nomeLido != null) document.querySelector("#nome").value = nomeLido;}
function gravar() {
var nomeGravar = document.querySelector("#nome").value; localStorage.setItem("nome_db", nomeGravar); }
![Page 41: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/41.jpg)
Amazon DynamoDB
![Page 42: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/42.jpg)
Referências
▪ Ecma International (2011). ECMAScript Language Specification - Standard ECMA-262 (5.1 ed.).
▪ Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, and Robert E. Gruber. 2008. Bigtable: A Distributed Storage System for Structured Data. ACM Trans. Comput. Syst. 26, 2, Article 4 (June 2008).
▪ Hickson, I. (2011). HTML Microdata -- W3C Working Draft 13 January 2011. W3C. Retrieved from http://www.w3.org/TR/2011/WD-microdata-20110113/
![Page 43: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/43.jpg)
André Santanchèhttp://www.ic.unicamp.br/~santanche
![Page 44: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/44.jpg)
Licença▪ Estes slides são concedidos sob uma Licença Creative
Commons. Sob as seguintes condições: Atribuição, Uso Não-Comercial e Compartilhamento pela mesma Licença.
▪ Mais detalhes sobre a referida licença Creative Commons veja no link:http://creativecommons.org/licenses/by-nc-sa/3.0/
▪ Agradecimento a Moyan Brenn [http://www.flickr.com/photos/aigle_dore/] por sua fotografia “Dew drops” usada na capa e nos fundos, disponível em [http://www.flickr.com/photos/aigle_dore/6225536653/]vide licença específica da fotografia.
![Page 45: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/45.jpg)
Google Bigtable
![Page 46: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/46.jpg)
Bigtable Model
(Fay et al., 2008)
![Page 47: Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... · 2019-06-05 · Programação Orientada a Objetos Objetos, Dados e Serialização André](https://reader033.vdocuments.mx/reader033/viewer/2022060423/5f1a059ea6bc987a736a7a73/html5/thumbnails/47.jpg)
Tablets & Hierarchy
(Fay et al., 2008)