C++ Encapsulamiento de datos
El encapsulamiento de datos (Data Encapsulation) es un concepto fundamental de la programación orientada a objetos (OOP) que se implementa encapsulando los datos y las funciones que operan sobre ellos dentro de una clase. Este encapsulamiento garantiza la privacidad e integridad de los datos, impidiendo que el código externo acceda a ellos o los modifique directamente.
Todos los programas de C++ tienen los siguientes dos elementos básicos:
- Instrucciones del programa (código):Esta es la parte del programa que realiza acciones; se denominan funciones.
- Datos del programa:Los datos son la información del programa y se ven afectados por las funciones del programa.
El encapsulamiento es un concepto de la programación orientada a objetos que consiste en vincular los datos con las funciones que operan sobre ellos, de modo que se eviten interferencias y malos usos externos, garantizando así la seguridad. El encapsulamiento de datos da lugar a otro importante concepto de OOP, a saber:Ocultamiento de datos。
Encapsulamiento de datoses un mecanismo que agrupa los datos y las funciones que los manipulan,Abstracción de datoses un mecanismo que solo expone la interfaz al usuario y oculta los detalles de implementación específicos.
C++ mediante la creación deClasepara soportar el encapsulamiento y el ocultamiento de datos (public, protected, private). Ya sabemos que las clases contienen miembros privados (private), protegidos (protected) y públicos (public). De forma predeterminada, todos los elementos definidos en una clase son privados. Por ejemplo:
Las variables length, breadth y height son privadas. Esto significa que solo pueden ser accedidas por otros miembros de la clase Box, y no por otras partes del programa. Esta es una forma de implementar el encapsulamiento.
Para que los miembros de la clase sean públicos (es decir, accesibles desde otras partes del programa), debe usarse delante de estos miembrospublicla palabra clave para declararlos. Todas las variables o funciones definidas después del identificador public pueden ser accedidas por todas las demás funciones del programa.
Definir una clase como clase amiga de otra clase expone los detalles de implementación, lo que reduce el encapsulamiento. Lo ideal es ocultar al exterior los detalles de implementación de cada clase tanto como sea posible.
Modificadores de acceso:
- private: Los miembros privados solo pueden ser accedidos dentro de la clase; no pueden ser accedidos directamente por código externo a la clase.
- public: Los miembros públicos pueden ser accedidos directamente por código externo a la clase.
- protected: Los miembros protegidos pueden ser accedidos por la clase y sus clases derivadas.
Ejemplo de encapsulamiento de datos
En un programa de C++, cualquier clase con miembros públicos y privados puede servir como un ejemplo de encapsulamiento y abstracción de datos. Vea el siguiente ejemplo:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
Total 60
La clase anterior suma números y devuelve la suma total. Los miembros públicosaddNumygetTotalson la interfaz pública; los usuarios deben conocerlos para poder usar la clase. Los miembros privadostotalestán ocultos al exterior; el usuario no necesita conocerlos, pero son necesarios para que la clase funcione correctamente.
El encapsulamiento de datos se implementa mediante clases y modificadores de acceso (public, private, protected). A continuación, un ejemplo sencillo:
Ejemplo
using namespace std;
class Student {
private:
string name;
int age;
public:
// Constructor
Student(string studentName, int studentAge) {
name = studentName;
age = studentAge;
}
// Funciones de acceso (getter)
string getName() {
return name;
}
int getAge() {
return age;
}
// Funciones modificadoras (setter)
void setName(string studentName) {
name = studentName;
}
void setAge(int studentAge) {
if (studentAge > 0) {
age = studentAge;
} else {
cout << "Invalid age!" << endl;
}
}
// Imprimir la información del estudiante
void printInfo() {
cout << "Name: " << name << ", Age: " << age << endl;
}
};
int main() {
// Crear un objeto Student
Student student1("Alice", 20);
// Acceder y modificar datos
student1.printInfo();
student1.setName("Bob");
student1.setAge(22);
student1.printInfo();
return 0;
}
Estrategia de diseño
En general, establecemos el estado de los miembros de la clase como privado (private), a menos que realmente necesitemos exponerlos, para garantizar un buenencapsulamiento.。
Esto se aplica normalmente a los miembros de datos, pero es igualmente aplicable a todos los miembros, incluidas las funciones virtuales.
Ventajas del encapsulamiento de datos
- Ocultamiento de datos: Al declarar los miembros de datos como privados, se impide que el código externo acceda directamente a estos datos.
- Mejora de la mantenibilidad del código: Proporcionar métodos públicos para acceder y modificar los datos, lo que permite modificar la implementación interna de la clase sin afectar el código externo.
- Mayor seguridad: Evita entradas de datos ilegales y operaciones de modificación indebidas.
- Implementación de la abstracción: Proporciona un mecanismo que permite que el usuario no necesite conocer los detalles internos de la clase, sino solo saber cómo utilizar la interfaz pública de la misma.