O encapsulamento é um dos conceitos fundamentais da programação orientada a objetos, que consiste em esconder a implementação interna de uma classe e fornecer uma interface externa para que outros objetos possam interagir com objetos desta classe de forma controlada.
O encapsulamento propõe programar em partes, o mais isolado possível, encapsulando-as. Este princípio ajuda a garantir a integridade dos dados e a modularidade do código em um sistema orientado a objetos.
O encapsulamento reforça a coesão da classe, tornando o software mais flexível, fácil de modificar e evoluir.
O encapsulamento é um conceito que está presente em diversos níveis em um projeto OO, porém, é popularmente utilizado para definir algumas práticas específicas na construção de uma classe.
O encapsulamento tem o objetivo de proteger o acesso indevido dos atributos e métodos de seus objetos.
Na prática, para haver encapsulamento as classes devem proteger as suas informações e comportamentos:
Devem possuir proteção no acesso a seus atributos e métodos;
Devem esconder os valores de seus atributos, deixando-os disponíveis/acessíveis apenas através de seus métodos.
Assim, um objeto de uma classe é uma entidade com fronteira e identidade bem definidas, que encapsulam o estado e comportamento.
Os objetos podem se comunicar entre si, mas eles em geral não sabem como outros objetos são implementados. Os detalhes de implementação permanecem ocultos dentro dos próprios objetos. Esse ocultamento de informações é crucial à boa engenharia de software.
Isso significa que um objeto deve ser responsável por seu próprio estado interno e oferecer métodos públicos para que outros objetos possam interagir com ele. Esses métodos podem ser usados para acessar ou modificar o estado interno do objeto, mas apenas dentro dos limites definidos por sua implementação.
Pensando no mundo real, os objetos também possuem essa proteção. (Ex.: interfaces de objetos reais: livro, fechadura etc)
O encapsulamento permite que o objeto tenha um controle mais preciso sobre seu próprio estado, tornando-o mais seguro e confiável.
Além disso, o encapsulamento permite que a implementação interna do objeto seja alterada sem afetar outros objetos que interagem com ele, desde que sua interface pública permaneça inalterada.
Para promover o encapsulamento, utilizamos métodos get e set para todo atributo que precisa ser acessado externamente à classe (também podem ser usados internamente).
Definimos todo atributo com o modificador de acesso privado (private) - ou o mais privado possível considerando seu sistema.
Definimos todo método com o modificador de acesso adequado ao nível de acesso que desejamos.
Para encapsular um método, devemos utilizar o modificador de acesso mais restritivo possível para a solução quando desejamos que as outras classes não tenham acesso ao método.
Ou seja, os métodos devem ser públicos, caso desejamos que todas as classes do sistema os acessem.
Um método set é um método sem retorno (void) e com parâmetros que alteram o valor de um ou mais atributos.
Sintaxe:
public void setParametro(Tipo_parametro parametro){
parametro = valor;
}
Um método get é um método sem lista de parâmetros de entrada e com tipo de retorno definido que devolve o valor de determinado atributo.
Sintaxe:
public tipo_parametro getParametro(){
return parametro;
}
DICA: A maioria das IDEs tem opções para geração automática de métodos get e set.
Arquivo Triangulo.java
public class Triangulo {
//acesso de todos os atributos declarados como PRIVADO
private double area, base, altura;
//métodos get e set PÚBLICOS
public double getAltura() {
return altura;
}
public void setAltura(double altura) {
this.altura = altura;
}
public double getBase() {
return base;
}
public void setBase(double base) {
this.base = base;
}
public double getArea() {
return area;
}
public void setArea(double area) {
this.area = area;
}
// método para cálculo da área do triangulo via base e altura
public double calcularArea() {
if (base > 0 && altura > 0) {
area = base * altura / 2;
return area;
} else {
System.out.println("Os valores de base e altura devem ser maiores do que 0 para o cálculo da área.");
}
}
}
Arquivo Main.java
class Main {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
Triangulo[] triangulos = new Triangulo[3];
for (int i = 0; i < triangulos.length; i++) {
Triangulo t = new Triangulo();
System.out.println("Informe um valor de BASE para o triângulo " + i + ":");
t.setBase(entrada.nextDouble());
System.out.println("Informe um valor de ALTURA para o triângulo " + i + ":");
t.setAltura(entrada.nextDouble());
triangulos[i] = t;
}
for (int i = 0; i < triangulos.length; i++) {
System.out.println("A área do triângulo " + i + " é " + triangulos[i].calcularArea());
}
entrada.close();
}
}
Voltar para Aulas