Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Инкапсуляция данных в C++: защита вашего кода

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

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

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

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

class Box {
public:
    double getVolume(void) { return length * breadth * height; }
private:
    double length;  // длина коробки
    double breadth; // ширина коробки
    double height;  // высота коробки
};

Переменные length, breadth, height — private. Это значит, что к ним имеют доступ только другие члены класса Box, но не другие части программы. Так достигается инкапсуляция.

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

Дружественный класс (friend) раскрывает детали реализации и снижает инкапсуляцию. Идеал — держать как можно больше деталей каждого класса скрытыми от всех других классов.

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

Любая программа на C++ с классом, имеющим публичные и приватные члены, является примером инкапсуляции и абстракции. Пример (тот же класс Adder):

Live Demo
#include <iostream>
using namespace std;
class Adder {
public:
    Adder(int i = 0) { total = i; }
    void addNum(int number) { total += number; }
    int getTotal() { return total; };
private:
    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 — интерфейсы для внешнего мира. Приватный член total скрыт от внешнего мира, но необходим для работы класса.

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

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

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

Язык C

  1. Понимание типов данных C++: основы, модификаторы и лучшие практики
  2. Освоение операторов C++: полное руководство с практическими примерами
  3. Классы и объекты в C++: практическое руководство по объектно-ориентированному программированию
  4. Шаблоны классов в C++: практическое руководство
  5. Инкапсуляция в Java: практическое руководство по скрытию данных
  6. Тип данных char в C++: объявление, ASCII и методы преобразования
  7. Инкапсуляция в Java: сокрытие данных и контроль доступа
  8. Структуры данных в Java: основные классы и Collections Framework
  9. Классы хранения в C++: область видимости, время жизни и использование
  10. Структуры данных в C++: массивы, структуры и эффективное программирование