Encapsulamento de Dados em C++: Proteja Seu Código
Todos os programas C++ são compostos pelos seguintes dois elementos fundamentais:
Instruções do programa (código) — Esta é a parte de um programa que realiza ações e são chamadas de funções.
Dados do programa — Os dados são a informação do programa que é afetada pelas funções do programa.
Encapsulamento é um conceito de Programação Orientada a Objetos que une dados e funções que manipulam os dados, e que mantém ambos seguros de interferência e uso indevido externo. Encapsulamento de dados levou ao importante conceito de OOP de ocultação de dados.
Encapsulamento de dados é um mecanismo de agrupar os 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 classes. Já estudamos que uma classe pode conter membros private, protected e public. Por padrão, todos os itens definidos em uma classe são private. Por exemplo:
class Box {
public:
double getVolume(void) {
return length * breadth * height;
}
private:
double length; // Comprimento de uma caixa
double breadth; // Largura de uma caixa
double height; // Altura de uma caixa
};
As variáveis length, breadth e height são private. Isso significa que elas podem ser acessadas apenas por outros membros da classe Box, e não por qualquer outra parte do seu programa. Esta é uma forma de alcançar encapsulamento.
Para tornar partes de uma classe public (ou seja, acessíveis a outras partes do seu programa), você deve declará-las após a palavra-chave public. Todas as variáveis ou funções definidas após o especificador public são acessíveis por todas as outras funções no seu programa.
Tornar uma classe friend de outra expõe detalhes de implementação e reduz 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++ onde você implementa uma classe com membros públicos e privados é um exemplo de encapsulamento de dados e abstração de dados. Considere o seguinte exemplo:
#include <iostream>
using namespace std;
class Adder {
public:
// construtor
Adder(int i = 0) { total = i; }
// interface para o mundo exterior
void addNum(int number) { total += number; }
// interface para o mundo exterior
int getTotal() { return total; };
private:
// dados ocultados do mundo exterior
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, produz o seguinte resultado:
Total 60
A classe acima soma 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ê-los para usar a classe. O membro privado total é algo ocultado do mundo exterior, mas necessário para a classe operar corretamente.
Estratégia de Design
A maioria de nós aprendeu a tornar membros de classe private por padrão, a menos que realmente precisemos expô-los. Isso é apenas bom encapsulamento.
Isso é aplicado mais frequentemente a membros de dados, mas se aplica igualmente a todos os membros, incluindo funções virtuais.
Linguagem C
- Entendendo Tipos de Dados em C++: Fundamentos, Modificadores e Boas Práticas
- Dominando Operadores em C++: Guia Completo com Exemplos Práticos
- Classes e Objetos em C++: Guia Prático de Programação Orientada a Objetos
- Dominando Templates de Classe em C++: Um Guia Prático
- Dominando Encapsulamento em Java: Guia Prático de Ocultação de Dados
- Dominando o Tipo Char em C++: Declaração, ASCII e Técnicas de Conversão
- Encapsulamento em Java Explicado: Ocultação Segura de Dados e Controle
- Estruturas de Dados em Java: Explorando Classes Core e Collections Framework
- Entendendo Classes de Armazenamento em C++: Escopo, Tempo de Vida e Uso
- Estruturas de Dados em C++: Construindo Programas Eficientes com Arrays, Structs e Mais