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

Абстракция данных в C++

Абстрагирование данных относится к предоставлению во внешний мир только необходимой информации и сокрытию их второстепенных деталей, т. е. к представлению необходимой информации в программе без представления деталей.

Абстракция данных — это метод программирования (и проектирования), основанный на разделении интерфейса и реализации.

Давайте возьмем реальный пример телевизора, который вы можете включать и выключать, переключать каналы, регулировать громкость и добавлять внешние компоненты, такие как динамики, видеомагнитофоны и DVD-плееры, НО вы не знаете его внутренних деталей, которые то есть вы не знаете, как он принимает сигналы по воздуху или по кабелю, как переводит их и, наконец, отображает на экране.

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

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

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

В C++ мы используем классы для определения наших собственных абстрактных типов данных (ADT). Вы можете использовать cout объект класса ostream для потоковой передачи данных на стандартный вывод, как это —

Живая демонстрация
#include <iostream>
using namespace std;

int main() {
   cout << "Hello C++" <<endl;
   return 0;
}

Здесь вам не нужно понимать, как cout отображает текст на экране пользователя. Вам нужно знать только общедоступный интерфейс, а лежащую в его основе реализацию cout можно свободно изменять.

Ярлыки доступа обеспечивают абстракцию

В C++ мы используем метки доступа для определения абстрактного интерфейса к классу. Класс может содержать ноль или более меток доступа —

Нет никаких ограничений на то, как часто может появляться метка доступа. Каждая метка доступа указывает уровень доступа последующих определений элементов. Указанный уровень доступа остается в силе до тех пор, пока не встретится следующая метка доступа или не будет видна закрывающая правая фигурная скобка тела класса.

Преимущества абстракции данных

Абстракция данных дает два важных преимущества —

Определяя элементы данных только в частном разделе класса, автор класса может вносить изменения в данные. Если реализация изменяется, необходимо проверить только код класса, чтобы увидеть, какое влияние может оказать изменение. Если данные общедоступны, любая функция, которая напрямую обращается к членам данных старого представления, может быть нарушена.

Пример абстракции данных

Любая программа на 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 и получитьИтого являются интерфейсами к внешнему миру, и пользователю необходимо знать их, чтобы использовать класс. Частный член всего это то, о чем пользователю не нужно знать, но это необходимо для правильной работы класса.

Разработка стратегии

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

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


Язык C

  1. Типы данных С++
  2. Операторы С++
  3. Классы и объекты С++
  4. Шаблоны классов С++
  5. Тип данных Char C++ с примерами
  6. Java — абстракция
  7. Java — Структуры данных
  8. Классы хранения в C++
  9. Структуры данных С++
  10. Полиморфизм в С++