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.