Encapsulamento de dados em C ++

Todos os programas C ++ 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 - 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 os manipulam e que os mantém protegidos de 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.

C ++ 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, protected e publicmembros. 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 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. O ideal é manter o máximo possível de detalhes de cada classe ocultos 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 -

#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

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

Estratégia de Projeto

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

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