Saltar al contenido principal

Encapsulación

El encapsulamiento es uno de los principios fundamentales de la programación orientada a objetos (POO) y se refiere al concepto de ocultar los detalles internos de una clase y exponer solo lo necesario. A través del encapsulamiento, los datos y los métodos de una clase están protegidos y el acceso a ellos se controla de manera controlada, proporcionando así seguridad e integridad a los datos.

Existen tres niveles principales de acceso:

  • Público (public): Cualquier objeto de cualquier clase puede acceder al atributo o método.
  • Protegido (protected): Solo los objetos de esa clase o de clases descendientes de ella pueden acceder al atributo o método.
  • Privado (private): Solo el propio objeto puede acceder al atributo o método.

El encapsulamiento es la manera que tiene una clase de mantener sus datos seguros, de manera que no se modifiquen y contengan datos incoherentes. Por ejemplo, la clase Persona podría tener un atributo DNI. El DNI no puede ser una cadena de caracteres cualquiera; si este atributo fuera público, quien instancia y utiliza el objeto podría escribir valores incorrectos en él, por ejemplo Hola Pepe o 1Ae$39. Al no serlo, la clase no permite que se escriba directamente en él, sino que lo hará a través de un método que comprobará que el formato y la letra correspondientes son los adecuados antes de actualizar el valor.

Los métodos getter y setter permiten acceder y modificar atributos privados de manera controlada:

  • Getter: Devuelve el valor de un atributo privado.
  • Setter: Permite establecer o modificar el valor de un atributo privado, generalmente con un control de validación.

Las ventajas del encapsulamiento son:

  • Seguridad: Al ocultar los detalles internos, la clase protege los datos de modificaciones accidentales o malintencionadas desde fuera de la clase.
  • Integridad de los Datos: Los métodos setter pueden incluir validaciones para garantizar que los datos se establezcan de manera coherente.
  • Facilidad de mantenimiento: Los detalles internos de la implementación pueden modificarse sin afectar el código externo que utiliza la clase.
  • Modularidad: Mejora la organización del código, ya que cada clase tiene un control claro sobre sus propios datos y métodos.