1 / 47

Projeto Orientado a Objetos

Projeto e Construção de Aplicaçôes com Ambiente de Programação UNIRIO 2002.1. Projeto Orientado a Objetos. Renata Araujo. Ciclo de Vida de Desenvolvimento de Software – Principais atividades. Definição de Requisitos. Análise. Projeto. Implementação. Testes.

blenda
Download Presentation

Projeto Orientado a Objetos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 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 Projeto Orientado a Objetos

  5. Projeto – Objetivo e Resultados Análise Projeto Implementação • 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 Projeto Orientado a Objetos

  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 ...) Projeto Orientado a Objetos

  7. 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 Projeto Orientado a Objetos

  8. Arquitetura em três camadas – Visão clássica Janelas, relatórios etc Interface de Apresentação Objetos de interface Lógica da Aplicação Tarefas e regras de governam o processamento Objetos do domínio da aplicação Armazenamento Objetos persistentes Mecanismo de persistência Projeto Orientado a Objetos

  9. Arquitetura multicamadas • Decomposição mais fina das camadas anteriores • Acréscimo de camadas adicionais • Administração da complexidade na implementação Conceitos do domínio Venda Pagamento Lógica da Aplicação Interface com o BD Gerador de Relatório Serviços Projeto Orientado a Objetos

  10. 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 Projeto Orientado a Objetos

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

  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 Projeto Orientado a Objetos

  13. 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 Projeto Orientado a Objetos

  14. 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 E B F C G D H I J Projeto Orientado a Objetos

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

  16. Diagramas de Colaboração - Notação Classe: Instância nomeada: Instância: v1:Venda :Venda Venda Ligações (caminhos/associações de comunicação): :POST :Venda Mensagens, parâmetros e valores de retorno: 1: tot := total( ) : integer :POST :POST :Venda 1: acrescentarPagamento( quantia:int) 1: limpar() :POST :Venda Projeto Orientado a Objetos

  17. Diagramas de Colaboração - Notação Iteração: 1*: li := proximaLinhadeItem() : LinhadeItemdeVenda :POST :Venda 1*: [i :=1..10] li := proximaLinhadeItem() : LinhadeItemdeVenda :POST :Venda Criação de instâncias: 1: criar(caixa) :Venda :POST Projeto Orientado a Objetos

  18. Diagramas de Colaboração - Notação Número de sequência de mensagens: Msg1() 1: Msg2() :Classe B :ClasseA 1.1: Msg3() 2.1: Msg5() 1: Msg4() :Classe C 2.2: Msg6() :Classe D Projeto Orientado a Objetos

  19. Diagramas de Colaboração - Notação Mensagens condicionais: 1:[nova venda] criar() 1.1: criar() entrarItem(upc,qtd) :LinhadeItemdeVenda :Venda :POST Caminhos condicionais: :ClasseE 2: Msg6() 1a: [test1] Msg2() Msg1() :Classe B :ClasseA 1a.1: msg3() 1b: [not test1] Msg4() 1b.1: msg5() :Classe D :Classe C Projeto Orientado a Objetos

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

  21. Conectando a Camada de Apresentação à camada de Domínio EntrarItem() 3: t := total() : Float Classes de Apresentação/Interface :POSTWindow 1: entrarItem(upc, qtd) 2: [nenhuma venda] venda := getVenda() : Venda Classes de Domínio post:POST venda:Venda Projeto Orientado a Objetos

  22. 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. 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)) :POST 1: espec := especificação(upc) prodCatalogo:CatalogodeProdutos Projeto Orientado a Objetos

  23. Tipos de Visibilidade • Visibilidade por atributo entrarItem(upc,qtd) :POST 1: espec := especificação(upc) Class POST { ... private prodCatalago CatalogodeProdutos; ... entrarItem( upc, qtd ){ ... espec = prodCatalogo.especificação(upc); ... } } prodCatalogo:CatalogodeProdutos Projeto Orientado a Objetos

  24. Tipos de Visibilidade • Visibilidade por parâmetro entrarItem(upc,qtd) 2: construirLinhadeItem(espec, qtd) venda:Venda :POST 1: espec := especificação(upc) Class Venda { ... construirLinhadeItem( Especificação espec, qtd ){ ... lv = new LinhadeItemdeVenda(espec, qtd); ... } } prodCatalogo:CatalogodeProdutos Projeto Orientado a Objetos

  25. Tipos de Visibilidade • Visibilidade localmente declarada 1: [nova venda] criar() entrarItem(upc,qtd) 3: construirLinhadeItem(espec, qtd) venda:Venda :POST 1: espec := especificação(upc) Class POST { ... entrarItem( upc,qtd ){ ... Venda venda = new Venda(); ... venda.construirLinhadeItem( espec, wtd ); ... } } prodCatalogo:CatalogodeProdutos Projeto Orientado a Objetos

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

  27. 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 Projeto Orientado a Objetos

  28. 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 ) ... Projeto Orientado a Objetos

  29. 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 Projeto Orientado a Objetos

  30. 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. Projeto Orientado a Objetos

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

  32. 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 Projeto Orientado a Objetos

  33. 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 Projeto Orientado a Objetos

  34. 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. Projeto Orientado a Objetos

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

  36. Estratégias de Implementação:Ambiente O.O. - Relacional (1) Classes de Interface (Transientes) Mensagens Classes da Aplicação ou (Transientes) Interação com o SGBD Tabelas Relacionais Projeto Orientado a Objetos

  37. Estratégias de Implementação:Ambiente O.O. - Relacional (2) Classes de Interface (Transientes) Mensagens Classes da Aplicação ou (Transientes) Mensagens Classes do Domínio (Transientes) c/ Métodos paraManipulação do Banco Interação com o SGBD Tabelas Relacionais Projeto Orientado a Objetos

  38. 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? Projeto Orientado a Objetos

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

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

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

  42. Mapeamento OO – RelacionalRegras 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 Projeto Orientado a Objetos

  43. 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 Projeto Orientado a Objetos

  44. 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. Projeto Orientado a Objetos

  45. 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. Projeto Orientado a Objetos

  46. 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 Projeto Orientado a Objetos

  47. 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 } Projeto Orientado a Objetos

More Related