En este capítulo hablaremos del concepto de encapsulamiento y ocultamiento de información, fundamentos críticos en la programación orientada a objetos, ya que promueven un diseño de software más seguro y mantenible.
Por un lado, encapsular, agrupar datos y comportamiento en un mismo lugar, y por otro ocultar, no dejar visibles los detalles internos y además controlar el acceso.
Veremos cómo estos conceptos ayudan a proteger los datos y a estructurar el código de una manera más lógica y robusta.
# ¿Qué es el Encapsulamiento?
El encapsulamiento es uno de los cuatro principios fundamentales de la programación orientada a objetos.
Se refiere a la práctica de agrupar los datos (atributos) y los métodos que operan sobre esos datos en una única entidad, o clase, y restringir el acceso a ciertos componentes de esa clase.
Esto no solo protege los datos de un acceso indebido, sino que también hace el código más fácil de mantener y entender.
# Ocultamiento de Información
Ocultar información está fuertemente ligado al encapsulamiento. Se trata de esconder los detalles internos del funcionamiento de una clase y exponer solo lo que es necesario para el resto del programa.
Esto significa que los usuarios de una clase no necesitan entender su complejidad interna para poder usarla.
# Modificadores de Acceso
En la mayoría de los lenguajes, incluyendo Java, existen modificadores de acceso, para establecer el nivel de acceso a las clases, constructores, métodos y variables. Los más comunes son:
-
private: El miembro solo es accesible dentro de la misma clase.
-
public: El miembro es accesible desde cualquier clase.
-
protected: El miembro es accesible dentro de su propia clase, en clases del mismo paquete, y en subclases.
-
Sin modificador (default): El miembro es accesible solo dentro de su propio paquete.
# Getters y Setter
Los getters y setters son métodos que permiten leer y modificar, respectivamente, el valor de los atributos privados de una clase.
Estos son un ejemplo clásico de encapsulamiento y ocultamiento de información:
-
Getters: Métodos que retornan el valor de un atributo.
-
Setters: Métodos que establecen o actualizan el valor de un atributo.
# Ejemplo
Refactorizar una clase para aplicar principios de encapsulamiento.
Tenemos la clase “CuentaBancaria†que no usa encapsulamiento:
public class CuentaBancaria {
public String titular;
public double saldo;
public void depositar(double cantidad) {
saldo += cantidad;
}
public void retirar(double cantidad) {
saldo -= cantidad;
}
}
Desde cualquier lugar se puede acceder directamente a los atributos titular o saldo.
CuentaBancaria miCuenta = new CuentaBancaria();
miCuenta.titular = "Juan Perez";
Refactorizamos esta clase para aplicar el encapsulamiento:
public class CuentaBancaria {
// Atributos privados
private String titular;
private double saldo;
// Constructor
public CuentaBancaria(String titular, double saldoInicial) {
this.titular = titular;
this.saldo = saldoInicial;
}
// Getters y Setters
public String getTitular() {
return titular;
}
public void setTitular(String titular) {
this.titular = titular;
}
public double getSaldo() {
return saldo;
}
// Métodos para depositar y retirar
public void depositar(double cantidad) {
if (cantidad > 0) {
saldo += cantidad;
}
}
public void retirar(double cantidad) {
if (cantidad <= saldo) {
saldo -= cantidad;
}
}
}
En esta versión, los atributos titular y saldo son privados, lo que significa que no pueden ser modificados directamente desde fuera de la clase. En su lugar, se utilizan los métodos getters y setters para acceder y modificar estos valores, permitiendo la validación y el control sobre cómo y cuándo se accede a los datos.
CuentaBancaria miCuenta = new CuentaBancaria();
miCuenta.setTitular("Juan Perez");
# Conclusiones
El encapsulamiento y el ocultamiento de información son conceptos clave en la programación orientada a objetos, ayudan a proteger los datos y a hacer un código más seguro, organizado y mantenible.
Al usar modificadores de acceso, getters y setters, se puede controlar cómo se accede y se modifica el estado interno de un objetos, lo que lleva a aplicaciones más robustas y fiables.
A medida que continúes tu camino en la programación, te darás cuenta de que el encapsulamiento no es solo una técnica, sino una filosofía, que guía un diseño de software sólido y efectivo.