Entendendo Encapsulamento(encapsulation)

É muito comum, no meio Java, ouvirmos a palavra Encapsulamento. Mas muitos devem ouvir e depois se perguntar – O que é isso?. Em resumo seria a técnica de transformar os objetos que compõem uma aplicação em verdadeiras caixas-pretas. Não entendeu? Calma, vamos aos poucos..Como um exemplo, fora do contexto da informática, pode ser citado uma dona de casa que usa uma máquina de lavar roupa. Para ela, não há a menor necessidade de entender como funciona o mecanismo da máquina, ela só precisa saber ligar e desligar a máquina. Se algum dia for um técnico na casa dela, e trocar um motor por um melhor, ela vai continuar ligando e delsigando a máquina exatamente da mesma maneira que fazia antes. É exatamente essa a idéia do Encapsulamento.

Agora, entrando para o cotexto da informática, e mais precisamente para o Java, vamos imaginar o seguinte método na classe Calculos:

public double calculaMediaFinalAluno(int nota1, int nota2){
//aqui viria o algoritmo com os cálculos.
return media;
}

Para o programador que não gerencia essa Classe, pouco importa quais seriam os cálculos feitos pelo método calculaMediaFinalAluno(), ele só teria que saber que, passando as notas 1 e 2, ele teria o retorno de um número double.

O Encapsulamento, possui também a função de proteger os atributos de uma instância de um acesso direto, ou seja, permite o acesso apenas por modificadores de acesso mais restritivos sobre os atributos definidos na classe.

Dois exemplos retirados da Wikipédia que demonstram claramente:

Sem Encapsulamento:

class NaoEncapsulado {
//implicitamentamente há modificador, mas não é o mais restritivo
int semProtecao;
}

public class TesteNaoEncapsulado {
public static void main(String[] args) {
NaoEncapsulado ne = new NaoEncapsulado(); //ne é uma instância de NaoEncapsulado
ne.semProtecao = 10; //acesso direto ao atributo
System.out.println("Valor sem proteção: " + ne.semProtecao); //acesso direto aos atributos ou nao estupor
}
}

Com Encapsulamento:

class Encapsulado {
//private é um modificador de acesso de restrição máxima
private int comProtecao;

public void setComProtecao(int comProtecao) {
this.comProtecao = comProtecao;
}

public int getComProtecao() {
return this.comProtecao;
}
}

public class TesteEncapsulado {
public static void main(String[] args) {
Encapsulado e = new Encapsulado(); //"e" é uma instância de Encapsulado

//acesso direto a um atributo protegido implicará em erro de compilação
e.comProtecao = 10;

//deve-se acessar o atributos de forma indireta, encapsulada
e.setComProtecao(10);
System.out.println("Valor com proteção: " + e.getComProtecao());
}
}

This entry was posted in Conceitos and tagged , . Bookmark the permalink.

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

*

Pode usar estas etiquetas HTML e atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>