Encapsulamento em Orientação a Objetos
-
Upload
daniel-brandao -
Category
Education
-
view
579 -
download
0
Transcript of Encapsulamento em Orientação a Objetos
Metodologia e Linguagem de Programação 1
Encapsulamento
Encapsulamento - Definição
• Encapsular seria o mesmo que esconder todos os membros de umaclasse, além de esconder como funcionam as rotinas (no caso métodos) do nosso sistema. Seria uma espécie de proteção.
• Encapsular é fundamental para que seu sistema seja suscetível a mudanças: não precisaremos mudar uma regra de negócio em vários lugares, mas sim em apenas um único lugar, já que essa regra está encapsulada.
Metodologia e Linguagem de Programação 4
Encapsulamento - Definição
• Para protegermos os atributos e métodos, por tanto, podemos mudar seus modificadores. O principal deles é o modificador private que faz com que ninguém consiga modificar, nem mesmo ler, o atributo em questão.
• No exemplo a seguir, temos uma classe chamada Funcionário com um atributo do tipo Double chamado salário:
Metodologia e Linguagem de Programação 5
class Funcionario {
double salario ;}
Encapsulamento - Definição
• No exemplo, o atributo salario pode ser acessado ou modificado por código escrito em qualquer classe queesteja no mesmo diretório que a classe Funcionario. Portanto, o controle desse atributo é descentralizado.
• Como fazer para proteger o acesso a este atributo para que ele não seja alterado por qualquer classe?
Metodologia e Linguagem de Programação 6
Encapsulamento - Definição
• Podemos fazê-lo incluindo o modificador Private no atributo. Exemplo:
Metodologia e Linguagem de Programação 7
class Funcionario {
private double salario ;
void aumentaSalario ( double aumento ) {
// lógica para aumentar o salário
}}
Encapsulamento - Definição
• Um atributo privado só pode ser acessado ou alterado por código escrito dentro da classe na qual ele foi definido. Se algum código fora da classe Funcionário tentar acessar ou alterar o valor do atributo privado salario, um erro de compilação será gerado.
• Por isso, apenas um método pertencente a própria classe podem alterar o valor deste atributo. O intuito é ter sempre um controle centralizado do dados dos objetos para facilitar a manutenção do sistema e a detecção de erros.
Metodologia e Linguagem de Programação 8
Encapsulamento
Basicamente, usamos quatro tipos de encapsulamento que são divididos em dois níveis:
• Nível de classe ou topo: Quando determinamos o acesso de uma classe inteira que pode ser public ou package-private (padrão);
• Nível de membro: Quando determinamos o acesso de atributos ou métodos de uma classe que podem serpublic, private, protected ou package-private (padrão).
Metodologia e Linguagem de Programação 9
Encapsulamento
• Public: O modificador public deixará visível a classe ou membro para todas as outras classes, subclasses e pacotes do projeto Java.
• Private: O modificador private deixará visível o atributo apenas para a classe em que este atributo se encontra.
• Protected: O modificador protected deixará visível o atributo para todas as outras classes e subclasses que pertencem ao mesmo pacote. A principal diferença é que apenas as classes do mesmo pacote tem acesso ao membro. O pacote da subclasse não tem acesso ao membro.
• Sem Modificador (Padrão ou Default): Por padrão, a linguagem Java permite acesso aos membros apenas ao pacote em que ele se encontra.
Metodologia e Linguagem de Programação 10
Métodos Privados
• O papel de alguns métodos pode ser o de auxiliar outros métodos da mesma classe. E muitas vezes, não é correto chamar esses métodos auxiliares de fora da sua classe diretamente.
• No próximo exemplo, temos o método descontaTarifa() como um método auxiliar dos métodos deposita()e saca(). Além disso, ele não deve ser chamado diretamente, pois a tarifa só deve ser descontada quando ocorre um depósito ou um saque. Exemplo:
Metodologia e Linguagem de Programação 11
Exemplo:
Metodologia e Linguagem de Programação 12
class Conta {
private double saldo ;
void deposita ( double valor ) {
this.saldo += valor ;
this.descontaTarifa ();
}
void saca ( double valor ) {
this.saldo -= valor ;
this.descontaTarifa ();
}
// Método privado para que não seja alterado fora da classe
private void descontaTarifa () {
this.saldo -= 0.1;
}
}
Métodos Públicos
• Para que um método seja visível em outras classes, é necessário que ele seja do tipo Public. Do contrário, seu modificador será o padrão (default), que permite que ele seja visível apenas dentro do próprio pacote de criação.
• Os pacotes em Java são os responsáveis pela organização do projeto e pela proteção de parte do código em restrições específicas. Exemplo:
Metodologia e Linguagem de Programação 13
Exemplo:
Metodologia e Linguagem de Programação 14
class Conta {
private double saldo ;
// Método público
public void deposita ( double valor ) {
this.saldo += valor ;
this.descontaTarifa ();
}
// Método público
public void saca ( double valor ) {
this.saldo -= valor ;
this.descontaTarifa ();
}
// Método privado
private void descontaTarifa () {
this.saldo -= 0.1;
}
}
MAS... Por quê encapsular?
Metodologia e Linguagem de Programação 15
MAS... Por quê encapsular?
• Uma das ideias mais importantes da orientação a objetos é o encapsulamento. Encapsular significa esconder a Implementação dos objetos. O encapsulamento favorece principalmente dois aspectos de um sistema: a manutenção e o desenvolvimento.
Metodologia e Linguagem de Programação 16
MAS... Por quê encapsular?
• A manutenção é favorecida pois, uma vez aplicado o encapsulamento, quando o funcionamento de um objeto deve ser alterado, em geral, basta modificar a classe do mesmo.
• O desenvolvimento é favorecido pois, uma vez aplicado o encapsulamento, conseguimos determinar precisamente as responsabilidades de cada classe da aplicação.
• O conceito de encapsulamento pode ser identificado em diversos exemplos do cotidiano.
Metodologia e Linguagem de Programação 17
MAS... E se tudo for encapsulado?
• Se todos os atributos forem do tipo Private, teremos um acesso a esses atributos exclusivamente por Métodos. Exemplo:
Metodologia e Linguagem de Programação 18
class Cliente {
private String nome ;
public String consultaNome () {
return this . nome ;
}}
MAS... E se tudo for encapsulado?
• Da mesma forma, eventualmente, é necessário modificar o valor de um atributo a partir de qualquer lugar do sistema. Nesse caso, também poderíamos criar um método para essa tarefa. Exemplo:
Metodologia e Linguagem de Programação 19
class Cliente {
private String nome ;
public void alteraNome (String nome) {
return this . nome = nome ;
}}
Exercício 1
• Crie um projeto no Eclipse chamado Encapsulamento.
• Defina uma classe para representar os funcionários do banco com um atributo para guardar os salários e outro para os nomes.
• Crie uma classe Teste, testando a classe Funcionario, criando um objeto e manipulando diretamente os seus atributos.
Metodologia e Linguagem de Programação 20
Exercício 2
• Modifique a classe anterior (Funcionario), utilizando osconceitos de encapsulamento (tornando os atributosprivados). Depois, tente compilar a classe teste e observe oresultado.
Metodologia e Linguagem de Programação 21
Exercício 3
• Crie métodos de acesso com nomes padronizados para osatributos definidos na classe Funcionario (gets e sets).
• Altere a classe Teste também para que ela utilize os métodos de acesso ao invés de manipular os atributos do objeto da classe Funcionario diretamente.
Metodologia e Linguagem de Programação 22
Exercício 4
• Crie um método chamado Aumenta Salário dentro da classeFuncionário, que deverá receber um valor e somar ao valordo salário. Teste o mesmo dentro da classe Teste.
Metodologia e Linguagem de Programação 23
Exercício 5
• Crie um método chamado Descontos dentro da classeFuncionário, que deverá subtrair de salario os descontos(tipo INSS) do valor do salário. Teste o mesmo dentro daclasse Teste.
Metodologia e Linguagem de Programação 24