Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de...

47
Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programa UNI 200

Transcript of Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de...

Page 1: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Renata Araujo

Projeto e Construção de Aplicaçôes com Ambiente de ProgramaçãoUNIRIO2002.1

Page 2: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Ciclo de Vida de Desenvolvimento de Software – Principais atividades

Definição de RequisitosDefinição de Requisitos

AnáliseAnálise

ProjetoProjeto

ImplementaçãoImplementação

TestesTestes

Page 3: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Análise de Requisitos Objetivos

Definição de RequisitosDefinição de Requisitos

AnáliseAnálise

ProjetoProjeto

Durante a fase de análise é dada prioridade ao conhecimento: do domínio do problema dos requisitos, conceitos e

operações relacionadas com o sistema.

As questões da análise se concentram em o que é o software.

Page 4: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Análise Orientada a Objetos - UML

Conjunto de artefatos UML gerados na fase de análise:

Casos de Uso Quais são os processos do domínio da aplicação

Modelo Conceitual/Classes & Objetos Quais são os conceitos e termos

Diagramas de Sequência Quais são os eventos e operações do sistema

Page 5: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Projeto – Objetivo e Resultados

Conceber uma solução lógica para o sistema

Adaptar os resultados da análise às restrições impostas pelo ambiente de implementação

Refinamento dos modelos para adequarem-se a requisistos de desempenho

AnáliseAnálise

ProjetoProjeto

ImplementaçãoImplementação

Page 6: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Projeto Orientado a Objetos

Objetivos Refinamento dos modelos obtidos na fase de análise e

construção de outros modelos para comportar decisões quanto a:

Arquitetura

Interface

Persistência

Colaboração entre objetos

Requisitos não funcionais (desempenho, segurança, confiabilidade ...)

Page 7: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Arquitetura

Decomposição do sistema em subsistemas/módulos estrutura e interface entre os subsistemas

Subsistema OO/Pacote: Conjunto de classes que agem como uma unidade e provêem

um comportamento específico para o sistema

Subsistemas podem ser alocados a diferentes processadores, facilitando o processo concorrente

Page 8: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Arquitetura em três camadas – Visão clássica

Interface de Apresentação

Lógica da Aplicação

Armazenamento

Janelas, relatórios

etc

Tarefas e regras de governam o processamento

Mecanismo de persistência

Objetos de interface

Objetos do domínio da aplicação

Objetos persistentes

Page 9: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Arquitetura multicamadas

Decomposição mais fina das camadas anteriores

Acréscimo de camadas adicionais

Administração da complexidade na implementação

Pagamento Venda

Interface com o BD Gerador de Relatório

Lógica da Aplicação

Conceitos do domínio

Serviços

Page 10: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Disposição física

As camadas podem ser dispostas fisicamente em várias configurações

Interface - Cliente Lógica e Armazenamento – Servidor

Interface e Lógica – Cliente Armazenamento - Servidor

Page 11: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Definição da Arquitetura em UML

Diagrama de Pacotes

Elementos Centrais Vendas

Conceitos do Domínio

Page 12: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Projeto Orientado a Objetos

Conjunto de artefatos gerados na fase de projeto

Descrição de Casos de Uso “reais” Projeto concreto de como o caso de uso será realizados Detalhamento da interface com o usuário

Diagramas de Colaboração Comunicação entre objetos para atender aos casos de uso

Diagramas de Classes de Projeto Detalhamento das classes do sistema com definições que

permitam sua implementação Tipos de atributos, detalhamento de serviços etc

Page 13: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Interface com Usuário

Identificação dos elementos da interface a partir dos casos de uso especificados para o sistema

Definição de Casos de Uso “Reais” A descrição de um caso de uso “real” descreve o projeto real em

termos da tecnologia de entrada e saída e sua implementação em geral.

“Design” da interface visando a usabilidade do sistema

Page 14: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Casos de Uso “reais”Caso de Uso: Comprar itens – versão 1 (pagamento somente com dinheiro)Objetivo: Capturar uma venda e seu pagamento em dinheiro.Atores: Cliente (iniciador), Caixa.Pré-condição: ... Pós-Condição: ...Descrição: Um cliente chega a um ponto de venda, trazendo vários itens que deseja comprar. O Caixa registra os itens da compra e recebe um pagamento em dinheiro. Ao término, o Cliente sai com os itens comprados. Sequência típica de eventos: Ator1. Este caso de uso começa quando um Cliente chega a um ponto de venda equipado com um POST, trazendo vários itens que deseja comprar.2. Para cada item, o Caixa registra o Código Universal de Produto (UPC) em A da Janela1. Se houver mais de um exemplar do item, a quantidade pode ser entrada opcionalmente em E. O Caixa pressiona H após cada entrada do item.4. No término da entrada de itens, o Caixa indica para o POST que a entrada de itens está completa, apertando I.

Sistema3. Acrescenta informação sobre o item à transação de vendas em andamento. A descrição e o preço do item corrente são apresentados em B e F da Janela-1.5.Calcula e exibe o total da venda em C.

A

B

C

D

E

F

G

H I J

Page 15: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Colaboração

Mostra como os objetos (pertencentes às classes identificadas no modelo de classes&objetos) interagem através de mensagens para cumprir tarefas (em geral definidas nos casos de uso)

:POSTentrarItem(upc,qtd)

:Venda

1:[new venda] criar()3: criar ItemdeLinha(espec, qtd)

2: espec:=especificação (upc)

:Catálogode Produtos

:EspecificaçãodeProduto

2.1: espec:=enontrar (upc)

:LinhadeItemdeVenda

1.1: criar()

3.2: adicionar(lv)

:LinhadeItemdeVenda

3.1: criar(espec, qtd)

Primeira mensagem Primeira mensagem interna

Direção da mensagem

instância

Page 16: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Colaboração - Notação

:VendaVenda v1:Venda

Classe: Instância: Instância nomeada:

Ligações (caminhos/associações de comunicação):

:POST :Venda

:POST :Venda

1: acrescentarPagamento( quantia:int)

Mensagens, parâmetros e valores de retorno:

:POST :Venda

1: tot := total( ) : integer

:POST

1: limpar()

Page 17: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Colaboração - Notação

:POST :Venda

Iteração:

:POST :Venda

1*: li := proximaLinhadeItem() : LinhadeItemdeVenda

1*: [i :=1..10] li := proximaLinhadeItem() : LinhadeItemdeVenda

:POST:Venda

Criação de instâncias:1: criar(caixa)

Page 18: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Colaboração - Notação

Número de sequência de mensagens:

:ClasseA :Classe B

Msg1()

:Classe C

1: Msg2()

1.1: Msg3()

1: Msg4()2.1: Msg5()

:Classe D

2.2: Msg6()

Page 19: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Colaboração - Notação

Mensagens condicionais:

:POSTentrarItem(upc,qtd)

:Venda1:[nova venda] criar()

:LinhadeItemdeVenda

1.1: criar()

Caminhos condicionais:

:ClasseA :Classe B

Msg1()

:Classe C

1a: [test1] Msg2()

1a.1: msg3()

1b.1: msg5()

:Classe D

:ClasseE

1b: [not test1] Msg4()

2: Msg6()

Page 20: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Colaboração - Notação

Coleções de objetos:

:Venda

:LinhadeItemdeVenda

1: s:= tamanho() : int

Page 21: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Conectando a Camada de Apresentação à camada de Domínio

venda:Vendapost:POST

:POSTWindow

EntrarItem()

1: entrarItem(upc, qtd)

2: [nenhuma venda] venda := getVenda() : Venda

3: t := total() : Float Classes de Apresentação/Interface

Classes de Domínio

Page 22: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Determinando Visibilidade

Para um objeto enviar uma mensagem a outro objeto, o objeto receptor deve ser visível pelo objeto emissor.

O objeto emissor deve ter algum tipo de referência ao objeto receptor para enviar sua mensagem.

:POST

prodCatalogo:CatalogodeProdutos

1: espec := especificação(upc)

No exemplo ao lado, para enviar a mensagem especificação() para o

objeto de CatalogodeProdutos, oobjeto da classe POST necessita tê-lo

visível.

Class POST {... private prodCatalago CatalogodeProdutos;...}

entrarItem(upc, qtd))

Page 23: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Tipos de Visibilidade

Visibilidade por atributo

:POST

prodCatalogo:CatalogodeProdutos

1: espec := especificação(upc)

Class POST {... private prodCatalago CatalogodeProdutos;...

entrarItem( upc, qtd ){ ... espec = prodCatalogo.especificação(upc); ... }}

entrarItem(upc,qtd)

Page 24: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Tipos de Visibilidade

Visibilidade por parâmetro

:POST

prodCatalogo:CatalogodeProdutos

1: espec := especificação(upc)

Class Venda {... construirLinhadeItem( Especificação espec, qtd ){ ... lv = new LinhadeItemdeVenda(espec, qtd); ... }}

venda:Venda2: construirLinhadeItem(espec, qtd)entrarItem(upc,qtd)

Page 25: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Tipos de Visibilidade

Visibilidade localmente declarada

:POST

prodCatalogo:CatalogodeProdutos

1: espec := especificação(upc)

Class POST {... entrarItem( upc,qtd ){ ... Venda venda = new Venda(); ... venda.construirLinhadeItem( espec, wtd ); ... }}

venda:Venda3: construirLinhadeItem(espec, qtd)

1: [nova venda] criar()entrarItem(upc,qtd)

Page 26: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Tipos de Visibilidade

Visibilidade global

Atribuir uma instância a uma variável global

Page 27: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Classes de Projeto

Algumas estratégias para detalhar o diagrama de classes na fase de projeto:

Identificar todas as classes participantes da solução de software. Tanto de domínio como de interface.

Identifique métodos, com seus parâmetros e tipos de retorno. Métodos necessários em todas as classes:

Construtores Métodos de Acesso aos atributos: consultar e modificar valores.

Identifique novos atributos e seus tipos. Acrescente associações necessárias para se suportar a

visibilidade entre objetos

Page 28: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Classes de Projeto

Métodos de Acesso

LojaString: endereçoString: nomecriarLoja()informarNome():stringintormarEndereço():stringatribuirNome( string ) atribuirEndereço( string )...

Page 29: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Diagramas de Classes de Projeto

Algumas estratégias para detalhar o diagrama de classes na fase de projeto:

Identificar todas as classes participantes da solução de software. Tanto de domínio como de interface.

Identifique métodos, com seus parâmetros e tipos de retorno. Identifique novos atributos e seus tipos. Acrescente associações necessárias para se suportar a

visibilidade entre objetos

Page 30: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Persistência

Armazenamento e recuperação de objetos

Soluções: Arquivos sequenciais – Serialização de objetos Bancos de dados orientados a objetos – Jasmine, O2 Bancos de dados relacionais – Oracle, MsAccess Outros bancos de dados: Objeto/Relacional

Dependendo da solução, haverá maior ou menor esforço para construção da interface para mapeamento dos dados para a camada de persistência.

Page 31: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Persistência

Domínio

Interface para Banco de Dados Relacional

BDOO

Banco Relacional

Arquivos

Page 32: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Persistência

A forma mais fácil de resolver o problema é a utilização dos Sistemas Gerenciadores de Bancos de Dados Orientados a Objetos (SGBDOO) Ex: O2, Ontos, ObjectStore, Jasmine, etc.

Com SGBDOOs, os objetos são transparentemente transientes quanto persistentes

Page 33: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

O Problema da Persistência

Ex: Classes GerenteMatrícula e Alunoint GerenteMatrícula::IncluirNovoAluno(String nome, Date dtNascimento) {

Aluno novoAluno;int ultimoCodMatricula;

OODBMS->StartTransaction();ultimoCodMatricula = (int)OODBMS->ExecOQL(“select max(matricula) from Aluno”);Aluno novoAluno = new Aluno(ultimoCodMatricula + 1, nome, dtNascimento); OODBMS->Commit();

}

Problemas: SGBDOOs são caros e não tem o mesmo desempenho que SGBDs Relacionais

Page 34: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

O Problema de Persistência

Outras Estratégias:

Serialização É basicamente um DUMP da memória para o disco. Interessante para aplicações de pequeno porte e de um usuário.

Mapeamento OO – Relacional Muito utilizado Existência de pacotes de comunicação com bancos relacionais em

linguagens OO Ex: JDBC (Java Database Connectivity)

Problema: Como fazer o Projeto da Aplicação???

Mapeamento OO – SGBDs Objeto-Relacional Raro, mas promissor se os SGBDs evoluirem.

Page 35: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Estratégias de Implementação:Ambiente O.O.

Armazenamento

Classes da Aplicação ou (Transientes)

Classes de Interface (Transientes)

Mensagens

Mensagens

Page 36: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Estratégias de Implementação:Ambiente O.O. - Relacional (1)

Classes da Aplicação ou (Transientes)

Classes de Interface (Transientes)

Mensagens

Interação com o SGBD

Tabelas Relacionais

Page 37: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Estratégias de Implementação:Ambiente O.O. - Relacional (2)

Classes do Domínio (Transientes) c/ Métodos paraManipulação do Banco

Classes da Aplicação ou (Transientes)

Classes de Interface (Transientes)

Mensagens

Mensagens

Tabelas Relacionais

Interação com o SGBD

Page 38: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Estratégias de Implementação

A escolha da estratégia de persistência com SGBDs Relacionais vai depender de decisões do projeto baseadas principalmente nos diagramas de casos de uso e de classes. Existem métodos importantes no domínio da aplicação? O volume de objetos é crítico na aplicação? Desempenho é um aspecto crítico?

Page 39: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Mapeamento OO – RelacionalRegras GeraisRegras Gerais

Para cada classe instanciável criamos uma tabela dentro do SGBD Relacional.

Os atributos de cada classe também tornam-se atributos da tabela Exceções: Atributos Implícitos (destinados à implementação de

relacionamentos) e Arrays (se não for possível)

Adicione uma chave primária em cada tabela (adote sempre o mesmo tipo, ex: LONGINT)

Os relacionamentos 1 1..* (implementados por atributos implícitos) tornam-se chave estrangeira.

Page 40: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Mapeamento OO – RelacionalRegras GeraisRegras Gerais

Os relacionamentos 1..* 1..* requerem a implementação de tabelas para associação.

Classes não-instanciáveis devem ser implementadas como visões, onde a consulta que define a visão utiliza um UNION entre as tabelas que representam especializações.

As regras podem ser mudadas caso encontre-se uma solução particular que traga benefícios de desempenho ou legibilidade.

Page 41: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Mapeamento OO – RelacionalRegras GeraisRegras Gerais

Ex:

Pessoa

nome : String

<<abstract>>

Aluno

Matricula : integer

Funcionário

MatrFuncional : Integer

Departamento

Nome : String

1..1

1..*

1..1

1..*

Curso

1..*

1..*

1..*

1..*

está matriculado em ->

1..* 1..1

É Administrado por -->

1..* 1..1

Page 42: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Mapeamento OO – RelacionalRegras GeraisRegras Gerais

Solução:Aluno(IdAluno, Nome, Matrícula)Funcionario(IdFuncionario, Nome, MatrFuncional)Curso(IdCurso, Nome, IdDepartamento)Departamento(IdDepartamento, Nome)Matriculado_em(IdAluno, idCurso)View Pessoa as

Select IdAluno, Nome, “ ALUNO ” from Aluno UNION

Select IdFuncionario, Nome, “FUNCIONARIO” from Funcionario

Page 43: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Serialização

Serialização: Acomodação dos dados de objetos em arquivos sequenciais

Streams definidas no pacote java.io especiais para persistência de objetos: ObjectInputStream ObjectOutputStream

Page 44: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Serialização

Gravando objetos...

// cria um stream the saída para um arquivo FileOutputStream out = new FileOutputStream("theTime.dat"); //associa o stream the saída a um stream de objetos (serializado) ObjectOutputStream s = new ObjectOutputStream(out); //escreve um objeto da classe string no stream (dado primitivo) s.writeObject("Today"); //escreve um objeto da classe Date no stream (dado estruturado) s.writeObject(new Date()); //libera stream para arquivo s.flush();

Ao se gravar um objeto em arquivo através da serialização, todos os seus dados (atributos) são armazenados recursivamente, inclusive se forem outro objetos.

Page 45: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Serialização

Recuperando objetos...

// cria um stream the entrada para um arquivo FileInputStream in = new FileInputStream("theTime.dat"); //associa o stream the entrada a um stream de objetos

(serializado) ObjectInputStream s = new ObjectInputStream(in); //Lê um objeto da classe String String today = (String)s.readObject(); //Lê um objeto da classe Date Date date = (Date)s.readObject();

Ao se recuperar um objeto em arquivo através da serialização, todos os seus dados (atributos) são recuperados recursivamente, inclusive se forem outro objetos.

Page 46: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Serialização

Determinando a serialização de objetos em suas classes Um objeto é serializável somente se sua classe implementa a

interface Serializable

public class MySerializableClass implements Serializable { ... }

Não é preciso definir nenhum método A serialização das instâncias desta classe é garantida pelos métodos

da classe ObjectOutputStream Estes métodos escrevem automaticamente todas as informações que

são necessárias para se gravar um objeto

Page 47: Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1.

Projeto Orientado a Objetos

Serialização

Em alguns casos, é preciso que o programador customize a serialização de um objeto

Para isso, há que criar os métodos writeObject e readObject para a classe que se deseja serializar os objetos:

private void writeObject(ObjectOutputStream s) throws IOException { s.defaultWriteObject(); // customized serialization code }

private void readObject(ObjectInputStream s) throws IOException {

s.defaultReadObject(); // customized deserialization code ... // followed by code to update the object, if necessary }