Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5....
Transcript of Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5....
![Page 1: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/1.jpg)
Estudo de Caso TPV
Projeto e Desenvolvimento de Sistemas de Informação
UNIVERSIDADE ESTADUAL PAULISTAINSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATASDEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA
Estudo de Caso TPVProjetando uma solução com
objetos e Padrões GRASP
![Page 2: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/2.jpg)
Atividades da Fase ProjetarRefinarPlano
Sincronizarartefatos
Analisar Projetar Construir Testar
1. Definir Casos deUso Reais
2. Definir Relatórios, IU e “Storyboards”
3. Refinar a arquitetura do sistema
4. Definir diagramasde interação
5. Definir Diagramas deClasses de Projeto
6. Definir o EsquemaDo Banco de Dados
![Page 3: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/3.jpg)
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.projeto.
� Não há soluções mágicas ou não justificadas. Elas devem ser baseadas em raciocínios lógicos e racionais.
![Page 4: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/4.jpg)
Diagramas de Comunicação e artefatos anteriores
Operação: entrarItem
Pós-condições:
1. Se for uma nova venda,
uma nova venda foi criada...entrarItem(cup,
SistemaCaixa
:TPV
entrarItem(cup, qtd)
uma nova venda foi criada...
Operação: registrarPagamento
Pós-condições:
1. ...
entrarItem(cup,
quantidade)
terminarVenda()
registrarPagamento
( quantia) :TPV
registrarPagamento
(quantia)
Diagrama de
seqüência do
sistema
ContratosDiagrama de
comunicação
![Page 5: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/5.jpg)
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.inicial.
� Se o diagrama se tornar complexo, separe-o em diagramas menores.
� Usando as responsabilidades e as pós-condiçõ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.
![Page 6: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/6.jpg)
Diagramas de Comunicação para a aplicação TPV
Na iteração corrente: dois casos de uso estão sendo tratados:
� Comprar Itens� entrarItem� entrarItem� terminarVenda� EfetuarPagamento
� Inicializar� Inicializar
![Page 7: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/7.jpg)
Diagramas de Comunicação para a aplicação TPV
Lembretes: � As pós-condições são somente uma
pista inicial.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)
![Page 8: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/8.jpg)
Eventos de Sistema do TPV
:TPV
:TPV
entrarItem
terminarVenda
1: ???()
1: ???()
:TPV
:TPV
registrarPagamento
inicializar
1: ???()
1: ???()
![Page 9: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/9.jpg)
Modelo Conceitual e Diagrama de Comunicação
� Ponto de partida para os objetos que interagem entre si� Novos conceitos poderão surgir, assim � Novos conceitos poderão surgir, assim
como conceitos previamente identificados poderão ser ignorados.
� É um guia, porém pode conter erros e omissões.
![Page 10: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/10.jpg)
Modelo Conceitual do TPV
*
1
1 Loja
1..*1
Catálogo de Produtos
*
Usado-por
*
1..*
Estoca
0..1
1
Especificação de ProdutodescriçãopreçoCUP
1..*
Contém
*
Descreve
*
LinhadeItemdeVendaquantidade
1..*
Contido-em
0..1
Registra-venda-de
*
Descritos-por
1
1
Caixa
1
Gerente
1..*
1..*
1
1
Pagamentoquantia
1
1
Cliente
1
1
*
TPV
< Registra-Vendas-do
1..*
Iniciado por
1
*1
endereçonome
1..*
Possui
*
1
Vendadatatempo
Paga-porIniciada-por
*
Registra-Dados-dav
1
Capturada-em
1
Item
*
Estoca*
Contido-em
![Page 11: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/11.jpg)
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)• 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)
![Page 12: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/12.jpg)
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 � 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.
![Page 13: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/13.jpg)
Diagrama de Comunicação de entraItem
segundo o
padrão
Controlador
:TPVentrarItem(cup,qtd)
![Page 14: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/14.jpg)
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 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.
![Page 15: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/15.jpg)
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
:TPV
entrarItem(cup,qtd)
:Venda1:[nova_venda] criar()
segundo o
padrão
Criador
:TPV :Venda
:linhadeItemde
Venda
1:[nova_venda] criar()
1.1:criar() segundo o
padrão
CriadorColeção vazia, conterá
futuramente, instâncias de
Linha de Item de Venda
(multiobjeto)
![Page 16: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/16.jpg)
Próximo passo
Criar uma nova linhadeItemdeVenda� Uma LinhadeItemdeVenda foi criada
(c.i)� A LinhadeItemdeVenda foi associada à � A LinhadeItemdeVenda foi associada à
Venda (f.a)� LinhadeItemdeVenda.quantidade
recebeu o valor de quantidade (m.a)
![Page 17: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/17.jpg)
Criar uma nova LinhaDeItemDeVenda
:TPV
entrarItem(cup,qtd)
:Venda1:[nova_venda] criar()
1.1:criar()3.1:criar(espec,qtd)
3:criarLinhadeItem(espec,qtd)
:linhadeItemde
Venda
1.1:criar()
3.2:adicionar(lv)
lv:linhadeItemdeVenda
3.1:criar(espec,qtd)
segundo o
padrão
Criador
![Page 18: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/18.jpg)
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 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?
![Page 19: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/19.jpg)
Próximo passo
Encontrar a especificação do produto-> definir claramente a responsabilidade:
� Quem deveria ser responsável por conhecer uma Especificação de 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?
![Page 20: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/20.jpg)
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ê-locumprir a responsabilidade deve fazê-lo
� Quem sabe tudo sobre a Especificação de Produto?
� Observe isso no modelo conceitual:
![Page 21: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/21.jpg)
*
1..1
1..1 Loja
1..*1..1
Catálogo de Produtos
*
1..1Usado-por
*1..1
1..*
Estoca
0..1
1..1
Especificação de ProdutodescriçãopreçoUPC
1..*1..1
Contém
*
Descreve
*
LinhadeItemdeVendaquantidade
1..*
Contido-em
0..1
Registra-venda-de
1..1
*
Descritos-por
Modelo Conceitual do TPV
1..1
1..1
Caixa
1..1
Gerente
1..*
1..*
1..1
1..1
Pagamentoquantia
1..1
1..1Cliente
1..1
1..1
*
1..1TPV
1..1
1..1
< Registra-Vendas-do
1..11..*
Iniciado por
1..1
*1..1
endereçonome
1..*
1..1Possui
*
1..1
Vendadatatempo
1..1
1..1Paga-por
1..1
1..1
Iniciada-por
1..1
*
Registra-Dados-dav
1..1
1..1Capturada-em
1..1
Item
*1..1
Estoca*
1..1
Contido-em
1..1
![Page 22: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/22.jpg)
Próximo passo
Visibilidade para um Catálogo de Produtos� Quem deveria enviar a mensagem
especificação para o Catálogo de Produtossolicitando uma Especificação de Produto?
� É razoável assumir que uma instância de TPV e de Catálogo de Produtos foram 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
![Page 23: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/23.jpg)
Diagrama de Comunicação de entrarItem (completo)
:TPV
entrarItem(cup,qtd)
:Venda1:[nova_venda] criar()
1.1:criar()3.1:criar(espec,qtd)
3:criarLinhadeItem(espec,qtd)
2:espec:=especificação(cup)
:linhadeItemde
Venda
1.1:criar()
3.2:adicionar(lv)
lv:linhadeItemdeVenda
3.1:criar(espec,qtd)2:espec:=especificação(cup)
2.1:espec:=encontrar(cup)
:Catálogode
Produtos
:Especificaçãode
Produto
![Page 24: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/24.jpg)
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 � 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)
![Page 25: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/25.jpg)
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.
![Page 26: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/26.jpg)
Diagrama de Comunicação: terminarVenda
Pós-condições:
Venda.estáCompleta recebeu o valor true
terminarVenda()
TornarseCompleta()
{ estáCompleta := V}
:TPV :Venda1:tornarseCompleta()
segundo o
padrão
Especialista
segundo o
padrão
Controlador
Encerramento da entrada de itens
![Page 27: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/27.jpg)
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 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.
![Page 28: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/28.jpg)
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.
![Page 29: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/29.jpg)
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 correnteVenda
tot:=total()
:Venda
![Page 30: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/30.jpg)
tot:=total()2*: st:=subtotal()
Calcular o total da venda
1*:[para cada]liv:=prox():LinhadeItemdeVenda
subtotal() {
return quantidade*espec.preço() }
2*: st:=subtotal()liv:LinhadeIte
mdeVenda
espec: Especifi
caçãodeProduto
:Venda
2.1:pr:=preçototal() {
tot:=0
para cada linha de item de
venda liv
tot:= tot + liv.subtotal()
}
![Page 31: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/31.jpg)
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 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
![Page 32: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/32.jpg)
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: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)
![Page 33: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/33.jpg)
Registrar Pagamento
:TPV
registrarPagamento(quantiaFornecida)
Controlador: TPV ou Venda ?
:TPV
Fazer um DC
Com Venda como
controlador
![Page 34: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/34.jpg)
Registrar Pagamento
registrarPagamento(quantia
Fornecida)
1: registrarPagamento(quantia
Criando o pagamento
Criador +
acoplamento baixo
Candidatos: TPV e Venda
:TPV :Venda1: registrarPagamento(quantia
Fornecida)
:Pagamento
1.1:criar(quantiaFornecida)
![Page 35: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/35.jpg)
Registrando a Venda
Padrão Especialista� Quem é o responsável por conhecer
todas as vendas registradas e fazer todas as vendas registradas e fazer esse registro?
- Loja
- DiáriodeVendas
![Page 36: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/36.jpg)
*
1..1
1..1 Loja
1..*1..1
Catálogo de Produtos
*
1..1Usado-por
*1..1
1..*
Estoca
0..1
1..1
Especificação de ProdutodescriçãopreçoUPC
1..*1..1
Contém
*
Descreve
*
LinhadeItemdeVendaquantidade
1..*
Contido-em
0..1
Registra-venda-de
1..1
*
Descritos-por
Registrando a Venda
1..1
1..1
Caixa
1..1
Gerente
1..*
1..*
1..1
1..1
Pagamentoquantia
1..1
1..1Cliente
1..1
1..1
*
1..1TPV
1..1
1..1
< Registra-Vendas-do
1..11..*
Iniciado por
1..1
*1..1
Lojaendereçonome
1..*
1..1Possui
*
1..1
Vendadatatempo
1..1
1..1Paga-por
1..1
1..1
Iniciada-por
1..1
*
Registra-Dados-dav
1..1
1..1Capturada-em
1..1
Item
*1..1
Estoca*
1..1
Contido-em
1..1
![Page 37: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/37.jpg)
Registrando a venda: Alternativas
VendaVenda
...... ...
...
Loja
acrescentarVen
da(v:Venda)acrescentarVen
da(v:Venda))
DiáriodeVendas......
Registra-dados-da
Registra-dados-daLoja é responsável por
conhecer e acrescentar Vendas
completadas
![Page 38: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/38.jpg)
:TPV
registrarPagamento()
:Venda
1: registrarPagamento(quantiaFornecida)
2 : acrescentarVenda(v)
Registrando uma venda completada
:Pagamento
1.1:criar(quantiaFornecida)2 : acrescentarVenda(v)
2.1 : acrescentrar(v)
:Loja
VendasCompletadas: Venda
![Page 39: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/39.jpg)
Calculando o Troco
Quem é responsável por conhecer o troco?
Troco = Dinheiro fornecido para pagamento –Total da VendaEspecialistas parciais: Venda e PagamentoEspecialistas parciais: Venda e PagamentoControlador ?
Pagamento -> visibilidade
para venda (acréscimo de
acoplamento)
Venda -> visibilidade para
pagamento (já possui tal
visibilidade)
![Page 40: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/40.jpg)
Calculando o TrocoControlador: Venda
trc:=troco()
Venda – troco()
{return pg.quantia() –
total() }
:Venda pg:Pagamento1: qtia:=quantia()
2: t:=total()
OBS: Um DC pode começar com
qualquer mensagem para a qual o
projetista deseja mostrar as
interações.
![Page 41: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/41.jpg)
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.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.
![Page 42: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/42.jpg)
public class TPVApplet extends Applet
{
public void init ( )
{
tpv = Loja.getTPV ( )
}
Exemplo de inicialização, a partir de um applet Java
}
// 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;
![Page 43: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/43.jpg)
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 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.
![Page 44: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/44.jpg)
Escolhendo o objeto inicial do domínio
� Escolha como um objeto inicial do domínio:� Uma classe que representa todo o sistema � 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
![Page 45: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/45.jpg)
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, � 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
![Page 46: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/46.jpg)
Contrato
Nome: Iniciar
Responsabilidades: Iniciar o sistema.
Tipo: Sistema
Refs cruzadas:
Notas:
Exceções:
Saída:
Pré-condições: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)
![Page 47: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/47.jpg)
cp:Catálogode
:Loja
criar()
:TPV
:Especificãode
2 : criar (cp)
1 :criar ( )
1.1 criar ()
1.2.2* : adicionar (ep)
Passa refer. do catálogo de produtos a TPV,
que terá visibilidade permanente a ele.
cp:Catálogode
Produtos:Especificãode
Produto
ep:EspecificaçãodeProduto
1.2.2* : adicionar (ep)
1.2.1* : criar(cup,preço,descrição)
1.2 : carregarEspecProd( )
O asterisco, no número de
seqüência, indica que a
mensagem ocorre em uma seção
que se repete
![Page 48: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/48.jpg)
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)
![Page 49: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/49.jpg)
Loja:Loja
Como ligar a camada de apresentação à camada do domínio
1: criar()
:TPVApplet Loja:Loja:TPVApplet2 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.
![Page 50: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/50.jpg)
Como ligar a camada de apresentação à camada do domínio
tpv:TPVCamada do
Domínio
1: entrarItem(cup,qtd)
Evento do sistema
:TPVApplet
aoEntrarItem()Camada de
apresentação
(Applet Java)
![Page 51: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/51.jpg)
Como ligar a camada de apresentação
à camada do domínioPara obter o subtotal
corrente, o TPVAPPLET:
•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
venda:Venda
tpdv:TPV
Camada do
Domínio
1:entrarItem(cup,qtd)
:TPVApplet
aoEntrarItem()Camada de
apresentação
2 :[nenhuma venda] venda:=getVenda ( ) : Venda
3: t:=total(): Float
para a Venda para obter a
informação necessária para
exibir o total corrente na
janela
![Page 52: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/52.jpg)
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 � 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.
![Page 53: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/53.jpg)
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 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)
![Page 54: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/54.jpg)
Próxima aulaRefinarPlano
Sincronizarartefatos
Analisar Projetar Construir Testar
1. Definir Casos deUso Reais
2. Definir Relatórios, IU e “Storyboards”
3. Refinar a arquitetura do sistema
4. Definir diagramasde interação
5. Visibilidade e Diagramasde Classes de Projeto
6. Definir o EsquemaDo Banco de Dados
![Page 55: Estudo de Caso TPV Projetando uma solução com … › ~ines › cursos › proj-si › ...5. Definir Diagramas de Classes de Projeto 6. Definir o Esquema Do Banco de Dados Como Criar](https://reader034.fdocumentos.tips/reader034/viewer/2022042407/5f21d20ad92bbf02be3930db/html5/thumbnails/55.jpg)