© Nabor C. Mendonça 2001 1 Projeto – Parte II - Exemplos de Diagrama de Colaboração -...

27
© Nabor C. Mendonça 2001 1 Projeto – Parte II - Exemplos de Diagrama de Colaboração - Visibilidade entre Objetos - Diagrama de Classe

Transcript of © Nabor C. Mendonça 2001 1 Projeto – Parte II - Exemplos de Diagrama de Colaboração -...

Page 1: © 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 1

Projeto – Parte II

- Exemplos de Diagrama de Colaboração

- Visibilidade entre Objetos

- Diagrama de Classe

Page 2: © 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: ???()

Page 3: © 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 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

Page 4: © 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 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()

Page 5: © 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 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

Page 6: © 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 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

Page 7: © 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 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

Page 8: © 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 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

Page 9: © 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 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

Page 10: © 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 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()

Page 11: © 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 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

Page 12: © 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 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; ...}

Page 13: © 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 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...}

Page 14: © 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 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);...}

Page 15: © 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 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

Page 16: © 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 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

Page 17: © 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 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)

Page 18: © 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 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

Page 19: © 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 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

Page 20: © 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 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

Page 21: © 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 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

Page 22: © 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 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

Page 23: © 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 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()

Page 24: © 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 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)

Page 25: © 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 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

Page 26: © 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 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

Page 27: © 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 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