Programación Orientada a Objetos 5 - Encapsulamiento

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.