Upload
internet
View
102
Download
0
Embed Size (px)
Citation preview
© Nabor C. Mendonça 2001 1
Projeto – Parte II
- Exemplos de Diagrama de Colaboração
- Visibilidade entre Objetos
- Diagrama de Classe
© Nabor C. Mendonça 2001 2
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():TVentrarItem()
:TVterminarVenda()
:TVfazerPagto()
1: ???()
1: ???()
1: ???()
:POSTstartUp() 1: ???()
© Nabor C. Mendonça 2001 3
Criando uma nova Venda– Pelo Criador, TV cria Venda, e Venda cria uma
coleção (vazia) para registrar objetos Item-de-Venda
Diagrama de Colaboração — entrarItem()
1: [nova venda] create()entrarItem(upc, qte):TV :Venda
:LinhaDeVenda
1.1: create()
Controlador Criador
Criador
Uma coleção vazia
© Nabor C. Mendonça 2001 4
Criando um novo Item-de-Venda– Pelo padrão Criador, Venda cria objetos Item-de-
Venda– 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
Diagrama de Colaboração — entrarItem()
© Nabor C. Mendonça 2001 5
Diagrama de colaboração final
Diagrama de Colaboração — entrarItem()
2: [nova venda] create()
2.1: [velha venda]criarLV(spec, qte)entrarItem(upc, qte)
1: spec := especificacao(upc) 2.2: create(spec, qty)
1.1: spec := find(upc)
:TV :Venda
:CatalogoProduto
sl: LinhaDeVenda
:LinhaDeVenda:EspecificacaoProduto
2.3: add(sl)
Criador
Especialista
Mensagem à coleção (container)
de objetos EP
© Nabor C. Mendonça 2001 6
Definindo atributo Venda.completada
Diagrama de Colaboração — encerrarVenda()
:POSTendSale() :Sale1: becomeComplete()
by Expertby Controller
becomeComplete(){ isComplete := true}
Observe como corpos de método (pseudo-código) podem ser definidos
© Nabor C. Mendonça 2001 7
Calculando total da venda
Diagrama de Colaboração — encerrarVenda()
:Vendatot := total() 2*: [i:=1..N] st := subtotal() sli:LinhaDeVenda
specprod:EspecificacaoProduto
2.1: pr := price()
Especialistaby Expert
SalesLineItem--subtotal(){
return quantity * prodSpec.price()}
Sale--total(){ tot := 0
for each SalesLineItem, sli tot := tot + sli.subtotal()
return tot}
SalesLineItem:LinhaDeVenda
1*: [i:=1..N] sli := next()
Atenção: a mensagem total() não é operação de sistema
© Nabor C. Mendonça 2001 8
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
Diagrama de Colaboração — fazerPagamento()
1: fazerPagto(valor)
1.1: create(valor)
:TV :Venda
:Pagto
fazerPagto(valor)
Controlador Criador, baixo acoplamento
© Nabor C. Mendonça 2001 9
Registrando a Venda– Pelo Especialista, Loja adiciona a Venda à coleção
(log) de vendas completadas
Diagrama de Interação — fazerPagamento()
2: addVenda(s)
2.1: add(s)
:Loja
vendaCompletada: Venda
Especialista
1: fazerPagto(valor)
1.1: create(valor)
:TV s :Venda
:Pagto
fazerPagto(valor)
Controlador Criador, baixo acoplamento
© Nabor C. Mendonça 2001 10
Calculando troco– Pelo Especialista, Venda e Pagamento podem
calcular troco
– Considerando Baixo Acoplamento, Venda é a melhor escolha
Diagrama de Interação — fazerPagamento()
:Vendatroco := troco(valor)
Sale--balance(){ return valor - tot al}
1: total := total()
© Nabor C. Mendonça 2001 11
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 12
Visibilidade de Atributo
Existe de A para B quando B é um atributo de A– Permanente: persiste enquanto A e B existirem
entrarItem(upc, qte)
2: spec := especificacao(upc)
:TV
prodCatalog : ProductCatalog
TV--entrarItem(upc, qte){ ... spec = prodCatalog.especificacao(upc) ...}
class TV{ ... private ProductCatalog prodCatalog; ...}
© Nabor C. Mendonça 2001 13
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 A1: [nova venda] create()
3: criarLinhaVenda(spec, qte)entrarItem(upc, qty)
2: spec := especificacao(upc)3.1: create(spec, qte)
:TV :Venda
:ProductCatalog
sl : SalesLineItem
Sale--makeLineItem(ProductSpecification spec, int qty){ ... sl = new SalesLineItem(spec, qty); ...}
SalesLineItem--SalesLineItem(ProductSpecification spec, int qty){...productSpec = spec; // parameter to attribute visibility...}
© Nabor C. Mendonça 2001 14
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
1: [nova venda] create()
3: criarLinhaVenda(spec, qte)entrarItem(upc, qte)
2: spec := especificacao(upc)
:TV :Venda
:ProductCatalog
TV--entrarItem(upc, qte){...// local visibility via assignment of returning object
ProductSpecification spec = prodCatalog.especificacao(upc);...}
© Nabor C. Mendonça 2001 15
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 16
Notação de Visibilidade na UML
Uso opcional de “estereótipos” específicos
:A :B1: msg()
:C2: msg()
:D3: msg()
«association»
«parameter»
«local»
:E4: msg()
«global»
«association» é usadopara visibilidade de atributo
© Nabor C. Mendonça 2001 17
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 18
Diagrama de Classe
Diagrama parcial para as classes TV e Venda no sistema TV
TV
entrarItem(upc, qte))
Sale
dateisComplete : Booleantime
criarLinhaVenda(spec, qte)
Registra
Tipo de atributo
NavegabilidadeTrês seções paradefinição de classe
1 1
Método
Obs: métodos new() são implícitos
© Nabor C. Mendonça 2001 19
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 20
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 21
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
TV
encerrarVenda()entrarItem()
fazerPagto()
Venda
dateisComplete : Booleantime
criarLinhaVenda()
Registra
Modelo ConceitualTV
Venda
dateisComplete : Booleantime
Registra
Diagrama de Classe
Conceito
Componente de software
1 1
11
© Nabor C. Mendonça 2001 22
Criando o Diagrama de Classe do Sistema TV
Identificando classes e atributos
TV
Venda
dataisComplete
tempo
LinhaVenda
quantidade
CatalogoProduto
quantidade
EspecificacaoProduto
descricaoprecoUPC
Loja
endereconome
Pagamento
valor
© Nabor C. Mendonça 2001 23
Criando o Diagrama de Classe do Sistema TV
Adicionando nomes dos métodos que aparecem nos diagramas de colaboração
LinhaVenda
quantidade
subtotal()
CatalogoProduto
especificacao()
EspecificacaoProduto
descricaoprecoupc
Loja
endereconome
adicionarVenda()
Pagamento
valor
TV
encerrarVenda()entrarItem()
fazerPagto()
Venda
dataisComplete
tempo
ehCompleta()criarLinhaVenda()
fazerPagto() total() troco()
especificacao()
© Nabor C. Mendonça 2001 24
Criando o Diagrama de Classe do Sistema TV Métodos create
– Métodos de instanciação (construtores) específicos para cada linguagem de programação
– Métodos new() são normalmente omitidos Métodos Observer e Mutator
– 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 25
Criando o Diagrama de Classe do Sistema TV
Definindo os tipos dos atributos
LinhaVenda
quantidade : Integer
subtotal() : Real
CatalogoProduto
especificacao(upc: Integer) : EspecificacaoProduto
EspecificacaoProduto
descricao : Textpreco : Real
upc : UPC
Loja
endereco : Endereconome : Text
adicionarVenda(s : Venda)
Pagamento
valor : Real
TV
encerrarVenda()entrarItem(upc : Integer, qte : Integer)
fazerPagamento(valor : Real)
Venda
data : DateisComplete : Booleantempo : Time
ehCompleta()criarLinhaVenda(spec : EspecificacaoProduto , qte : Integer)
fazerPagto(valor : Real)total() : Real
Tipo de retorno do método void; não retorna valor
© Nabor C. Mendonça 2001 26
Criando o Diagrama de Classe do Sistema TV
Adicionando relacionamentos, navegabilidade e dependências
SalesLineItem
quantity : Integer
subtotal()
ProductCatalog
specification()
ProductSpecification
description : Textprice : Quantityupc : UPC
Store
address : Addressname : Text
addSale()
Payment
amount : Quantity
Contains
1..*
Contains
1..*
POST
endSale()enterItem()makePayment()
Sale
date : DateisComplete : Booleantime : Time
becomeComplete()makeLineItem()makePayment()total()
Registers
Houses
Uses
Looks-in
Paid-by
Describes
1 1
1
1 1
1
11
1
1
1
1
1
*
Logs-completed *
1
© Nabor C. Mendonça 2001 27
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