Programação D - Encapsulamento

Todos os programas D são compostos dos seguintes dois elementos fundamentais -

  • Program statements (code) - Esta é a parte de um programa que executa ações e são chamadas de funções.

  • Program data - São as informações do programa que são afetadas pelas funções do programa.

Encapsulamento é um conceito de Programação Orientada a Objetos que vincula dados e funções que manipulam os dados juntos, e que mantém ambos protegidos contra interferências externas e uso indevido. O encapsulamento de dados levou ao importante conceito OOP dedata hiding.

Data encapsulation é um mecanismo de agrupar os dados e as funções que os usam e data abstraction é um mecanismo de expor apenas as interfaces e ocultar os detalhes de implementação do usuário.

D suporta as propriedades de encapsulamento e ocultação de dados por meio da criação de tipos definidos pelo usuário, chamados classes. Já estudamos que uma classe pode conterprivate, protegido e publicmembros. Por padrão, todos os itens definidos em uma classe são privados. Por exemplo -

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 
};

As variáveis ​​comprimento, largura e altura são private. Isso significa que eles podem ser acessados ​​apenas por outros membros da classe Box, e não por qualquer outra parte de seu programa. Esta é uma forma de o encapsulamento ser alcançado.

Para fazer partes de uma classe public (ou seja, acessível a outras partes do seu programa), você deve declará-los após o publicpalavra-chave. Todas as variáveis ​​ou funções definidas após o especificador público são acessíveis por todas as outras funções em seu programa.

Tornar uma classe amiga de outra expõe os detalhes da implementação e reduz o encapsulamento. É ideal manter o máximo possível de detalhes de cada classe ocultos de todas as outras classes.

Encapsulamento de dados em D

Qualquer programa em D onde você implementa uma classe com membros públicos e privados é um exemplo de encapsulamento e abstração de dados. Considere o seguinte exemplo -

Exemplo

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()); 
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Total 60

Acima da classe soma os números e retorna a soma. Os membros públicosaddNum e getTotalsão as interfaces para o mundo exterior e um usuário precisa conhecê-las para usar a classe. O total de membros privados é algo que está escondido do mundo exterior, mas é necessário para que a classe funcione corretamente.

Estratégia de projeto de classe em D

A maioria de nós aprendeu por meio de experiências amargas a tornar os alunos privados por padrão, a menos que realmente precisemos expô-los. Isso é bomencapsulation.

Essa sabedoria é aplicada com mais frequência aos membros de dados, mas se aplica igualmente a todos os membros, incluindo funções virtuais.