Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense© 2016 Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
Campus Sapucaia do Sul
Visibilidade e EncapsulamentoProfessor: Ricardo Luis dos Santos
IFSUL – Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• Pacotes
• Visibilidade
• Encapsulamento
• Hands-On
2
Agenda
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• Em Java, a visibilidade ou grau de acesso a um determinado atributo ou método está intimamente ligado ao conceito de pacote (package)
• A identificação de um package corresponde à hierarquia de diretórios na qual a classe está inserida
• Observar que o package é utilizado para mapear os diretórios e devem ser separados por ponto “.”
• Observar para que os nomes dos diretórios sejam válidos em todas as plataformas
3
Pacotes
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense4
Pacotes
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• Podemos utilizar diversos packages em uma classe para isso devemos simplesmente importa-los
• A sintaxe para a importação já é conhecida
5
Pacotes
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
VISIBILIDADE
6Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• A visibilidade e seus modificadores de acesso definem quais classes podem usar ou ter acesso a um determinado elemento
• Tais elementos podem ser
• Uma classe
• Atributos de uma classe (variáveis)
• Os métodos de uma classe
7
Visibilidade
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense8
Visibilidade
Campus Sapucaia do Sul
Como impedir esse
tipo de problema?
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense9
Visibilidade
Campus Sapucaia do Sul
• A melhor solução para isto é “forçar” quem utiliza a classe Conta a chamar os métodos corretos e não permitir acesso aos atributos da classe
• Quem chama o método não deve saber como os métodos são executados, apenas o que eles fazem
• Podemos definir métodos que não podem ser utilizados e nem vistos fora da classe
• Sempre deves expor o mínimo possível de funcionalidades, para criar um baixo acoplamento entre as classes
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense10
Visibilidade
Campus Sapucaia do Sul
• Em Java, possuímos quatro modificadores de acesso
• public
• protected
• private
• “friendly” ou “default”
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense11
Visibilidade
Campus Sapucaia do Sul
• public
• A classe pode ser instanciada por qualquer outra classe
• Atributos e métodos são acessíveis (leitura, escrita) por objetos de qualquer classe
• private
• Não se aplica a classes
• Atributos só podem ser acessados por objetos da mesma classe
• Métodos só podem ser chamados por métodos da própria classe
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense12
Visibilidade
Campus Sapucaia do Sul
• protected
• Não se aplica a classes
• Atributos e métodos são acessíveis dentro da própria classe, das subclasses e das classes que façam parte do mesmo pacote
• Nada especificado
• Classe é visível somente por classes do mesmo pacote
• Atributos e métodos são acessíveis somente dentro das classes que pertencem ao mesmo pacote.
• Este modo de acesso é também chamado de default(friendly) (amigável)
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense13
Visibilidade
Campus Sapucaia do Sul
• Onde podemos aplicar os modificadores de acesso?
Modificador Símbolo Classe Atributos Métodos
public + sim sim sim
protected # não sim sim
default ~ sim sim sim
private - não sim sim
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense14
Visibilidade
Campus Sapucaia do Sul
• Grau de visibilidade (quem pode utilizar) os elementos anotados com os modificadores de acesso?
Modificador Classe Package Subclasse* Global**
public sim sim sim sim
protected sim sim sim não
default sim sim não não
private sim não não não
* Subclasse contida em outro package** Acesso por classes de outros projetos ou sistemas
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
ENCAPSULAMENTO
15Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense16
Encapsulamento
Campus Sapucaia do Sul
• Encapsulamento é um dos conceitos fundamentais da programação orientada a objetos
• Encapsulamento (information hiding) é o que se faz quando se restringe o acesso aos dados (atributos) de uma classe ou aos detalhes internos da implementação (métodos)
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense17
Encapsulamento
Campus Sapucaia do Sul
• A ideia é fazer da classe uma cápsula, onde seus atributos só poderão ser acessados por determinados métodos
• Técnica de encapsulamento – Pode-se alcançar o encapsulamento de dados configurando as classes da seguinte forma:
• Atributos PRIVATE (Dados encapsulados)
• Métodos PUBLIC
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense18
Encapsulamento
Campus Sapucaia do Sul
• Pra que encapsular?
• Para reduzir o acoplamento e assim
• Facilitar alterações na aplicação
• Uma determinada regra de negócio só precisa ser alterada em um único lugar
• Facilitar o aprendizado, pois o mínimo de funcionalidades são expostas tornando o processo menos complexo
• Incrementar o reuso de código
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense19
Encapsulamento
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense20
Encapsulamento
Campus Sapucaia do Sul
• Principais benefícios
• Proteção dos atributos da classe de acessos indevidos ou acidentais
• Possibilidade de definir regras para alteração dos valores mantidos pelos atributos
• Possibilidade de limitar as operações e alterações realizadas pelos elementos que estão acessando a classe
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense21
Encapsulamento
Campus Sapucaia do Sul
Isso funcionaria?
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense22
Encapsulamento
Campus Sapucaia do Sul
Se não funciona
como deveríamos
fazer para funcionar?
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense23
Encapsulamento
Campus Sapucaia do Sul
• Como acessamos os atributos?
• MÉTODOS GET E SET
• São métodos definidos para cada atributo da classe (quando necessário)
• Método get é utilizado para recuperar o valor mantido por um atributo
• Método set é utilizado para alterar o valor mantido por um atributo
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense24
Encapsulamento
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense25
Encapsulamento
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense26
Encapsulamento
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• Escreva a classe Departamento com as seguintes definições:
• Dois atributos:
• codigo (Integer): não pode receber valores menores que zero
• nome (String): não pode receber valores nulos ou string vazia
• Métodos de acesso aos atributos (get / set)
• Um construtor que receba valores para todos os atributos da classe
• Um método public String toString( ) que retorna todos os dados do departamento em um formato string
• OBS: Usar a técnica de encapsulamento aprendida em aula
27
Hands-On
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• Escreva a classe Funcionário com as seguintes definições:
• Três atributos:
• matricula (inteiro): não pode receber valores menores que zero
• nome (String): não pode receber valores nulos ou string vazia
• depto (utilize a classe Departamento implementada anteriormente): não pode receber valores nulos
• Métodos de acesso aos atributos (get / set)
• Um construtor que receba valores para todos os atributos
• Um método string toString( ) que retorna todos os dados do funcionário em um formato string.
• OBS: Usar a técnica de encapsulamento aprendida em aula28
Hands-On
Campus Sapucaia do Sul
Instituto Federal de Educação, Ciência e Tecnologia Sul-Rio-Grandense
• Implementar uma aplicação (uma outra classe com o método main) que cria 02 objetos do tipo Departamento e 10 objetos do tipo Funcionario, a partir de dados fornecidos pelo usuário e, ao final, imprime os valores dos atributos dos objetos criados
• Crie a UML (diagrama de classes) para as classes desse exercício
29
Hands-On
Campus Sapucaia do Sul