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