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
getyset. - 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.