Ordenador con código fuente rodeado de infinidad de objetos.

Getters y Setters en Java: métodos para encapsular

Guía de programación en Java > Getters y Setters

Introducción

En la POO, los métodos Getters y Setters desempeñan un papel crucial en la gestión de datos de una clase. Permiten acceder y modificar los atributos privados de una manera controlada y segura, cumpliendo con el principio de encapsulación.

En esta sesión aprenderás:

  • Qué son los Getters y Setters.
  • Por qué son importantes.
  • Cómo implementarlos y utilizarlos en tus programas.

¿Qué son los Getters y Setters?

Getters

Un Getter es un método que se utiliza para obtener el valor de un atributo privado de una clase. Su nombre suele comenzar con la palabra get seguida del nombre del atributo con la primera letra en mayúscula.

Setters

Un Setter es un método que permite establecer o modificar el valor de un atributo privado. Su nombre suele comenzar con set seguido del nombre del atributo con la primera letra en mayúscula.


Razón de ser de los Getters y Setters

  1. Encapsulación: los atributos de una clase se declaran como private para evitar el acceso directo desde fuera de la clase. Esto protege los datos y garantiza que solo se puedan modificar de manera controlada.
  2. Validación: los Setters pueden incluir lógica para validar los valores antes de asignarlos, asegurando que los datos sean correctos.
  3. Mantenibilidad: al usar Getters y Setters, es más fácil realizar el mantenimiento de la clase. Te aseguras poder cambios en la implementación interna de una clase sin afectar a otras partes del código.
  4. Control: los Getters y Setters permiten controlar qué atributos son accesibles y cómo se pueden modificar.

Ejemplo Básico de Getters y Setters

Clase sin Getters ni Setters

class Persona {
    String nombre;
    int edad;
}

public class Main {
    public static void main(String[] args) {
        Persona persona = new Persona();
        persona.nombre = "Juan"; // Acceso directo
        persona.edad = 25; // Acceso directo

        System.out.println("Nombre: " + persona.nombre);
        System.out.println("Edad: " + persona.edad);
    }
}

Problema:

El acceso directo no permite validar o controlar los valores que se asignan. Por ejemplo, podrías asignar una edad negativa, lo cual no tiene sentido.

Clase con Getters y Setters

class Persona {
    private String nombre;
    private int edad;

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

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

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

    // Setter para edad
    public void setEdad(int edad) {
        if (edad >= 0) { // Validación
            this.edad = edad;
        } else {
            System.out.println("La edad no puede ser negativa.");
        }
    }
}

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());
    }
}

Salida:

Nombre: Juan
Edad: 25

En este ejemplo:

  • Se valida que la edad no sea negativa.
  • Los atributos están protegidos y no son accesibles directamente.

Buenas Prácticas

  1. Nombres claros: usa nombres descriptivos para los métodos, siguiendo la convención get y set. Cuando un atributo es de tipo boolean o de la clase Boolean, como prefijo del getter se utiliza is.
  2. Validación en los Setters: asegúrate de incluir lógica para evitar datos inconsistentes.
  3. Haz que los atributos sean private: protege los datos internos de la clase.
  4. Usa Getters y Setters solo cuando sea necesario. Si un atributo no requiere validación o control, considera declararlo como public final si su valor no cambia.

Ejercicio Propuesto

Crea una clase llamada Coche con los siguientes atributos:

  • marca (String)
  • modelo (String)
  • velocidadMaxima (int)

Define los Getters y Setters para cada atributo y asegúrate de que:

  • La velocidad máxima no pueda ser negativa.

Crea una clase Main para probar los métodos. Salida esperada:

Marca: Toyota
Modelo: Corolla
Velocidad Máxima: 180 km/h

Resumen

  • Los Getters y Setters son esenciales para aplicar el principio de encapsulación en POO.
  • Los Getters permiten acceder a los valores de los atributos privados.
  • Los Setters permiten modificar esos valores de manera controlada.

Con estos conceptos, estarás preparado para trabajar con datos de forma segura y eficiente en tus programas. ¡Practica mucho y verás cómo dominarás los Getters y Setters rápidamente! 🚀


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.