Getters y Setters de C++
Esta guía trivial primero presentará brevemente el concepto de encapsulación y ocultación de datos en la programación orientada a objetos. Luego pasaremos al uso de getters y setters en C++.
¿Qué es la encapsulación?
La encapsulación es el concepto de unir todas las cosas relevantes. Una clase en C++ puede combinar todos los datos relacionados en una sola cápsula.
Por ejemplo, supongamos que tenemos un objeto o entidad Rectángulo
con algunos atributos y propiedades. Podemos combinar todos sus atributos y propiedades en una sola clase.
Por lo tanto, se sabe que la encapsulación combina datos y métodos relacionados en una sola clase. A menudo se confunde con el concepto de ocultación de datos.
La ocultación de datos es el concepto de que los atributos que pertenecen a una clase no deben ser accesibles para todos los que están fuera de la clase. Esto se debe a que viola la seguridad de los datos.
Si los miembros de datos de una clase se hacen privados, cualquier usuario fuera de la clase no puede acceder a ellos y, por lo tanto, podemos lograr la seguridad de los datos.
Al hacer esto, aunque no podemos establecer el valor ni obtener el valor de los miembros de datos desde fuera de la clase, podemos crear métodos que se pueden usar para acceder a los miembros, y estos métodos aseguran que algunos datos no deseados no se coloquen en los miembros de datos.
Dichos métodos para establecer u obtener el valor de los miembros de datos se llaman getters
y setters
.
Getters y Setters en C++
Esta es una buena práctica de programación para hacer que los miembros de datos de una clase sean privados para que los datos no válidos no se puedan asignar a los miembros de datos de la clase. Con esto, puede realizar comprobaciones de los datos que llegan a los miembros de datos antes de almacenarlos en los miembros de datos.
Por ejemplo, tenemos una clase, Shape
. El atributo de longitud de cualquier forma nunca puede ser negativo.
Por lo tanto, al establecer el valor de longitud, comprobaremos si el valor proporcionado es mayor que cero o no.
Del mismo modo, si tenemos una clase Employee
, que tiene un atributo de salary
. Este atributo no tiene un valor negativo ni positivo muy grande.
Por lo tanto, se debe colocar un validador antes de establecer el valor de salary
. Veamos el ejemplo a continuación.
class Emp {
private:
int empSalary;
public:
void setEmpSalary(int sal) {
if (sal > 0 and sal < 10000000) empSalary = sal;
}
int getEmpSalary() { return empSalary; }
};
En este fragmento de código, tenemos el miembro de datos salary
, que es privado para lograr la ocultación de datos. Además, hemos proporcionado un getter y setter para este miembro de datos para que el valor se pueda establecer y recuperar cuando sea necesario.
En la función de establecimiento, también creamos una verificación para controlar el valor no válido ingresado en el miembro de datos salary
. Así es como se crean setters y getters para cualquier miembro de datos que necesite.
Veamos el código completo del ejemplo anterior.
#include <iostream>
#include <string>
using namespace std;
class Emp {
private:
int empSalary;
string empName;
public:
Emp(string n, int s) {
setEmpName(n);
setEmpSalary(s);
}
void setEmpName(string s) { empName = s; }
string getEmpName() { return empName; }
void setEmpSalary(int sal) {
if (sal > 0 and sal < 10000000) empSalary = sal;
}
int getEmpSalary() { return empSalary; }
};
int main() {
Emp e("John", 50000);
cout << "Name: " << e.getEmpName() << endl;
cout << "Salary: " << e.getEmpSalary() << endl;
}
Producción :
Name: John
Salary: 50000
Conclusión
La adición de métodos getter y setter a la interfaz de clase es fundamental. Debido a que las variables miembro de una clase se declararán privadas, los usuarios de su clase necesitarán una forma de recuperar y establecer sus valores.
Debido a que los métodos setter pueden incluir código de validación de datos para garantizar que las variables miembro se establezcan en valores legítimos, las funciones getter y setter permiten este acceso de forma segura.
Por supuesto, hay momentos en los que no desea ofrecer getter, setter o ambos métodos para todas las variables miembro de una clase. Las variables miembro de solo lectura son variables que se pueden obtener pero no modificar.
Un ejemplo de ello pueden ser algunos miembros de datos estáticos, o puede haber algunos miembros de datos de solo lectura; para tales miembros, necesitamos una función getter pero no una función setter.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn