Introducción
Crear clases personalizadas es uno de los pilares fundamentales de la programación orientada a objetos. En este capítulo aprenderás cómo definir clases, proteger sus atributos y aplicar buenas prácticas de encapsulamiento.
Definición de una Clase
Una clase es una plantilla que describe la estructura y el comportamiento de los objetos. Contiene atributos (datos) y métodos (funciones).
// Definición de una clase personalizada
public class Alumno {
private String nombre;
private int edad;
// Constructor
public Alumno(String nombre, int edad) {
this.nombre = nombre;
this.edad = edad;
}
// Getter
public String getNombre() {
return nombre;
}
// Setter con validación
public void setNombre(String nombre) {
if (nombre != null && !nombre.isEmpty()) {
this.nombre = nombre;
}
}
// Getter
public int getEdad() {
return edad;
}
// Setter con validación
public void setEdad(int edad) {
if (edad >= 0) {
this.edad = edad;
}
}
// Método personalizado
public void saludar() {
System.out.println("Hola, soy " + nombre + " y tengo " + edad + " años.");
}
}
// Uso de la clase Alumno
Alumno a = new Alumno("Ana", 20);
a.saludar();
a.setEdad(25);
System.out.println(a.getEdad());
Encapsulamiento
Encapsulamiento significa proteger los datos de una clase haciendo los atributos privados y accediendo a ellos solo a través de getters y setters. Esto te permite:
- Controlar cómo se modifica la información
- Agregar validaciones
- Mantener la integridad del código
Buenas Prácticas
- Siempre haz los atributos
private - Usa getters y setters para acceder y modificar
- Añade validaciones en los setters
- Usa constructores para inicializar objetos
- Crea métodos personalizados con propósito claro
Malas Prácticas Comunes
- Hacer todos los atributos
public - No validar datos en los setters
- Crear clases sin propósito claro
- Tener demasiada lógica en una sola clase
Ejemplo Práctico
Si estás construyendo un sistema de gestión de usuarios, puedes crear una clase Usuario con validación:
public class Usuario {
private String nombreUsuario;
private String email;
public Usuario(String nombreUsuario, String email) {
this.nombreUsuario = nombreUsuario;
this.email = email;
}
public void setEmail(String email) {
if (email.contains("@")) {
this.email = email;
} else {
System.out.println("Email inválido");
}
}
}
Conclusión
El encapsulamiento es esencial para escribir código seguro y mantenible. Al proteger tus datos y validar cambios, aseguras que tus objetos mantengan su integridad.
En el próximo capítulo, exploraremos herencia y cómo reutilizar código entre clases relacionadas.