Publicado en Tema 5 • Principios de la POO

Tema 5 – Ejercicio 2

Encapsulación y validación de datos en la clase Persona

📄 Enunciado

Copia la clase Persona del tema anterior y amplíala con los siguientes requisitos:

  • Establecer todos los atributos como visibles solo desde la propia clase.
  • Intentar modificar el nombre desde la clase Ciudad.
  • Permitir qué los atributos solo sean accesibles mediante getters y setters.
  • Generar los métodos get y set para todos los atributos.
  • Añadir validaciones dentro de los setters.

🧠 Conceptos clave

  • Encapsulacióng> protección de los atributos usando private.
  • Getters y setters: acceso controlado a los datos.
  • Validación: evitar valores incorrectos en los atributos.
  • Reutilización de código: uso de setters dentro de los constructores.

✅ Solución – Clase Persona

package Ejercicios.ejercicio2;

import Humano.Sexo;

public class Persona {

    // Atributos privados
    private String nombre;
    private int edad;
    private float estatura;
    private Sexo sexo;

    // Constructor sin parámetros
    public Persona() {
        this.nombre = "anónimo";
        this.edad = 18;
        this.estatura = 1.70f;
        this.sexo = Sexo.HOMBRE;
    }

    // Constructor con nombre
    public Persona(String nombre) {
        setNombre(nombre);
        this.edad = 18;
        this.estatura = 1.70f;
        this.sexo = Sexo.MUJER;
    }

    // Constructor con todos los parámetros (sin sexo)
    public Persona(String nombre, int edad, float estatura) {
        setNombre(nombre);
        setEdad(edad);
        setEstatura(estatura);
        this.sexo = Sexo.HOMBRE;
    }

    // Constructor con apellido
    public Persona(String nombre, String apellido, int edad, float estatura) {
        this(nombre + " " + apellido, edad, estatura);
    }

    // Constructor con sexo
    public Persona(String nombre, int edad, float estatura, Sexo sexo) {
        setNombre(nombre);
        setEdad(edad);
        setEstatura(estatura);
        setSexo(sexo);
    }

    // GETTERS
    public String getNombre() {
        return nombre;
    }

    public int getEdad() {
        return edad;
    }

    public float getEstatura() {
        return estatura;
    }

    public Sexo getSexo() {
        return sexo;
    }

    // SETTERS con validaciones
    public void setNombre(String nombre) {
        if (nombre != null && nombre.length() > 0) {
            this.nombre = nombre;
        }
    }

    public void setEdad(int edad) {
        if (edad >= 0) {
            this.edad = edad;
        }
    }

    public void setEstatura(float estatura) {
        if (estatura > 0) {
            this.estatura = estatura;
        }
    }

    public void setSexo(Sexo sexo) {
        if (sexo != null) {
            this.sexo = sexo;
        }
    }

    @Override
    public String toString() {
        return "Persona [nombre=" + nombre +
                ", edad=" + edad +
                ", estatura=" + estatura +
                ", sexo=" + sexo + "]";
    }
}

🔍 Explicación detallada

  • Todos los atributos son private, por lo qué no se pueden modificar directamente desde otras clases.
  • El acceso a los datos se realiza exclusivamente mediante métodos get y set.
  • Los setters incluyen validaciones para evitar valores inválidos como nombres vacíos, edades negativas o estaturas incorrectas.
  • Los constructores utilizan los setters para asegurar qué las validaciones se apliqué desde la creación del objeto.

🏁 Conclusión

Este ejercicio demuestra la importancia de la Encapsulación en Java, permitiendo controlar el acceso a los atributos y garantizando la coherencia de los datos mediante validaciones.