análise e projeto orientados a objetos: visibilidade ...ines/cursos/proj-si/materiais/... ·...
TRANSCRIPT
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