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

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

Projeto Orientado a Objetos

Apresentações semelhantes


Apresentação em tema: "Projeto Orientado a Objetos"— Transcrição da apresentação:

1 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

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 Análise 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. 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 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 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 Tarefas e regras de governam o processamento Lógica da Aplicação 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 Pagamento Venda Conceitos do domínio Lógica da Aplicação Interface com o BD Gerador de Relatório Serviços Projeto Orientado a Objetos

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

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 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 Primeira mensagem interna 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: Instância nomeada: Venda :Venda v1:Venda Ligações (caminhos/associações de comunicação): :POST :Venda Mensagens, parâmetros e valores de retorno: 1: tot := total( ) : integer :POST :Venda :POST 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() :ClasseA :Classe B 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() entrarItem(upc,qtd) 1.1: criar() :Venda :LinhadeItemdeVenda :POST Caminhos condicionais: :ClasseE 2: Msg6() Msg1() 1a: [test1] Msg2() :ClasseA :Classe B 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() Classes de Apresentação/Interface 3: t := total() : Float :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 Class POST { ...
entrarItem(upc,qtd) :POST 1: espec := especificação(upc) prodCatalogo:CatalogodeProdutos Class POST { ... private prodCatalago CatalogodeProdutos; entrarItem( upc, qtd ){ espec = prodCatalogo.especificação(upc); } Projeto Orientado a Objetos

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

25 Tipos de Visibilidade Visibilidade localmente declarada Class POST {
1: [nova venda] criar() entrarItem(upc,qtd) 3: construirLinhadeItem(espec, qtd) :POST venda:Venda 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 Projeto Orientado a Objetos
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 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. Projeto Orientado a Objetos

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

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

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

41 Mapeamento OO – Relacional Regras Gerais
Ex: <<abstract>> Pessoa nome : String Aluno Funcionário 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 – 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 Projeto Orientado a Objetos

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

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

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


Carregar ppt "Projeto Orientado a Objetos"

Apresentações semelhantes


Anúncios Google