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

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

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

Apresentações semelhantes


Apresentação em tema: "Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1."— Transcrição da apresentação:

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

2 Projeto Orientado a Objetos Ciclo de Vida de Desenvolvimento de Software – Principais atividades Definição de Requisitos Análise Projeto Implementação Testes

3 Projeto Orientado a Objetos Análise de Requisitos Objetivos Definição de Requisitos Análise Projeto 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.

4 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

5 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álise Projeto Implementação

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

7 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

8 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

9 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

10 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

11 Projeto Orientado a Objetos Definição da Arquitetura em UML Diagrama de Pacotes Elementos Centrais Vendas Conceitos do Domínio

12 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

13 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

14 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: Ator 1. 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. Sistema 3. 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 HI J

15 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) :POST entrarItem(upc,qtd) :Venda 1:[new venda] criar() 3: criar ItemdeLinha(espec, qtd) 2: espec:=especificação (upc) :Catálogode Produtos :Especificação deProduto 2.1: espec:=enontrar (upc) :LinhadeItem deVenda 1.1: criar() 3.2: adicionar(lv) :LinhadeItem deVenda 3.1: criar(espec, qtd) Primeira mensagem Primeira mensagem interna Direção da mensagem instância

16 Projeto Orientado a Objetos Diagramas de Colaboração - Notação :Venda Venda 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()

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

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

19 Projeto Orientado a Objetos Diagramas de Colaboração - Notação Mensagens condicionais: :POST entrarItem(upc,qtd) :Venda 1:[nova venda] criar() :LinhadeItem deVenda 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()

20 Projeto Orientado a Objetos Diagramas de Colaboração - Notação Coleções de objetos: :Venda :LinhadeItem deVenda 1: s:= tamanho() : int

21 Projeto Orientado a Objetos Conectando a Camada de Apresentação à camada de Domínio venda:Venda post: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

22 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, o objeto da classe POST necessita tê-lo visível. Class POST {... private prodCatalago CatalogodeProdutos;... } entrarItem(upc, qtd))

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

24 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:Venda 2: construirLinhadeItem(espec, qtd) entrarItem(upc,qtd)

25 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:Venda 3: construirLinhadeItem(espec, qtd) 1: [nova venda] criar() entrarItem(upc,qtd)

26 Projeto Orientado a Objetos Tipos de Visibilidade Visibilidade global Atribuir uma instância a uma variável global

27 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

28 Projeto Orientado a Objetos Diagramas de Classes de Projeto Métodos de Acesso Loja String: endereço String: nome criarLoja() informarNome():string intormarEndereço():string atribuirNome( string ) atribuirEndereço( string )...

29 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

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

31 Projeto Orientado a Objetos Persistência Domínio Interface para Banco de Dados Relacional BDOO Banco Relacional Arquivos

32 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

33 Projeto Orientado a Objetos O Problema da Persistência Ex: Classes GerenteMatrícula e Aluno int 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

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

35 Projeto Orientado a Objetos Estratégias de Implementação: Ambiente O.O. Armazenamento Classes da Aplicação ou (Transientes) Classes de Interface (Transientes) Mensagens

36 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

37 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 Tabelas Relacionais Interação com o SGBD

38 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?

39 Projeto Orientado a Objetos Regras Gerais Mapeamento OO – Relacional Regras 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.

40 Projeto Orientado a Objetos Regras Gerais Mapeamento OO – Relacional Regras 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.

41 Projeto Orientado a Objetos Regras Gerais Mapeamento OO – Relacional Regras Gerais Ex: Pessoa nome : String > Aluno Matricula : integer Funcionário MatrFuncional : Integer Departamento Nome : String * * Curso 1..* está matriculado em -> 1..*1..1 É Administrado por --> 1..*1..1

42 Projeto Orientado a Objetos Regras Gerais Mapeamento OO – Relacional Regras 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

43 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

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

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

46 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

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


Carregar ppt "Projeto Orientado a Objetos Renata Araujo Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1."

Apresentações semelhantes


Anúncios Google