Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Visibilidade e Diagrama de Classe de Projeto
Estudo de Caso – Sistema TPV
UNIVERSIDADE ESTADUAL PAULISTAINSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATASDEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA
1
Estudo de Caso – Sistema TPV
Como Criar os Diagramas de Classes
� Identificar todas as classes a partir dos diagramas de comunicação.
� Desenhar todas essas classes no D.de Classes� Copiar todos os atributos do modelo conceitual� Acrescentar os métodos provenientes dos diagramas de
comunicação.
2
comunicação.� Acrescentar tipos aos atributos e métodos.� Acrescentar as associações que indicam visibilidade
por atributo.� Acrescentar informações sobre direção da visibilidade por
atributo (flechas de navegabilidade).� Indicar relacionamentos de dependência para indicar
visibilidades que não sejam de atributos.
Diagrama de Classe de Projeto para o Sistema TPV:
Classe� Depende dos casos de uso incluídos neste
ciclo de desenvolvimento. Por isso, nem todas as classes do modelo conceitual serão incluídas no Diagrama de Classe de Projeto.
3
incluídas no Diagrama de Classe de Projeto.� Só serão incluídas as classes que aparecem
nos diagramas de comunicação. Neste ciclo somente os casos de uso Comprar Itens e Iniciar estão sendo considerados:
Diagrama de Comunicação de entrarItem
: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
Diagrama de Comunicação: terminarVenda
:TPV
terminarVenda()
:Venda1:tornarseCompleta()
TornarseCompleta()
{ estáCompleta := V}
2*: st:=subtotal()
Calcular o total da venda
1*:[para cada]liv:=prox():LinhadeItemdeVenda
subtotal() {
return quantidade*espec.preço() }
total()
6
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()
}
Registrar Pagamento e Vendas
Completadas
:TPV
registrarPagamento(quantia
Fornecida)
:Venda1: registrarPagamento(quantia
Fornecida)
Criador +
acoplamento baixo
2 : acrescentarVenda(v)
7:Pagamento
1.1:criar(quantiaFornecida)
2 : acrescentarVenda(v)
2.1 : acrescentrar(v)
:Loja
VendasCompletadas: Venda
Calculando o Troco
trc:=troco()
Venda – troco()
{return pg.quantia() –
total() }
8
: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.
cp:Catálogode
:Loja
criar()
:TPV
:Especificãode
2 : criar (cp)
1 :criar ( )
1.1 criar ()
1.2.2* : adicionar (ep)
Diagrama de Comunicação de Iniciar
9
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
Modelo conceitual para o domínio do TPV
*
1
1..1 Loja
1..*1
Catálogo de Produtos
*
1Usado-por
*1..1
1..*
Estoca
0..1
1
Especificação de Produto
descrição
preço
CUP
1..*
Contém
*
Descreve
*
LinhadeItemdeVenda
quantidade
1..*
Contido-em
0..1
Registra-venda-de
1
*
Descritos-por
10
1
1
Caixa
1
Gerente
1..*
1..*
1
1
Pagamento
quantia
1
1
Cliente
1
1..1
*
1TPV
1
1
< Registra-Vendas-do
11..*
Iniciado por
1
*1
endereço
nome
1..*
1Possui
1
Venda
data
tempo
1
1
Paga-por
1
1
Iniciada-por
1..1
*
Registra-Dados-da
v
1
1Capturada-em
1
Item
*1
Estoca
1
Contido-em
1
Diagrama de Classe de Projeto para o Sistema TPV: Classe (cont.)
� Só serão incluídas as classes que aparecem nos diagramas de comunicação. Neste ciclo essas classes são:
� TPV, CatálogodeProdutos, Loja, Pagamento,
11
� TPV, CatálogodeProdutos, Loja, Pagamento, Venda, EspecificaçãodeProduto, LinhadeItemdeVenda.
TPV CatálogodeProdutos
quantidade
EspecificaçãodeProdutodescrição
preço
CUP
Loja Venda LinhadeItemdeVenda
12
Lojaendereço
nome
VendadataestáCompletahora
LinhadeItemdeVenda
quantidade
Pagamento
quantia
Como incluir os métodos nas classes
� Operações (eventos de sistema) são incluídas nas classes controladoras.
� Métodos são incluídos nas classes que
13
� Métodos são incluídos nas classes que recebem a mensagem.
� sintaxe básica UML � nomeMétodo(Par1, Par2, ..., Parn)
Inclusão de métodos
Vendadata
estáCompleta
hora
criarLinhadeItem()
14
:TPV
entrarItem(cup,qtd)
:Venda3:criarLinhadeItem(espec,qtd)
Como incluir os métodos nas classes (cont.)
� Não incluir:� Métodos enviados à coleções (esses
métodos devem ser implementados pela
15
métodos devem ser implementados pela classe Coleção)
Não incluir Mensagem para um multi-objeto
:TPV
entrarItem(cup,qtd)
2:espec:=especificação(cup)
16
2:espec:=especificação(cup)
2.1:espec:=encontrar(cup)
:Catálogode
Produtos
:Especificaçãode
Produto
A mensagem encontrar é
dirigida para o objeto
coleção, não para um objeto
EspeficicaçãodeProduto
Como incluir os métodos nas classes (cont.)
� Não incluir:� Método Criar (construtor)� Métodos de acesso a atributos, (setNome,
17
� Métodos de acesso a atributos, (setNome, getNome).
Acrescentando os demais métodos em Venda....
Venda
data
estáCompleta
18
estáCompleta
hora
criarLinhadeItem(espec, qtde)
tornarseCompleta()
registrarPagamento(quantia)
total()
Pela análise de todos os DC
e as mensagens que chegam
em Venda
Atributos
� Observação:� Embora uma visibilidade por atributo
venha a ser implementada posteriormente
19
venha a ser implementada posteriormente como um atributo na classe origem, isso não deve ser mostrado no diagrama de classes – manter as associações no diagramas de classes.
Venda
data: Date
estáCompleta: Boolean
hora: Time
Adição de Atributos e tipos
20
hora: Time
criarLinhadeItem()
tornarseCompleta()
registrarPagamento()
total()
Associações e Navegabilidade
� Indícios de associações e presença de navegabilidade:� A envia mensagem para B
21
� A envia mensagem para B� A cria B� A precisa manter uma conexão com B
A navegabilidade é identificada a
partir do diagrama de comunicação
:Loja
criar()
:TPV
:Especificãode
2 : criar (pc)
1 : criar ( )
:Catálogode
1.1 criar ()
1.1.2* : adicionar (ep)
22
Este diagrama de colaboração implica nas
navegabilidades:
Loja → TPV
Loja → CatálogodeProdutos
CatálogodeProdutos → EspecificaçãodeProduto
:Especificãode
Produto
ep:EspecificaçãodeProduto
:Catálogode
Produtos1.1.2* : adicionar (ep)
1.2.1* : criar(cup,preço,descrição)
1.2 : carregarEspecProd( )
Navegabilidade
:TPV
entrarItem(cup,qtd)
:Venda1:[nova_venda] criar()
23
:linhadeItemde
Venda
1.1:criar()
Este diagrama de comunicação implica
nas navegabilidades:
TPV → Venda
Venda → LinhadeItemdeVenda
Diagrama de Classe com navegabilidade
Venda
data: Date
estáCompleta: Boolean
TPV
1 1
captura
24
estáCompleta: Boolean
hora: Time
criarLinhadeItem()
tornarseCompleta()
registrarPagamento()
total()
entrarItem()
terminarVenda()
registrarPagamento()
1 1
Relacionamento de Dependência
� No diagrama de classes, o relacionamento de dependência representa a visibilidade entre classes que não é implementada por atributo� Visibilidade por parâmetro
25
� Visibilidade por parâmetro� Visibilidade local ou global
� Um objeto de uma classe A tem conhecimento (enxerga) um objeto da classe B
� Notação para Dependência: seta tracejada
Exemplo: Dependência
Venda EspecificaçãodeProduto
26
EspecificaçãodeProduto
Venda tem visibilidade a uma
especificação de produto pois recebe-a
como parâmetro em um dos diagramas
de comunicação
Versão Final do Diagrama de Classe de Projeto
1
1
1
1..*
Especificação de Produtodescrição : Textopreço : QuantidadeCUP : CUP
1
Descreve
11
Lojaendereço : Endereçonome : Texto
acrescentarVenda( )
Venda
1
1
Catálogo de Produtos
especificacao( )
1
Usa
1..*1
Contém
1
Possui
1Busca-em
27
1
Pagamentoquantia : Quantidade
1
1 1..*
*
*
LinhadeItemdeVendaquantidade : Inteiro
subtotal( )
*1
1 1
data : Datahora : HoraestáCompleta : Booleano
tornarseCompleta( )criarLinhadeItem( )efetuarPagamento( )total( )
1
1
Paga-por
1 1..*
Contém
*
Registra-Dados-da >
1
TPV
terminarVenda( )entrarItem( )registrarPagamento( )
1..*
Possui
1 1
Captura
1
Sistema TPV: atributos privados e métodos públicos
Venda
data: Date
estáCompleta: Boolean
28
estáCompleta: Boolean
hora: Time
+criarLinhadeItem()
+tornarseCompleta()
+registrarPagamento()
+total()
29