Programación D - Encapsulación

Todos los programas D 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 - Es 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 datos y funciones que manipulan los datos juntos, 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.

D 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, protegido y publicmiembros. De forma predeterminada, todos los elementos definidos en una clase son privados. Por ejemplo

class Box { 
   public: 
      double getVolume() { 
         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. Es ideal mantener la mayor cantidad posible de detalles de cada clase ocultos de todas las demás clases.

Encapsulación de datos en D

Cualquier programa D 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:

Ejemplo

import std.stdio;
  
class Adder { 
   public: 
      // constructor 
      this(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; 
}
 
void main( ) { 
   Adder a = new Adder(); 
   
   a.addNum(10); 
   a.addNum(20); 
   a.addNum(30);  
   writeln("Total ",a.getTotal()); 
}

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 getTotalson las interfaces con el mundo exterior y un usuario debe conocerlas para usar la clase. El total de miembros privados es algo que está oculto al mundo exterior, pero es necesario para que la clase funcione correctamente.

Estrategia de diseño de clases en D

La mayoría de nosotros hemos aprendido a través de una amarga experiencia a hacer que los miembros de la clase sean privados por defecto a menos que realmente necesitemos exponerlos. Eso es simplemente buenoencapsulation.

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