Skip to content

Getters, Setters y Encapsulamiento en Java

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

java
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

java
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

En algunos casos, es útil definir atributos que no puedan ser modificados después de la inicialización. Esto se logra omitiendo el setter.

Ejemplo de Inmutabilidad

java
public class Producto {
    private final String nombre;
    private final double precio;

    public Producto(String nombre, double precio) {
        this.nombre = nombre;
        this.precio = precio;
    }

    public String getNombre() {
        return nombre;
    }

    public double getPrecio() {
        return precio;
    }
}

public class Main {
    public static void main(String[] args) {
        Producto producto = new Producto("Laptop", 999.99);
        System.out.println("Producto: " + producto.getNombre());
        System.out.println("Precio: " + producto.getPrecio());
    }
}

Buenas Prácticas con Getters, Setters y Encapsulamiento

  1. Privacidad de los atributos: Declara los atributos como private.
  2. Validaciones: Implementa validaciones en los setters para asegurar valores consistentes.
  3. Uso de inmutabilidad: Define atributos como final cuando no necesiten cambiar después de ser inicializados.
  4. Nombres descriptivos: Usa nombres claros y consistentes para los métodos, siguiendo la convención de get y set.

Conclusión

El encapsulamiento, junto con los getters y setters, proporciona un control total sobre cómo se accede y modifica el estado de un objeto. Adoptar estas prácticas mejora la seguridad, la claridad y la mantenibilidad del código en proyectos de cualquier escala.