Visibilidade

Introdução
- Mensagens entre objetos só podem ocorrer se o receptor for visível ao remetente
- Há quatro formas básicas de visibilidade
- Visibilidade de atributos
- Visibilidade de parâmetros
- Visibilidade declarada localmente
- Visibilidade global
Visibilidade de atributos
- No estudo de caso, para que TPDV possa enviar uma mensagem a CatálogoDeProdutos, usa-se
um atributo em TPDV

public class TPDV {
private CatálogoDeProdutos catálogo;
...
}
Visibilidade de parâmetros
- Um objeto tem visibilidade para outro se este for recebido como parâmetro
- No estudo de caso, para criar uma linha de detalhe de venda, TPDV chama criaLinhaDetalhe
de Venda, passando a especificação do produto
- Assim, Venda tem visibilidade para a especificação de produto

- A visibilidade de parâmetro frequentemente é convertida para visibilidade de atributo
- Exemplo: LinhaDetalheVenda recebe a especificação de produto como parâmetro no
construtor e a especificação é armazenada como atributo de LinhaDetalheVenda

Visibilidade declarada localmente
- Um objeto é visível a partir de uma variável local de um método
- Pode inicializar a variável local com um novo objeto, receber como valor de retorno de
alguma chamada, etc.
- Exemplo do estudo de caso:

Visibilidade global
- Um objeto global é visível a todos
- Não uma boa forma de ter visibilidade
- Se for obrigado a ter objetos globais, é melhor usar o padrão de projeto Singleton
(GoF)
Visibilidade em UML
- Uso de Stereotypes
- Não é usado em diagramas, normalmente

Visibilidade em Java
- public para definir acesso a métodos públicos
- Que fazem parte da interface ao objeto para quem vai chamá-lo
- Não usa para atributos
- private para acesso estritamente privado ao objeto (na
realidade à classe)
- protected para definir acesso a métodos ou atributos que
devem ficar disponíveis para quem estende a classe (acessível a subclasses)
- "package" (sem modificador) para acesso quase
público a todas as classes do package
- Semelhante a friend de C++
- usar com cuidado
proj1-7 programa anterior
próxima