Análise e Projeto Orientados a Objetos: Visibilidade ...ines/cursos/proj-si/materiais/... ·...

Preview:

Citation preview

Análise e Projeto Orientados a Objetos:Visibilidade

Diagrama de Classe de Projeto

UNIVERSIDADE ESTADUAL PAULISTAINSTITUTO DE BIOCIÊNCIAS, LETRAS E CIÊNCIAS EXATASDEPARTAMENTO DE CIÊNCIAS DE COMPUTAÇÃO E ESTATÍSTICA

1

Diagrama de Classe de Projeto

Visibilidade entre Objetos

2

Visibilidade entre Objetos� Habilidade de um objeto poder “ver” ou ter

referência para outro objeto.� Quando se cria um projeto de objetos que

interagem entre si, é preciso assegurar que a

3

interagem entre si, é preciso assegurar que a visibilidade necessária esteja presente.� Emissor da mensagem deve ter algum tipo de

referência ou ponteiro para o objeto receptor.� Visibilidade está relacionada com escopo: um

recurso (uma instância) está dentro do escopo de outro?

Visibilidade� Para um objeto A enviar uma mensagem a

um objeto B, B deve ser visível para A.� Tipos de visibilidade

� Por atributo: B é um atributo de A

4

� Por atributo: B é um atributo de A� Por Parâmetro: B é um parâmetro de um método

de A� Localmente declarada: B é declarado como um

objeto local em um método de A� Global: B é, de alguma forma, globalmente visível.

Notação de Visibilidade em UML - Estereótipos

:msg()A B

<<associação>>

<<associação>> é usada

para visibilidade de atributo

5

:msg()A B

<<global>>

:msg()A B

<<local>>

:msg()A B

<<parâmetro>>

Visibilidade por atributo

� A-> B => B é atributo de A� Persiste por muito tempo� É a forma mais comum

6

� É a forma mais comum� Geralmente se deve às associações

existentes no modelo conceitual.� Ex. TPV tem catálogo de produtos

como um atributo (prodCatálogo) para poder enviar mensagens ao Catálogo de Produtos.

:TPV

entrarItem(upc,qtd)

2:espec:=especificação(cup)

Class TPV {...

Private CatálogodeProdutos prodCatálogo;

... }

Ex de Visibilidade por atributo

7

2:espec:=especificação(cup)

prodCatálogo:Catálo

deProdutos

TPV – entrarItem(upc,qtd)

{ ...

espec = prodCatálogo.especificação(cup)

...}

Visibilidade por atributo (Sistema Biblioteca)

� Ex: Empréstimo tem um atributo leitor para poder enviar mensagens ao Leitorque efetuou o empréstimo

8

que efetuou o empréstimo

Exemplo

9

Visibilidade por parâmetro� A-> B => B é passado como um

parâmetro para um método de A� É relativamente temporária, persiste

enquanto persistir o método.

10

enquanto persistir o método.

:TPV

entrarItem(cup,qtd)

:Venda3:criarLinhadeItem(espec,qtd)()

espec é passada como parâmetro para que a

venda tenha visibilidade para uma

especificação de produto.

Da visibilidade de parâmetros para visibilidade de atributos

� É comum a visibilidade por parâmetro criar uma visibilidade por atributo

entrarItem(cup,qtd)

11

LinhadeItemdeVenda(Especificacao

Produto espec, int qtd)

{ ...

especdeProd = espec;

...}

:TPV :Venda3:criarLinhadeItem(espec,qtd)()

Lv:LinhadeItemdeVenda

3.1 Criar(espec,qtd)

construtor

Visibilidade localmente declarada

� Visibilidade local de A para B existe quando B é declarado como um objeto local dentro de um método de A.

� Visibilidade local: relativamente

12

� Visibilidade local: relativamente temporária (persiste somente dentro do escopo do método)

� Meios para obtê-la:� Atribuir o objeto retornado pela invocação

de um método a uma variável local.� Criar uma nova instância local e atribuí-la

a uma variável local

:TPV

entrarItem(cup,qtd)

:Venda

1:[nova_venda] criar()

3:criarLinhadeItem(espec,qtd)

2:espec:=especificação(cup)

13

2:espec:=especificação(cup)

:Catálogode

Produtos TPV – entrarItem(cup,qtd)

{ //obj. de retorno para um

//objeto local

EspecificaçãodeProduto

espec = prodCatálogo.

especificação(cup)

TPV tem visibilidade local

para uma especificação de

produto espec

Visibilidade Global

� A->B existe quando B é global para A.� Menos comum� Relativamente permanente (persiste

14

� Relativamente permanente (persiste enquanto A ou B existirem)

� Forma óbvia e menos desejável: atribuir uma instância de objeto a uma variável global.

Diagrama de Classes de Projeto

15

Projeto

RefinarPlano

Sincronizarartefatos

Analisar Projetar Construir Testar

16

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

� O Diagrama de Classes de Projeto apresenta especificações para classes de software e interfaces de uma aplicação.

� As informações típicas são as seguintes:

Definição

17

� As informações típicas são as seguintes:� classes, associações e atributos� interfaces, com suas operações e constantes� métodos� tipos de atributos� navegabilidade� dependências

Definição (cont.)� Modelo Conceitual ⇒ abstrações de

conceitos, ou objetos, do mundo real.� Conceitos são também chamados de classes

conceituais.

18

� Diagrama de Classes de Projeto ⇒ definição de classes como componentes de software� Entidades de software

Definição (cont.)� Na prática, o Diagrama de Classes pode ser

construído à medida que a fase de projeto avança, a partir dos diagramas de comunicação.

19

� Cada classe que aparece no diagrama de comunicação automaticamente é incluída no diagrama de classes do projeto.

� Os atributos são inicialmente, os que estão no modelo conceitual

Como Criar os Diag. 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.

20

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 Proj.

21

incluídas no Diagrama de Classe de Proj.� 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, Venda, EspecificaçãodeProduto, LinhadeItemdeVenda.

TPV CatálogodeProdutos

quantidade

EspecificaçãodeProdutodescrição

preço

CUP

Loja Venda LinhadeItemdeVenda

22

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 recebem a mensagem.

23

recebem a mensagem.� Linguagens de programação distintas podem

ter sintaxes distintas para métodos� Recomendável: usar sintaxe básica UML

nomeMétodo(Par1, Par2, ..., Parn)

Inclusão de métodos

Vendadata

estáCompleta

hora

criarLinhadeItem()

24

: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

25

métodos devem ser implementados pela classe Coleção)

Mensagem para um multobjeto

:TPV

entrarItem(cup,qtd)

2:espec:=especificação(cup)

26

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 (linguagem OO provê o

criador – construtor)

27

criador – construtor)� Métodos de acesso a atributos, por

exemplo, setNome, getNome, etc -> assume-se que a classe fornece método de acesso para cada atributo.

Acrescentando os demais métodos em Venda....

Venda

data

28

data

estáCompleta

hora

criarLinhadeItem()

tornarseCompleta()

efetuarPagamento()

total()

Atributos� Pode-se acrescentar tipos de atributos,

parâmetros e retorno de métodos, observando os diagramas de comunicação.

� Atributos identificados durante o projeto podem ser incluídos.

29

podem ser incluídos.� Se uma ferramenta CASE for utilizada para

geração automática de código, os tipos detalhados serão necessários.

� Se o diagrama for usado exclusivamente por desenvolvedores de software, o excesso de informação pode “poluir” o diagrama e dificultar seu entendimento.

Atributos

� Observação:� Embora uma visibilidade por atributo

venha a ser implementada posteriormente

30

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

31

hora: Time

criarLinhadeItem()

tornarseCompleta()

efetuarPagamento()

total()

Associações e Navegabilidade

� Associações e navegabilidade entre classes de projeto são indicadas pelos diagramas de comunicação� Navegabilidade indica possibilidade de navegação

32

� Navegabilidade indica possibilidade de navegação unidirecional por meio de uma associação entre classes� Geralmente implica visibilidade por atributos

� A multiplicidade e os nomes das associações são retirados do Modelo Conceitual

� Notação: seta contínua.

Associações e Navegabilidade

� Indícios de associações e presença de navegabilidade:� A envia mensagem para B

33

� A envia mensagem para B� A cria B� A precisa manter uma conexão com B

Como determinar a navegabilidade?

� Verificar o envio de mensagens de objetos que possuem visibilidade por atributo.

34

atributo.� Desenhar a seta no sentido da classe

que envia a mensagem para a classe que recebe a mensagem.

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)

35

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()

36

:linhadeItemde

Venda

1.1:criar()

Este diagrama de colaboração implica nas

navegabilidades:

TPV → Venda

Venda → LinhadeItemdeVenda

Diagrama de Classe com navegabilidade

Venda

data: Date

estáCompleta: Boolean

TPV1

captura

37

estáCompleta: Boolean

hora: Time

criarLinhadeItem()

tornarseCompleta()

efetuarPagamento()

total()

terminarVenda()

entrarItem()

registrarPagame

nto()

1

Observar que a navegabilidade é

independente do sentido de leitura

da associação.

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

38

� Visibilidade por parâmetro� Visibilidade local ou global

� Um objeto de uma classe A tem conhecimento (enxerga) um objeto da classe B

� Notação: seta tracejada

Exemplo: Dependência

Venda EspecificaçãodeProduto

39

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

40

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

Alguns detalhes de notação para métodos e atributos - UML

Nome da Classe

atributo

atributo:tipo

atributo:tipo = valor inicial

/atributoDerivado, ...

41

método1()

método2(lista par.):tipo ret.

métodoAbstrato()

+métodoPúblico()

-métodoPrivado()

#métodoProtegido()

Sistema TPV: atributos privados e métodos públicos

Venda

data: Date

estáCompleta: Boolean

42

estáCompleta: Boolean

hora: Time

+criarLinhadeItem()

+tornarseCompleta()

+efetuarPagamento()

+total()

43