Estudo de Caso TPV Projetando uma solução com objetos e Padrões GRASP

Documentos relacionados
Análise e Projeto Orientados a Objetos: Visibilidade Diagrama de Classe de Projeto

Estudo de Caso TPV: do Projeto para a Codificação

Contratos O diagrama de sequência não menciona a funcionalidade das operações. Isto é, o comportamento do sistema Contrato é um documento que

Visibilidade e Diagrama de Classe de Projeto Estudo de Caso Sistema TPV

GRASP: PADRÕES PARA ATRIBUIÇÃO DE RESPONSABILIDADES. SSC 124 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Diagrama de Comunicação. SSC 526 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Conteúdo. 1. Introdução. 2. Levantamento de Requisitos. 3. Análise Orientada a Objetos. 4. Projeto Orientado a Objetos 5. UML. 6.

ANÁLISE E PROJETO ORIENTADO A OBJETO (Parte 3)

DIAGRAMA DE COMUNICAÇÃO. SSC 124 Análise e Projeto Orientado a Objeto Profa. Dra. Elisa Yumi Nakagawa

Análise e Projeto de Software Parte II. Marcos Dósea

DIAGRAMA DE COMUNICAÇÃO

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

PROJETO DE ARQUITETURA

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

PROJETO DE ARQUITETURA (PARTE 2)

Análise Orientada a Objetos. Análise e Projeto

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Padrões para atribuir responsabilidades: Expert

Banco de Dados. SGBD - Sistema de Gerenciamento de Banco de Dados Parte 2. Prof. Leonardo Vasconcelos

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Padrões de Projeto de Software

Aula 7 Visibilidade entre objetos e Diagramas de Classes

Engenharia de Software II

Diagrama de Colaboração Exemplos - Padrões GRASP Diagrama de Classes

Introdução aos Algoritmos

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Conceitos de Programação Orientada a Objetos

Introdução aos Algoritmos

Desenvolvimento de Sistemas Orientados a Objetos com UML UP/RUP: Projeto

Sistema de Reparo de Buracos

Diagramas de Sequência e Contrato das Operações

Persistência de Objetos

Banco de Dados. Aula 2 - Prof. Bruno Moreno 19/08/2011

Grupo de Usuários Java do Noroeste Paulista. Tópicos Avançados em Java

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

UML. Rodrigo Leite Durães.

Orientação a Objetos e Java

27/02/2016 UML. Prof. Esp. Fabiano Taguchi DIAGRAMAS DE SEQUÊNCIA

Projeto de Sistemas; Projeto Orientado a Objetos; Estruturação em Camadas; Projeto Orientado a Objetos em Camadas; Um Exemplo Ilustrativo.

15/04/2013. Pensar Orientado a Objetos. Projeto Orientado a Objetos. Características de Objetos. Classe de Objetos. Comunicação entre Objetos

3 Ferramenta Proposta 3.1. Objetivos

MODELAGEM DE SISTEMAS Unidade 4 Modelo de Classes de Projeto. Luiz Leão

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Matéria Introdutória. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Programação Orientada a Objetos

Aula 01 Revisão Geral Banco de Dados I Conceito de Banco de Dados e SGBD

GRASP. Nazareno Andrade (baseado em Hyggo Almeida e Jacques Sauvé)

Backup e Recuperação Guia do Usuário

Levantamento de classes (Análise de casos de uso)

Modelagem de Sistemas. Análise de Requisitos. Modelagem

Unidade 4 Projeto de Banco de Dados

GEQ Prof. Paulo R. Coelho. Lista para prova

INF1013 MODELAGEM DE SOFTWARE

SISTEMAS DE BANCOS DE DADOS: CONCEITOS E ARQUITETURA

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA UML UNIFIED MODELING LANGUAGE

Introdução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.

Revisando Banco de Dados. Modelo Relacional

Desenvolvimento de Aplicações Desktop

5 Arquitetura de implementação

Introdução ao Java. Prof. Herbert Rausch Fernandes

FUNDAÇÃO UNIVERSIDADE ESTADUAL DE MARINGÁ

Processos ca 3 pítulo

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

DIAGRAMAS DE CLASSE UML

Interações entre objetos

Engenharia de Software I

Modelagem Orientada a Objeto

Modelos de Sistemas Casos de Uso

SSC510 Arquitetura de Computadores 1ª AULA

Análise e projeto de sistemas

Notação Básica dos Diagramas de Comunicação

Programação I 2º Bimestre (material 1)

Aula 3 POO 1 Classe e Objeto. Profa. Elaine Faria UFU

DMS - DOCUMENTO DE MODELAGEM DE SISTEMA VERSÃO: [NOME DO SISTEMA] [SIGLA] [AUTORES]

Programação Orientada a Objetos

Interfaces e Classes Abstratas

Modelagem de Sistemas Web. Modelagem de BD

Análise e Projeto de Sistemas

Infor LN Service Guia do usuário para o nivelamento da carga de trabalho

Sistemas de Banco de Dados

Exercícios sobre repetição. 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos.

Tópicos da Aula. Alguns Diagramas UML. Diagramas Principais. Diagramas de Interação: Sequência e Colaboração. Tipos de Diagramas de Interação

ANÁLISE E PROJETO ORIENTADO A OBJETO

Modelo de Dados Wendel Melo

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Banco de Dados Relacional

Análise e Projeto Orientados a Objetos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Aula 08 Relacionamento entre Objetos. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Transcrição:

UNIVERSIDADE ESTADUAL PAULISTA INSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATAS DEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA Projeto e Desenvolvimento de Sistemas de Informação Estudo de Caso TPV Projetando uma solução com objetos e Padrões GRASP

Atividades da Fase Projetar Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 1. Definir Casos de Uso Reais 3. Refinar a arquitetura do sistema 5. Definir Diagramas de Classes de Projeto 2. Definir Relatórios, IU e Storyboards 4. Definir diagramas de interação 6. Definir o Esquema Do Banco de Dados

Como Criar Diagramas de Comunicação Atribuir responsabilidades e criar os diagramas de comunicação são as atividades mais criativas da fase de projeto. Não há soluções mágicas ou não justificadas. Elas devem ser baseadas em raciocínios lógicos e racionais.

Diagramas de Comunicação e artefatos anteriores Caixa Sistema entraritem(cup, quantidade) Operação: entraritem Pós-condições: 1. Se for uma nova venda, uma nova venda foi criada... entraritem(cup, qtd) :TPV terminarvenda() Operação: registrarpagamento Pós-condições: registrarpagamento ( quantia) 1.... :TPV registrarpagamento (quantia) Diagrama de seqüência do sistema Contratos Diagrama de comunicação

Criação dos Diagramas de Comunicação Crie um diagrama separado para cada operação do sistema em desenvolvimento no passo iterativo corrente. Para cada evento do sistema, crie um diagrama com o evento como a mensagem inicial. Se o diagrama se tornar complexo, separe-o em diagramas menores. Usando as responsabilidades e as póscondições dos contratos, projete um sistema de objetos que interagem entre si para executar as tarefas. Use GRASP (e outros conhecimentos) para apoiar a sua decisão.

Diagramas de Comunicação para a aplicação TPV Na iteração corrente: dois casos de uso estão sendo tratados: Comprar Itens entraritem terminarvenda EfetuarPagamento Inicializar Inicializar

Diagramas de Comunicação para a aplicação TPV Lembretes: As pós-condições são somente uma pista inicial. Use o modelo conceitual como apoio. O contrato é a base para o diagrama de colaboração Comece escolhendo a classe controladora do evento (ou método)

Eventos de Sistema do TPV entraritem :TPV 1:???() terminarvenda :TPV 1:???() registrarpagamento :TPV 1:???() inicializar :TPV 1:???()

Modelo Conceitual e Diagrama de Comunicação Ponto de partida para os objetos que interagem entre si Novos conceitos poderão surgir, assim como conceitos previamente identificados poderão ser ignorados. É um guia, porém pode conter erros e omissões.

Modelo Conceitual do TPV 0..1 1..* * LinhadeItemdeVenda quantidade Contido-em 1 1 1 Paga-por Venda data tempo 1 Pagamento quantia * 1 1 Iniciada-por Registra-Dados-da v Cliente Registra-venda-de Catálogo de Produtos Usado-por Capturada-em 1 Descritos-por 1 * 1 Loja endereço nome Possui 1 TPV 1..* 1 1 1 1..* Contém 1..* Estoca Iniciado por 1 1 < Registra-Vendas-do Especificação de Produto descrição preço CUP * Descreve Item Gerente Caixa * 1 1

Contrato da operação entraritem Nome: entraritem (cup:number, quantidade:integer) Responsabilidades: entrar(registrar) a venda de um item e acrescentá-lo à venda. Exibir a descrição e o preço do item. Pós-condições: Se for uma nova venda, uma Venda foi Criada (c.i.) Se for uma nova venda, a nova Venda foi associada ao TPV (f.a) Uma LinhadeItemdeVenda foi criada (c.i) A LinhadeItemdeVenda foi associada à Venda (f.a) LinhadeItemdeVenda.quantidade recebeu o valor de quantidade (m.a) A LinhadeItemdeVenda foi associada a um(a) (Especificaçãode) Produto, com base no CUP (f.a)

Diagrama de Comunicação de entraritem (Cont) Escolhendo a classe Controlador: Opções: TPV ou nova classe SistemadeVarejo, Loja, Caixa, Controlador-ComprarItens Escolha: TPV Satisfatório se houver poucas operações de sistema e o controlador fachada não estiver assumindo muita responsabilidade Tenha em mente que agora o TPV é um objeto no mundo do software. Ele é uma abstração de software que representa o registrador.

Diagrama de Comunicação de entraitem segundo o padrão Controlador entraritem(cup,qtd) :TPV

Diagrama de Comunicação de entraritem (Cont) Exibir a descrição e o preço do item Não é responsabilidade dos objetos do domínio (TPV ou VENDA) se comunicarem com a camada de interface do usuário (Padrão Separação entre Modelo e Visão): Tudo o que é necessário, com relação a essa responsabilidade, é que os dados sejam conhecidos (ou sejam calculados, conforme as necessidades). A apresentação da descrição e do preço será ignorada, por enquanto.

Criar uma nova venda -se for uma nova venda, uma Venda foi criada -se for uma nova venda, a nova Venda foi associada ao TPV entraritem(cup,qtd) segundo o padrão Criador :TPV 1:[nova_venda] criar() :Venda Coleção vazia, conterá futuramente, instâncias de Linha de Item de Venda (multiobjeto) 1.1:criar() :linhadeitemde Venda segundo o padrão Criador

Próximo passo Criar uma nova linhadeitemdevenda Uma LinhadeItemdeVenda foi criada (c.i) A LinhadeItemdeVenda foi associada à Venda (f.a) LinhadeItemdeVenda.quantidade recebeu o valor de quantidade (m.a)

Criar uma nova LinhaDeItemDeVenda entraritem(cup,qtd) :TPV 3:criarLinhadeItem(espec,qtd) 1:[nova_venda] criar() :Venda 1.1:criar() 3.1:criar(espec,qtd) segundo o padrão Criador :linhadeitemde Venda 3.2:adicionar(lv) lv:linhadeitemdevenda

Próximo passo Encontrar a especificação do produto A LinhadeItemdeVenda foi associada a um(a) (Especificaçãode) Produto, com base no CUP (f.a) Quem deveria ser responsável por recuperar uma EspecificaçãodeProduto a partir do CUP? Ou seja quem deveria ser responsável por conhecer uma EspecificaçãodeProduto? Quem deve ter a responsabilidade de encontrar os dados (especificação) do produto? Quais dados devem ser armazenados de forma permanente?

Próximo passo Encontrar a especificação do produto-> definir claramente a responsabilidade: Quem deveria ser responsável por conhecer uma Especificação de Produto baseado em uma correspondência de CUP? Que tipo de problema temos? Criação? Escolha de um Controlador? Especialista?

Próximo passo Encontrar a especificação do produto Padrão Especialista sugere: o objeto que tenha a informação requerida para cumprir a responsabilidade deve fazê-lo Quem sabe tudo sobre a Especificação de Produto? Observe isso no modelo conceitual:

Modelo Conceitual do TPV 0..1 1..* * LinhadeItemdeVenda quantidade Contido-em Paga-por Venda data tempo Pagamento quantia * Iniciada-por Registra-Dados-da v Cliente Registra-venda-de Catálogo de Produtos Usado-por Capturada-em Descritos-por * Loja endereço nome Possui TPV 1..* 1..* Contém 1..* Estoca Iniciado por * Especificação de Produto descrição preço UPC < Registra-Vendas-do * Descreve Item Gerente Caixa

Próximo passo Visibilidade para um Catálogo de Produtos Quem deveria enviar a mensagem especificação para o Catálogo de Produtos solicitando uma Especificação de Produto? É razoável assumir que uma instância de TPV e de Catálogo de Produtos foram criados durante o caso de uso inicial Inicializar e que exista uma conexão permanente do objeto TPV para o objeto Catálogo de Produtos. Assumindo isso, TPV pode enviar a mensagem especificação para Catálogo de Produtos

Diagrama de Comunicação de entraritem (completo) entraritem(cup,qtd) :TPV 3:criarLinhadeItem(espec,qtd) 1:[nova_venda] criar() :Venda 2:espec:=especificação(cup) :Catálogode Produtos 2.1:espec:=encontrar(cup) 1.1:criar() :linhadeitemde Venda 3.2:adicionar(lv) 3.1:criar(espec,qtd) :Especificaçãode Produto lv:linhadeitemdevenda

Considerações Um objeto, ao enviar uma mensagem para outro objeto, deve ter visibilidade deste outro objeto. Na versão final de uma aplicação real de ponto de vendas, é improvável que todas as Especificação de Produto estarão realmente na memória. Um BD OO ou relacional será usado, e as recuperações serão realizadas sob demanda. Observe que as mensagens que estão sendo enviadas aos multiobjetos são interpretadas como mensagens ao próprio objeto Coleção.( 1.1 criar, 2.1 Encontrar, 3.2 adicionar)

Diagrama de Comunicação:terminarVenda Contrato da Operação: Nome: terminarvenda() Responsabilidades: Registrar que é o fim da entrada de itens de venda e exibir o total da venda Pós-condições: Venda.estáCompleta recebeu o valor true Um Diagrama de Comunicação será construído para satisfazer as pós-condições e responsabilidades de terminarvenda.

Diagrama de Comunicação: terminarvenda Pós-condições: Venda.estáCompleta recebeu o valor true TornarseCompleta() terminarvenda() { estácompleta := V} :TPV 1:tornarseCompleta() :Venda segundo o padrão Controlador Encerramento da entrada de itens segundo o padrão Especialista

Quem deve ser responsável pela exibição da informação total da venda? Isso deverá ser feito pela camada de apresentação ( a ser discutida mais adiante) Durante a criação do diagrama de comunicação, não se preocupe com a exibição de informações, exceto quando a informação requerida ainda não é conhecida. Garanta que toda informação a ser exibida seja conhecida e esteja disponível nos objetos do domínio. Exemplo: terminarvenda deve informar o total da venda.

Processo de raciocínio para encontrar um Especialista para o total da venda Defina a responsabilidade: Quem deveria ser responsável por conhecer o total da venda? Resuma a informação requerida: O total da venda é a soma dos subtotais de todas as linhas de itens de vendas. Subtotal da linha de item de vendas := quantidade da linha de item * preço na descrição do produto. Liste a informação necessária para satisfazer esta responsabilidade e as classes que conhecem esta informação.

Informação Requerida para calcular o total da Venda Classe Especialista EspecificaçãodeProduto.preço EspecificaçãodeProduto LinhadeItemdeVenda.quantidade LinhadeItemdeVenda Todas as LinhasdeItemdeVenda na Venda corrente Venda tot:=total() :Venda

Calcular o total da venda subtotal() { return quantidade*espec.preço() } tot:=total() :Venda 1*:[para cada]liv:=prox() :LinhadeItemdeVenda 2*: st:=subtotal() liv:linhadeite mdevenda total() { tot:=0 para cada linha de item de venda liv tot:= tot + liv.subtotal() } 2.1:pr:=preço espec: Especifi caçãodeproduto

Discussão A mensagem total não está associada a evento de sistema (não é uma operação de um diagrama de sequência) Nem todo o diagrama de comunicação começa com uma mensagem de um evento de sistema; eles podem começar com qualquer mensagem para a qual o projetista deseja mostrar as interações. Quem enviará a mensagem total para a Venda? Provavelmente será um objeto na camada de apresentação

Diagrama de Comunicação de registrarpagamento Contrato da Operação: Nome: RegistrarPagamento(quantia: Number) Responsabilidades: Registrar o pagamento, calcular o troco e imprimir o recibo. Pós-condições: Um Pagamento foi criado (ci) Pagamento.quantiaFornecida recebeu o valor de quantia (ma) O Pagamento foi associado à Venda (fa) A Venda foi associada à Loja, para acrescentá-la ao registro histórico de vendas completadas (fa)

Registrar Pagamento Controlador: TPV ou Venda? registrarpagamento(quantiafornecida) :TPV Fazer um DC Com Venda como controlador

Registrar Pagamento Criando o pagamento Candidatos: TPV e Venda registrarpagamento(quantia Fornecida) :TPV 1: registrarpagamento(quantia Fornecida) Criador + acoplamento baixo :Venda 1.1:criar(quantiaFornecida) :Pagamento

Registrando a Venda Padrão Especialista Quem é o responsável por conhecer todas as vendas registradas e fazer esse registro? - Loja - DiáriodeVendas

* Loja 1..* Catálogo de Produtos * Usado-por * 1..* 0..1 Especificação de Produto descrição preço UPC 1..* Contém * Descreve * LinhadeItemdeVenda quantidade 1..* Contido-em 0..1 Registra-venda-de * Descritos-por Registrando a Venda Caixa Gerente 1..* 1..* Pagamento quantia Cliente * TPV < Registra-Vendas-do 1..* Iniciado por * Loja endereço nome 1..* Possui * Venda data tempo Paga-por Iniciada-por * Registra-Dados-da v Capturada-em Item * Estoca * Contido-em

Registrando a venda: Alternativas Venda Venda............ Loja... acrescentarven da(v:venda) Registra-dados-da Loja é responsável por conhecer e acrescentar Vendas completadas Registra-dados-da DiáriodeVendas... acrescentarven da(v:venda))

Registrando uma venda completada registrarpagamento() 1: registrarpagamento(quantiafornecida) :TPV :Venda 2 : acrescentarvenda(v) :Loja 2.1 : acrescentrar(v) 1.1:criar(quantiaFornecida) :Pagamento VendasCompletadas: Venda

Calculando o Troco Quem é responsável por conhecer o troco? Troco = Dinheiro fornecido para pagamento Total da Venda Especialistas parciais: Venda e Pagamento Controlador? Pagamento -> visibilidade para venda (acréscimo de acoplamento) Venda -> visibilidade para pagamento (já possui tal visibilidade)

Calculando o Troco Controlador: Venda trc:=troco() Venda troco() {return pg.quantia() total() } :Venda 1: qtia:=quantia() pg:pagamento 2: t:=total() OBS: Um DC pode começar com qualquer mensagem para a qual o projetista deseja mostrar as interações.

Diagrama de Comunicação de Iniciar Deixe o diagrama Iniciar por último. Informações significativas relacionadas com as atividades de inicialização devem já ter sido descobertas Objetivo: criar o objeto inicial do domínio. Esse objeto cria então os demais objetos necessários. Então, a operação Iniciar deve: Enviar a mensagem criar() para o objeto inicial do domínio. No seu método de inicialização, o objeto inicial é, responsável pela criação de outros objetos do domínio do problema e por suas inicializações.

Exemplo de inicialização, a partir de um applet Java public class TPVApplet extends Applet { public void init ( ) { tpv = Loja.getTPV ( ) } // Loja é o objeto inicial do domínio // O construtor de Loja cria os outros // objetos do domínio private Loja loja = new Loja ( ); private TPV tpv; private Venda venda;

A Operação Inicializar da aplicação TPV Ocorre quando um gerente liga o sistema do ponto de venda e carrega o software. Suponha que exista uma interface gráfica de usuário e que um objeto da camada de apresentação será responsável pela criação do objeto inicial do domínio do problema (ex. uma instância de um applet java coordenador da aplicação e da camada de apresentação) O controle permanecerá no applet, após o objeto inicial do domínio ter sido criado. O diagrama de colaboração de Inicializar pode ser interpretado como uma mensagem criar() enviada para criar o objeto inicial.

Escolhendo o objeto inicial do domínio Escolha como um objeto inicial do domínio: Uma classe que representa todo o sistema de informação. Uma classe que representa todo o negócio ou organização. Nesta aplicação Loja será escolhida como objeto inicial

Objetos persistentes: Especificação de Produto Em uma aplicação real, as instâncias de Especificação de Produto residirão em um BD. O projeto de como carregar objetos, dinamicamente, sob demanda, de um BD OO é simples. (BD relacional é mais difícil) Por enquanto faremos uma hipótese simplificadora: todas as instâncias de Especificação de Produto podem ser magicamente criadas na memória pelo objeto Catálogo de Produtos

Contrato Nome: Iniciar Responsabilidades: Iniciar o sistema. Tipo: Sistema Refs cruzadas: Notas: Exceções: Saída: Pré-condições: Pós-condições: Uma Loja, TPV, CatálogodeProdutos e (Especificaçãode)Produto foram criadas (ci) CatálogodeProdutos foi associado a EspecificaçãodeProduto (af) Loja foi associada a CatálogodeProdutos (af) Loja foi associada a TPV (af) TPV foi associado a CatálogodeProdutos (af)

criar() Passa refer. do catálogo de produtos a TPV, que terá visibilidade permanente a ele. :Loja 2 : criar (cp) :TPV 1 :criar ( ) 1.1 criar () cp:catálogode 1.2.2* : adicionar (ep) Produtos :Especificãode Produto 1.2 : carregarespecprod( ) O asterisco, no número de seqüência, indica que a mensagem ocorre em uma seção que se repete 1.2.1* : criar(cup,preço,descrição) ep:especificaçãodeproduto

Comentários Multiplicidade : observe que a loja cria somente um objeto TPV. Persistência: num sistema real, Persistência: num sistema real, Especificação de Produto residirá num meio de armazenamento permanente (Disco + SGBD)

Como ligar a camada de apresentação à camada do domínio :TPVApplet 1: criar() Loja:Loja 2 p:= gettpv:tpv Uma vez que o applet tem uma conexão para a instância de TPV, ele pode repassar ao mesmo mensagens de eventos do sistema: entraritem(), terminarvenda() e outras.

Como ligar a camada de apresentação à camada do domínio Camada de apresentação (Applet Java) Camada do Domínio aoentraritem() :TPVApplet 1: entraritem(cup,qtd) Evento do sistema tpv:tpv

Como ligar a camada de apresentação Camada de apresentação à camada do domínio Para obter o subtotal corrente, o TPVAPPLET: aoentraritem() :TPVApplet 3: t:=total(): Float Obtém uma referência para a venda Armazena essa referência em um atributo Envia uma mensagem total para a Venda para obter a informação necessária para exibir o total corrente na janela Camada do Domínio tpdv:tpv 1:entrarItem(cup,qtd) venda:venda 2 :[nenhuma venda] venda:=getvenda ( ) : Venda

Responsabilidades das camadas de apresentação e do domínio A camada de apresentação não deve ter responsabilidades sobre a lógica da aplicação. Camada de apresentação deve ser responsável somente por tarefas de apresentação (interface), tais como atualizar widgets (componentes da interface) A camada de apresentação deve repassar todas as solicitações para a camada do domínio.

Resumo Projetar interações de mensagens e atribuir responsabilidades é a parte principal do projeto OO. Essas escolhas de projeto tem um impacto profundo sobre a capacidade de extensão, clareza, facilidade de manutenção de um sistema de software OO e sobre o grau de qualidade dos componentes reutilizáveis. Os padrões GRASP resumem alguns dos princípios mais gerais e mais comuns usados por projetistas de sistemas OO (princípios de bons projetos)

Próxima aula Refinar Plano Sincronizar artefatos Analisar Projetar Construir Testar 1. Definir Casos de Uso Reais 3. Refinar a arquitetura do sistema 5. Visibilidade e Diagramas de Classes de Projeto 2. Definir Relatórios, IU e Storyboards 4. Definir diagramas de interação 6. Definir o Esquema Do Banco de Dados