Encapsulamento de dados em C++
Todos os programas C++ são compostos pelos seguintes dois elementos fundamentais -
-
Declarações de programa (código) − Esta é a parte de um programa que executa ações e são chamadas de funções.
-
Dados do programa − Os dados 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 une os dados e as funções que manipulam os dados e que mantém ambos protegidos contra interferência externa e uso indevido. O encapsulamento de dados levou ao importante conceito OOP de ocultação de dados .
Encapsulamento de dados é um mecanismo de agrupamento de dados e as funções que os usam e abstração de dados é um mecanismo de expor apenas as interfaces e ocultar os detalhes de implementação do usuário.
C++ suporta as propriedades de encapsulamento e ocultação de dados através da criação de tipos definidos pelo usuário, chamados de classes . Já estudamos que uma classe pode conter privado, protegido e público membros. Por padrão, todos os itens definidos em uma classe são privados. Por exemplo -
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
};
As variáveis comprimento, largura e altura são privadas . Isso significa que eles podem ser acessados apenas por outros membros da classe Box, e não por qualquer outra parte do seu programa. Esta é uma maneira de conseguir o encapsulamento.
Para tornar partes de uma classe públicas (ou seja, acessível a outras partes do seu programa), você deve declará-los após o público palavra-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. O ideal é manter o maior número possível de detalhes de cada classe escondidos de todas as outras classes.
Exemplo de encapsulamento de dados
Qualquer programa C++ em que você implementa uma classe com membros públicos e privados é um exemplo de encapsulamento e abstração de dados. Considere o seguinte exemplo -
Demonstração ao vivo
#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;
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Total 60
A classe acima soma os números e retorna a soma. Os membros públicos addNum e getTotal são as interfaces para o mundo exterior e um usuário precisa conhecê-las para usar a classe. O membro privado total é algo que está escondido do mundo exterior, mas é necessário para que a classe funcione corretamente.
Estratégia de design
A maioria de nós aprendeu a tornar os membros da classe privados por padrão, a menos que realmente precisemos expô-los. Isso é bom encapsulamento .
Isso é aplicado com mais frequência a membros de dados, mas se aplica igualmente a todos os membros, incluindo funções virtuais.
Linguagem C