El encapsulamiento es un principio clave de la Programación Orientada a Objetos (POO) que consiste en restringir el acceso directo a los datos de un objeto y proporcionar métodos para interactuar con ellos. En Java, los getters y setters son las herramientas principales para implementar este principio.


¿Qué es el Encapsulamiento?

El encapsulamiento es la técnica de ocultar los detalles internos de una clase y permitir el acceso a sus atributos solo a través de métodos definidos. Esto asegura que los datos sean manipulados de manera controlada.

Ventajas del Encapsulamiento

  1. Seguridad: Previene modificaciones no deseadas de los atributos.
  2. Mantenibilidad: Facilita cambios en la implementación interna sin afectar al resto del código.
  3. Flexibilidad: Permite agregar validaciones antes de asignar o devolver valores.

Getters y Setters

Los getters y setters son métodos públicos que permiten leer (get) y modificar (set) los valores de los atributos privados de una clase.

Ejemplo Básico

public class Persona {
    private String nombre;
    private int edad;

    // Getter para el nombre
    public String getNombre() {
        return nombre;
    }

    // Setter para el nombre
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    // Getter para la edad
    public int getEdad() {
        return edad;
    }

    // Setter para la edad con validación
    public void setEdad(int edad) {
        if (edad > 0) {
            this.edad = edad;
        } else {
            System.out.println("La edad debe ser positiva.");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Persona persona = new Persona();
        persona.setNombre("Juan");
        persona.setEdad(25);

        System.out.println("Nombre: " + persona.getNombre());
        System.out.println("Edad: " + persona.getEdad());
    }
}


Encapsulamiento y Validaciones

Los setters permiten incluir validaciones antes de modificar un atributo, asegurando que los valores sean válidos.

Ejemplo con Validaciones

public class CuentaBancaria {
    private double saldo;

    public double getSaldo() {
        return saldo;
    }

    public void depositar(double cantidad) {
        if (cantidad > 0) {
            saldo += cantidad;
        } else {
            System.out.println("La cantidad debe ser positiva.");
        }
    }

    public void retirar(double cantidad) {
        if (cantidad > 0 && cantidad <= saldo) {
            saldo -= cantidad;
        } else {
            System.out.println("Fondos insuficientes o cantidad inválida.");
        }
    }
}

public class Main {
    public static void main(String[] args) {
        CuentaBancaria cuenta = new CuentaBancaria();
        cuenta.depositar(500);
        cuenta.retirar(100);
        System.out.println("Saldo actual: " + cuenta.getSaldo());
    }
}


Propiedades Inmutables