Encapsulación de datos en C ++

Todos los programas de C ++ se componen de los siguientes dos elementos fundamentales:

  • Program statements (code) - Esta es la parte de un programa que realiza acciones y se llaman funciones.

  • Program data - Los datos son la información del programa que se ve afectada por las funciones del programa.

La encapsulación es un concepto de programación orientada a objetos que une los datos y las funciones que manipulan los datos, y que los mantiene a salvo de interferencias externas y uso indebido. La encapsulación de datos llevó al importante concepto de programación orientada a objetos dedata hiding.

Data encapsulation es un mecanismo para agrupar los datos y las funciones que los utilizan y data abstraction es un mecanismo para exponer solo las interfaces y ocultar los detalles de implementación al usuario.

C ++ admite las propiedades de encapsulación y ocultación de datos mediante la creación de tipos definidos por el usuario, llamados classes. Ya hemos estudiado que una clase puede contenerprivate, protected y publicmiembros. De forma predeterminada, todos los elementos definidos en una clase son privados. Por ejemplo

class Box {
   public:
      double getVolume(void) {
         return length * breadth * height;
      }

   private:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

Las variables longitud, anchura y altura son private. Esto significa que solo pueden acceder a ellos otros miembros de la clase Box, y no cualquier otra parte de su programa. Esta es una forma de lograr la encapsulación.

Para hacer partes de una clase public (es decir, accesibles a otras partes de su programa), debe declararlas después de la publicpalabra clave. Todas las variables o funciones definidas después del especificador público son accesibles por todas las demás funciones en su programa.

Hacer una clase amiga de otra expone los detalles de implementación y reduce la encapsulación. Lo ideal es mantener la mayor cantidad posible de detalles de cada clase ocultos a las demás clases.

Ejemplo de encapsulación de datos

Cualquier programa C ++ en el que implemente una clase con miembros públicos y privados es un ejemplo de encapsulación y abstracción de datos. Considere el siguiente ejemplo:

#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
   
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:

Total 60

La clase anterior suma números y devuelve la suma. Los miembros públicosaddNum y getTotal son las interfaces con el mundo exterior y un usuario debe conocerlas para usar la clase. El miembro privadototal es algo que está oculto al mundo exterior, pero es necesario para que la clase funcione correctamente.

Estrategia de diseño

La mayoría de nosotros hemos aprendido a hacer que los miembros de la clase sean privados de forma predeterminada a menos que realmente necesitemos exponerlos. Eso es simplemente buenoencapsulation.

Esto se aplica con mayor frecuencia a los miembros de datos, pero se aplica por igual a todos los miembros, incluidas las funciones virtuales.