D Программирование - инкапсуляция

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

  • Program statements (code) - Это часть программы, которая выполняет действия, и они называются функциями.

  • Program data - Это информация о программе, на которую влияют функции программы.

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

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

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

class Box { 
   public: 
      double getVolume() { 
         return length * breadth * height; 
      } 
   private: 
      double length;      // Length of a box 
      double breadth;     // Breadth of a box 
      double height;      // Height of a box 
};

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

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

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

Инкапсуляция данных в D

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

пример

import std.stdio;
  
class Adder { 
   public: 
      // constructor 
      this(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; 
}
 
void main( ) { 
   Adder a = new Adder(); 
   
   a.addNum(10); 
   a.addNum(20); 
   a.addNum(30);  
   writeln("Total ",a.getTotal()); 
}

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

Total 60

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

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

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

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