Projeto – Parte II
- Exemplos de Diagrama de
Colaboração
- Visibilidade entre Objetos
- Diagrama de Classe
© Nabor C. Mendonça 2001
1
Diagramas de Colaboração para o Sistema TV
Eventos de interesse
–
Caso de uso Processar Venda: entrarItem(),
encerrarVenda(), fazerPagamento()
Note que não existe a operação do sistema iniciarVenda()
Esqueça a operação startUp()
–
Caso de uso ProcessarVenda()
© Nabor C. Mendonça 2001
entrarItem()
:TV
1: ???()
terminarVenda()
:TV
1: ???()
fazerPagto()
:TV
1: ???()
startUp()
:POST
1: ???()
2
Diagrama de Colaboração — entrarItem()
Criando uma nova Venda
–
Pelo Criador, TV cria Venda, e Venda cria uma
coleção (vazia) para registrar objetos Item-de-Venda
Controlador
Criador
1: [nova venda] create()
entrarItem(upc, qte)
:TV
:Venda
Criador
Uma coleção vazia
1.1: create()
:LinhaDeVenda
© Nabor C. Mendonça 2001
3
Diagrama de Colaboração — entrarItem()
Criando um novo Item-de-Venda
–
–
–
Pelo padrão Criador, Venda cria objetos Item-deVenda
TV passa parâmetro quantidade para Venda, que o
repassa para Item-de-Venda como parâmetro da
mensagem create
Pelo criador, TV envia mensagem criarItem-de-Venda
para Venda, que então cria um novo Item-de-Venda e
o adiciona à sua coleção de objetos Item-de-Venda
Encontrando uma Especificação-Produto
–
Pelo padrão Especialista, Catálogo-Produto faz a
busca em objetos Especificação-Produto, baseada
em casamento de UPCs
© Nabor C. Mendonça 2001
4
Diagrama de Colaboração — entrarItem()
Diagrama de colaboração final
Criador
2: [nova venda] create()
entrarItem(upc, qte)
2.1: [velha venda]criarLV(spec, qte)
:TV
:Venda
1: spec := especificacao(upc)
:Catalogo
Produto
Especialista
2.2: create(spec, qty)
2.3: add(sl)
sl: LinhaDeVenda
1.1: spec := find(upc)
Mensagem à
coleção (container)
de objetos EP
© Nabor C. Mendonça 2001
:Especificacao
Produto
:LinhaDeVenda
5
Diagrama de Colaboração — encerrarVenda()
Definindo atributo Venda.completada
becomeComplete()
{
isComplete := true
}
endSale()
by Controller
:POST
1: becomeComplete()
:Sale
by Expert
Observe como corpos de método (pseudo-código) podem ser definidos
© Nabor C. Mendonça 2001
6
Diagrama de Colaboração — encerrarVenda()
Calculando total da venda
Atenção: a mensagem total() não é operação de sistema
Sale--total()
{
tot := 0
for each SalesLineItem, sli
tot := tot + sli.subtotal()
return tot
}
tot := total()
1*: [i:=1..N] sli := next()
:Venda
2*: [i:=1..N] st := subtotal()
by Expert
SalesLineItem
:LinhaDeVenda
sli:
LinhaDeVenda
2.1: pr := price()
Especialista
specprod:
EspecificacaoProduto
SalesLineItem--subtotal()
{
return quantity * prodSpec.price()
}
© Nabor C. Mendonça 2001
7
Diagrama de Colaboração — fazerPagamento()
Criando Pagamento
–
Pelo padrão Especialista, TV e Venda podem criar
um Pagamento
–
Considerando também Alta Coesão e Baixo
Acoplamento, Venda é a melhor escolha
Controlador
fazerPagto(valor)
Criador, baixo acoplamento
:TV
1: fazerPagto(valor)
:Venda
1.1: create(valor)
:Pagto
© Nabor C. Mendonça 2001
8
Diagrama de Interação — fazerPagamento()
Registrando a Venda
–
Pelo Especialista, Loja adiciona a Venda à coleção
(log) de vendas completadas
Controlador
fazerPagto(valor)
Criador, baixo acoplamento
:TV
2: addVenda(s)
s :Venda
1.1: create(valor)
:Loja
Especialista
1: fazerPagto(valor)
:Pagto
2.1: add(s)
vendaCompletada: Venda
© Nabor C. Mendonça 2001
9
Diagrama de Interação — fazerPagamento()
Calculando troco
–
Pelo Especialista, Venda e Pagamento podem
calcular troco
–
Considerando Baixo Acoplamento, Venda é a melhor
escolha
Sale--balance()
{ return valor - tot al}
troco := troco(valor)
:Venda
1: total := total()
© Nabor C. Mendonça 2001
10
Visibilidade entre Objetos
Capacidade de um objeto “ver” ou ter uma
referência para outro objeto
–
Necessária para comunicação (envio de mensagens)
entre objetos
Quatro maneiras de um objeto B ser visível a um
objeto A
–
Visibilidade de atributo — B é um atributo de A
–
Visibilidade de parâmetro — B é um parâmetro de
um método de A
–
Visibilidade local — B é declarado como objeto local
de um método de A
–
Visibilidade global — B é de algum modo visível
globalmente
© Nabor C. Mendonça 2001
11
Visibilidade de Atributo
Existe de A para B quando B é um atributo de A
–
Permanente: persiste enquanto A e B existirem
class TV
entrarItem(upc, qte)
{
:TV
...
private ProductCatalog prodCatalog;
...
2: spec := especificacao(upc)
}
prodCatalog : ProductCatalog
TV--entrarItem(upc, qte)
{
...
spec = prodCatalog.especificacao(upc)
...
}
© Nabor C. Mendonça 2001
12
Visibilidade de Parâmetro
Existe de A para B quando B é passado como um
parâmetro para um método de A
–
Temporária: persiste apenas dentro do escopo do
método de A
1: [nova venda] create()
entrarItem(upc, qty)
:TV
3: criarLinhaVenda(spec, qte)
:Venda
2: spec := especificacao(upc)
3.1: create(spec, qte)
:Product
Catalog
sl : SalesLineItem
Sale--makeLineItem(ProductSpecification spec, int qty)
{
...
sl = new SalesLineItem(spec, qty);
...
}
© Nabor C. Mendonça 2001
SalesLineItem--SalesLineItem(ProductSpecification spec, int qty)
{
...
productSpec = spec; // parameter to attribute visibility
...
}
13
Visibilidade Local
Existe de A para B quando B é declarado como um
objeto local dentro de um método de A
–
–
Temporária: persiste apenas dentro do escopo do
método de A
Duas maneiras comuns de alcançar
1. Criar nova instância e atribuir para variável local
2. Atribuir objeto de retorno de um método para variável local
entrarItem(upc, qte)
:TV
1: [nova venda] create()
3: criarLinhaVenda(spec, qte)
:Venda
2: spec := especificacao(upc)
:Product
Catalog
© Nabor C. Mendonça 2001
TV--entrarItem(upc, qte)
{
...
// local visibility via assignment of returning object
ProductSpecification spec = prodCatalog.especificacao(upc);
...
}
14
Visibilidade Global
Existe de A para B quando B é global para A
–
Permanente: persiste enquanto A e B existirem
–
Forma menos comum de visibilidade em sistemas OO
© Nabor C. Mendonça 2001
15
Notação de Visibilidade na UML
Uso opcional de “estereótipos” específicos
«association» é usado
para visibilidade de atributo
1: msg()
:A
«association»
2: msg()
«parameter»
3: msg()
«local»
:B
:C
:D
4: msg()
«global»
© Nabor C. Mendonça 2001
:E
16
Diagramas de Classe
Um diagrama de classe especifica as classes de
software do sistema
Inclui
–
–
–
–
–
–
Classes, relacionamentos e atributos
Classe Fachada (métodos: operações do sistema)
Métodos
Informação sobre o tipo (classe) dos atributos
Navegabilidade (visibilidade de atributos)
Dependências (os outros tipos de visibilidade)
UML não diferencia modelo conceitual de diagrama
de classe (o termo “classe de implementação” ou
“classe de software” é usado para distinguir o
segundo do primeiro)
© Nabor C. Mendonça 2001
17
Diagrama de Classe
Diagrama parcial para as classes TV e Venda no
sistema TV
Três seções para
definição de classe
Navegabilidade
Sale
TV
Registra
1
1
date
isComplete : Boolean
time
entrarItem(upc, qte))
criarLinhaVenda(spec, qte)
Método
Tipo de atributo
Obs: métodos new() são implícitos
© Nabor C. Mendonça 2001
18
Como Fazer um Diagrama de Classe
Regras úteis
1. Identificar todas as classes participando na solução
proposta pelos diagramas de interação
Muitas classes são derivadas de conceitos ou entidades
2. Desenhe as classes num diagrama de classe
3. Inclua os atributos identificados no modelo
conceitual, para cada conceito
4. Adicione métodos tal como identificados nos
diagramas de interação
5. Adicione os tipos dos atributos e métodos (funções)
6. Adicione os relacionamentos necessários à
visibilidade de atributos
© Nabor C. Mendonça 2001
19
Como Fazer um Diagrama de Classe
Regras úteis (cont.)
7. Adicione setas de navegabilidade para indicar a
direção da visibilidade de atributos
8. Adicione relacionamentos de dependência (linhas
pontilhadas, dirigidas) para indicar outros tipos de
visibilidade
© Nabor C. Mendonça 2001
20
Modelo de Conceitual X Diagrama de Classe
Modelo conceitual: abstração de conceitos do
mundo real
Diagrama de classe: especificação de
componentes de software
Venda
Modelo Conceitual
TV
Registra
1
date
isComplete : Boolean
time
1
Conceito
Diagrama de Classe
TV
Venda
date
isComplete : Boolean
time
Registra
encerrarVenda()
entrarItem()
fazerPagto()
1
1
criarLinhaVenda()
Componente de software
© Nabor C. Mendonça 2001
21
Criando o Diagrama de Classe do Sistema TV
Identificando classes e atributos
TV
CatalogoProduto
quantidade
Loja
endereco
nome
Venda
data
isComplete
tempo
EspecificacaoProduto
descricao
preco
UPC
LinhaVenda
quantidade
Pagamento
valor
© Nabor C. Mendonça 2001
22
Criando o Diagrama de Classe do Sistema TV
Adicionando nomes dos métodos que aparecem
nos diagramas de colaboração
TV
encerrarVenda()
entrarItem()
fazerPagto()
Loja
endereco
nome
CatalogoProduto
especificacao()
EspecificacaoProduto
descricao
preco
upc
especificacao()
Venda
data
isComplete
tempo
LinhaVenda
quantidade
subtotal()
adicionarVenda()
ehCompleta()
criarLinhaVenda()
fazerPagto()
total() troco()
© Nabor C. Mendonça 2001
Pagamento
valor
23
Criando o Diagrama de Classe do Sistema TV
Métodos create
–
–
Métodos Observer e Mutator
–
–
Métodos de instanciação (construtores) específicos
para cada linguagem de programação
Métodos new() são normalmente omitidos
get e set, respectivamente
Omitidos (2N métodos desinteressantes para os N
atributos)
Métodos de coleção (multiobjects)
–
–
Parte da definição de coleção (classes de biblioteca
do tipo container: Vetor, Hashtable, etc.)
Omitidos (nos diagramas de colaboração, ajudam a
clarear as operações de sistema)
© Nabor C. Mendonça 2001
24
Criando o Diagrama de Classe do Sistema TV
Definindo os tipos dos atributos
TV
CatalogoProduto
encerrarVenda()
entrarItem(upc : Integer, qte : Integer)
fazerPagamento(valor : Real)
especificacao(upc: Integer) : EspecificacaoProduto
Loja
endereco : Endereco
nome : Text
EspecificacaoProduto
Venda
descricao : Text
preco : Real
upc : UPC
LinhaVenda
data : Date
isComplete : Boolean
tempo : Time
quantidade : Integer
subtotal() : Real
adicionarVenda(s : Venda)
ehCompleta()
criarLinhaVenda(spec : EspecificacaoProduto , qte : Integer)
fazerPagto(valor : Real)
total() : Real
Tipo de retorno do método
© Nabor C. Mendonça 2001
Pagamento
valor : Real
void; não retorna valor
25
Criando o Diagrama de Classe do Sistema TV
Adicionando relacionamentos, navegabilidade e
dependências
Store
1
Uses
1
address : Address
name : Text
1
ProductSpecification
ProductCatalog
addSale()
Contains
1
Looks-in
1
1.. *
1
description : Text
price : Quantity
upc : UPC
specification()
Houses
1
1
Sale
POST
Logs-completed4
1
*
date : Date
isComplete : Boolean
time : Time
Registers
endSale()
enterItem()
makePayment()
1
Describes
1
becomeComplete()
makeLineItem()
makePayment()
total()
*
SalesLineItem
Contains
1
quantity : Integer
1..*
subtotal()
1
Payment
Paid-by
amount : Quantity
1
© Nabor C. Mendonça 2001
26
Preparando-se Para A Mini-prova #7
Desenhe os diagramas de colaboração das
operações de seu sistema
Anote os métodos
Anote as visibilidades
Com os métodos, as visibilidades e o modelo
conceitual do seu sistema, construa o diagrama de
classes do mesmo
© Nabor C. Mendonça 2001
27