Projeto Orientado a Objetos

Slides:



Advertisements
Apresentações semelhantes
Modelo de Casos de Uso Diagrama de Casos de Uso
Advertisements

Um pouco mais de cardinalidade e Relacionamentos
Análise e Projeto Orientado a Objetos
Projeto – Parte II - Exemplos de Diagrama de Colaboração
Aula 8 Contratos.
APSOO Aula 03.
APSOO Aula 05.
UML Modelando um sistema.
UML Visões – Parte 2.
UML – Visões Parte 1 Modelando um sistema.
Resumo 1.1) Introdução 1.2) Abordagem Convencional de Arquivos
(Unified Modeling Language)
Diagrama de Classes.
SISTEMAS DE INFORMAÇÃO
Contratos de Operação.
Maurício Edgar Stivanello
Sistema Gerenciador de Banco de Dados SGBD
Unified Modeling Language
Prof. Aruanda Simões - Análise e Projeto OO Processo de Desenvolvimento n As grandes fases: –Planejamento e elaboração –Construção –Implantação Sistema.
UML Diagrama de Classes elementos básicos. Contexto Os diagramas de classes fazem parte do da visão estática da UML. Os elemento desta visão são conceitos.
Análise de Requisitos Use Case Renata Araujo Ricardo Storino
Projeto de Sistema Orientado a Objeto
Projeto de Software Orientado a Objetos
Professora: Aline Vasconcelos
1 - Lafayette B. Melo – Análise e Projeto de Sistemas para a Internet – Noções de Engenharia de Software COINFO – CEFET-PB 9. Modelo conceitual (diagrama.
Engenharia de Requisitos Requisito – sistema Caso de uso - usuário
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
RUP: Fluxo de Análise e Projeto
Projeto da Camada de Domínio
Classes e objetos Modelagem
1 - Lafayette B. Melo – Análise e Projeto de Sistemas para a Internet – COINFO – CEFET-PB 9. Complemento de AOO 9.4 Comportamentos 9.5 Visibilidade 9.6.
Objetivo: compreender e aplicar um modelo conceitual
© Nabor C. Mendonça Análise e Projeto Orientados a Objeto com UML e Padrões Parte V Implementação (1)
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Diagrama de Classes Ilustra as especificações de software para as classes e interfaces do sistema. É obtido através da adição de detalhes ao modelo conceitual.
Expansão dos Casos de Uso
Design Patterns / Acesso ao banco de dados (java.sql)
1 - Lafayette B. Melo – Análise e Projeto de Sistemas para a Internet – COINFO – CEFET-PB 11. Comunicação Objetivo: compreender a notação do diagrama de.
Prof. Kelly E. Medeiros Bacharel em Sistemas de Informação
UNIDADE 2 UML MODELAGEM TEMPORAL
Fase de Concepção (Início, Planejamento)
Banco de Dados Parte 04 Ceça. Ceça Moraes 2 Conteúdo  Os três níveis da arquitetura  Mapeamentos  Arquitetura cliente-servidor.
O Processo de desenvolvimento de software
Abr-17 Atividades, Artefatos e Responsáveis da Disciplina de Análise e Projeto Fluxo de análise e projeto.
Banco de Dados Aplicado ao Desenvolvimento de Software
Padrão- MVC Model, View, Controller
O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do.
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
RUP - Cap. 4 – Processo Centrado na Arquitetura
Laboratório de Programação
RUP - Cap. 3 – Processo Dirigido por Caso de Uso
© Nabor C. Mendonça Análise e Design Orientados a Objeto com a metodologia (R)UP + UML.
Construtores e Destrutores
Tarciane Andrade Análise de Casos de Uso Tarciane Andrade
Modelo de Análise e Projeto
Fluxo de Análise e Projeto 7 - Atividade Projetar Classes.
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
Modelagem de Sistemas Orientada a Objeto Com UML
Plano de Ensino Conceitos e Características Tipos de Banco de Dados
Professora: Kelly de Paula Cunha
Interações entre objetos
Projetar Base de Dados. Copyright © 2002 Qualiti. Todos os direitos reservados. Qualiti Software Processes Projetar base de dados | 2 Objetivos deste.
Fundamentos de Engenharia de SW Diagramas da UML Usados no Projeto de Software.
UML (Unified Modeling Language) A linguagem unificada de modelagem
Projeto de Arquitetura de Software
Atividades, Artefatos e Responsáveis da Disciplina de Análise e Projeto.
O Processo Unificado (PU). 2 O que é o Processo Unificado (PU)? É um modelo de processo de software baseado no modelo incremental, visando a construção.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Modelagem de Banco de Dados: Conceitos
Transcrição da apresentação:

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

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

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

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

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

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

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

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

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

Definição da Arquitetura em UML Diagrama de Pacotes Conceitos do Domínio Elementos Centrais Vendas 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 Projeto Orientado a Objetos

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

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

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

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

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

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

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

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

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

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

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

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

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

Projeto Orientado a Objetos Tipos de Visibilidade Visibilidade global Atribuir uma instância a uma variável global 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 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 ) ... 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 Projeto Orientado a Objetos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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