Unetway

C ++ - Инкапсуляция данных

Все программы на C ++ состоят из следующих двух основных элементов:

  • Программные операторы (код) - это часть программы, которая выполняет действия, и они называются функциями.
  • Данные программы. Данные - это информация о программе, которая зависит от программных функций.

Инкапсуляция представляет собой концепцию объектно-ориентированного программирования, которая связывает данные и функции, которые управляют данными, и которая защищает от внешних помех и неправильного использования. Инкапсуляция данных привела к важной концепции скрытия данных ООП .

Инкапсуляция данных - это механизм объединения данных, а функции, которые их используют, и абстракция данных - это механизм разоблачения только интерфейсов и скрытия деталей реализации от пользователя.

C ++ поддерживает свойства инкапсуляции и скрытия данных посредством создания пользовательских типов, называемых классами . Мы уже изучили, что класс может содержать частных, защищенных и открытых членов. По умолчанию все элементы, определенные в классе, являются закрытыми. Например:

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
};

Длина переменных, ширина и высота являются частными . Это означает, что к ним могут обращаться только другие члены класса Box, а не к какой-либо другой части вашей программы. Это один из способов инкапсуляции.

Чтобы сделать части класса общедоступными (то есть доступными для других частей вашей программы), вы должны объявить их после ключевого слова public . Все переменные или функции, определенные после публичного спецификатора, доступны всеми другими функциями вашей программы.

Создание одного класса другом другого предоставляет детали реализации и уменьшает инкапсуляцию. Идеал состоит в том, чтобы сохранить как можно больше деталей каждого класса, скрытых от всех других классов.

Пример инкапсуляции данных

Любая программа на C ++, где вы реализуете класс с общедоступными и частными членами, является примером инкапсуляции данных и абстракции данных. Рассмотрим следующий пример:

#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;
}

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Total 60

Класс выше добавляет числа вместе и возвращает сумму. Публичные пользователи addNum и getTotal являются интерфейсами для внешнего мира, и пользователь должен знать их, чтобы использовать класс. Частный член общий является то , что скрыто от внешнего мира, но необходимо для класса , чтобы работать должным образом.

Стратегия проектирования

Большинство из нас научились делать членов класса закрытыми по умолчанию, если нам действительно не нужно их раскрывать. Это просто хорошая инкапсуляция .

Это чаще всего применяется к членам данных, но в равной степени относится ко всем членам, включая виртуальные функции.