La encapsulación es uno de los principios clave de la programación orientada a objetos (OOP), que surgió de la necesidad de agrupar datos con funciones que procesan esos datos y ocultar los detalles de implementación al usuario.
Desde la aparición de OOP, la encapsulación ha tenido como objetivo aumentar la confiabilidad de los programas, reducir errores y mejorar la mantenibilidad del código. En C++, se implementa mediante la ocultación de datos y la provisión de una interfaz para interactuar con el objeto.
Sin encapsulación, los datos internos y los detalles de implementación de la clase son accesibles para modificación desde cualquier parte del programa. Esto conduce a errores, dificultades al realizar cambios y mala gestionabilidad del código.
La encapsulación en C++ se logra mediante modificadores de acceso (private, protected, public) en las clases. Los datos internos de la clase se declaran como private o protected, y el acceso a ellos se realiza a través de métodos públicos (getters y setters).
Ejemplo de código:
class Account { private: double balance; public: Account(double initial) : balance(initial) {} double getBalance() const { return balance; } void deposit(double amount) { if (amount > 0) balance += amount; } };
Características clave:
¿Puede un miembro protected ser accesible desde cualquier lugar del programa donde hay un objeto de la clase?
No, los miembros protected solo son accesibles desde los métodos de la propia clase, amigos y clases derivadas, pero no desde otras clases ni a través de un objeto desde afuera.
¿Puede un miembro público de la clase ser "encapsulado"?
No, los miembros públicos no se encapsulan, su función es proporcionar una interfaz externa. A veces, los miembros públicos excesivamente abiertos violan el principio de encapsulación.
¿Agrega el modificador private seguridad al código en tiempo de ejecución?
No, los modificadores de acceso funcionan solo a nivel de compilación y no previenen el acceso a los datos en el archivo ejecutable, pero limitan los errores de diseño.
El desarrollador hizo todas las variables de la clase públicas por la "facilidad de la lógica de negocio".
Pros:
Contras:
Los datos se declaran como privados, la interacción se realiza a través de getters/setters con validación obligatoria.
Pros:
Contras: