Encapsulamento


Apesar do nome relativamente esquisito o conceito é simples. Encapsulamento refere-se ao isolamento entre as partes do programa. Uma das principais formas de fazer isso é proibindo o acesso direto as variáveis de um objeto por objetos externos.

Para isso, utilizamos os modificadores de acesso existentes em java. Estes modificadores funcionam da seguinte forma:
  • public: Qualquer objeto pode acessar o membro;
  • default: Qualquer objeto do mesmo pacote pode acessar o membro e subclasses de outros pacotes;
  • protected: O membro é acessível apenas por objetos do mesmo pacote;
  • private: O membro é acessível apenas internamente (próprio objeto);
Exemplo:

class Conta {  
          
    private double salario;  
    private String nome;
 
}

Um atributo privado só pode ser acessado ou alterado por código escrito dentro da classe na qual ele foi definido. Para acessá-los em outras partes do programa, utilizamos os métodos getters e setters.

  • Getters: Método que retorna o atributo.
  • Setters: Método que atribui/modifica o valor de um atributo.
Exemplo:

/* classe que demonstra o uso do get e set, como os atributos são do tipo
 * private, somente poderão ser acessados fora desta classe com o uso destes
 * métodos.
*/

class Conta {           
    private double salario;  
    private String nome;
 
    // Declarando os métodos Get e Set do atributo salario
 
    public double getSalario() {
       return salario;
    }
 
    public void setSalario(double salario) {
       this.salario = salario;
    }

    // Declarando os métodos Get e Set do atributo nome
 
    public String getNome() {
      return nome;
    }

    public void setNome(String nome) {
       this.nome = nome;
    }
}

A seguir, a classe AcessaConta mostra como é feito o acesso aos atributos do tipo private.

class AcessaConta {  
   public static void main(String[] args) {  
  
     Conta c = new Conta();
  
     // Chama o método set dos atributos nome e salario e altera os seus valores
     c.setNome("Oberdan Martins"); 
     c.setSalario(100);
  
     // Chama o método get dos atributos nome e salario e retorna os seus valores
     System.out.println(c.getNome());
     System.out.println(c.getSalario());
  
   }
}

Normalmente, os métodos são public (publicos) e os atributos private (privados), isto ocorre pois nós desejamos que os atributos de um objeto só possam ser alterados por ele mesmo, desta forma nós inviabilizamos situações imprevistas.

Um comentário: