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.