El encapsulamiento es un principio del diseño orientado a objetos que implica ocultar la estructura interna del objeto y proporcionar solo la interfaz pública necesaria.
Historia de la cuestión: Desde el surgimiento de la OOP, una de las tareas clave ha sido proteger el estado interno de los objetos de cambios incorrectos desde el exterior y garantizar un control estricto sobre la lógica.
Problema: Sin encapsulamiento, todos los datos y métodos son accesibles al código externo, lo que conduce a la pérdida de control sobre el estado de los objetos y la aparición de errores difíciles de rastrear.
Solución:
En C++, se utilizan tres especificadores de acceso: private, protected, public. private prohíbe el acceso a los miembros fuera de la clase, protected otorga acceso solo a los herederos, public convierte a los miembros en parte de la interfaz.
Ejemplo de código:
class Stack { private: int *data; int top; public: Stack(); void push(int val); int pop(); };
Características clave:
¿Es verdad que los miembros private no se pueden modificar de ninguna manera desde fuera de la clase?
Falso. Se pueden usar funciones friend, clases friend o métodos inseguros (por ejemplo, a través de conversiones de punteros o mediante comportamiento no definido).
¿En qué orden se aplican los especificadores al heredar (private, protected, public)?
Si la herencia se declara como private, todos los miembros public y protected de la clase base se convierten en miembros private de la clase derivada.
¿Cuáles son las diferencias entre herencia protected y private?
En herencia protected, todos los miembros public y protected de la clase base se convierten en miembros protected de la derivada; en private, todos se convierten en private.
Todos los miembros de la clase se declaran como public, cualquier código externo puede modificar la estructura y violar los invariantes del objeto.
Ventajas:
Desventajas:
Se utilizan solo los métodos public necesarios, los demás datos están cerrados (private), el estado está protegido.
Ventajas:
Desventajas: