Java de los fundamentos al dominio — Lección 3
Diseño de objetos, encapsulación y valores inmutables
Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.
Un objeto une estados y comportamientos relacionados dentro de un único límite. La encapsulación no se trata de ocultar campos incondicionalmente, sino de poner reglas en una clase para que solo se puedan crear estados válidos.
Creando un objeto válido con un constructor.
public final class Player {
private final String name;
private int health;
public Player(String name, int health) {
if (name == null || name.isBlank()) {
throw new IllegalArgumentException("name is required");
}
this.name = name;
this.health = Math.max(0, health);
}
public void takeDamage(int amount) {
if (amount > 0) {
health = Math.max(0, health - amount);
}
}
public int getHealth() {
return health;
}
}
El exterior no puede cambiar la salud directamente; sólo lo cambia mediante una regla llamada takeDamage. Un objeto cuyo constructor se ha completado satisface la condición de que su nombre y estado sean válidos.
Las referencias pueden apuntar al mismo objeto.
Player first = new Player("Rose", 100);
Player second = first;
second.takeDamage(20);
System.out.println(first.getHealth()); // 80
En el segundo, no se copió el objeto, pero sí la referencia que apunta al mismo Jugador. Si se requieren copias independientes, debe diseñar explícitamente qué campos se copiarán.
Creando valores inmutables
public final class ItemKey {
private final int id;
private final String grade;
public ItemKey(int id, String grade) {
this.id = id;
this.grade = grade;
}
}
Si convierte un campo en final y no proporciona un método de cambio, su estado no cambiará después de la creación. Sin embargo, si el campo es una colección mutable, debería considerar la posibilidad de realizar copias defensivas o vistas de solo lectura.
El objetivo del diseño de objetos no es crear tanto captadores como definidores. Quién puede cambiar el Estado y qué condiciones deben mantenerse siempre se expresan a través de los métodos públicos de la clase.