Visibilidade e Encapsulamento Professor: Ricardo Luis dos Santos IFSUL 2016
Agenda Pacotes Visibilidade Encapsulamento Hands-On 2
Pacotes 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 4
Pacotes Podemos utilizar diversos packages em uma classe para isso devemos simplesmente importa-los A sintaxe para a importação já é conhecida 5
VISIBILIDADE 6
Visibilidade 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 Como impedir esse tipo de problema? 8
Visibilidade 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 9
Visibilidade Em Java, possuímos quatro modificadores de acesso public protected private friendly ou default 10
Visibilidade 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 11
Visibilidade 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) 12
Visibilidade 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 13
Visibilidade 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 14
ENCAPSULAMENTO 15
Encapsulamento 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) 16
Encapsulamento 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 17
Encapsulamento 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 18
Encapsulamento 19
Encapsulamento 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 20
Encapsulamento Isso funcionaria? 21
Encapsulamento Se não funciona como deveríamos fazer para funcionar? 22
Encapsulamento 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 23
Encapsulamento 24
Encapsulamento 25
Encapsulamento 26
Hands-On 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 Escreva a classe Funcionário com as seguintes definições: 28 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 aula
Hands-On 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