Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... ·...

47
Programação Orientada a Objetos Objetos, Dados e Serialização André Santanchè Laboratory of Information Systems – LIS Instituto de Computação – UNICAMP Maio 2019 Picture by Moyan Brenn [http://www.flickr.com/photos/aigle_dore/6225536653/]

Transcript of Programação Orientada a Objetos › ~santanch › teaching › oop › 2019-1 › ... ·...

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

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é

Tablets & Hierarchy

(Fay et al., 2008)