Programowanie D - Hermetyzacja

Wszystkie programy D składają się z dwóch podstawowych elementów -

  • Program statements (code) - Jest to część programu, która wykonuje czynności i nazywa się je funkcjami.

  • Program data - Jest to informacja o programie, na który mają wpływ funkcje programu.

Hermetyzacja to koncepcja programowania zorientowanego obiektowo, która wiąże dane i funkcje, które manipulują danymi, i która chroni zarówno przed zewnętrznymi zakłóceniami, jak i nadużyciami. Enkapsulacja danych doprowadziła do powstania ważnej koncepcji OOPdata hiding.

Data encapsulation jest mechanizmem łączenia danych i funkcji, które z nich korzystają, oraz data abstraction to mechanizm ujawniania tylko interfejsów i ukrywania szczegółów implementacji przed użytkownikiem.

D obsługuje właściwości hermetyzacji i ukrywania danych poprzez tworzenie typów zdefiniowanych przez użytkownika, tzw classes. Sprawdziliśmy już, że klasa może zawieraćprivate, chronione i publicczłonków. Domyślnie wszystkie elementy zdefiniowane w klasie są prywatne. Na przykład -

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

Zmienne długość, szerokość i wysokość to private. Oznacza to, że dostęp do nich mają tylko inni członkowie klasy Box, a nie inna część programu. Jest to jeden ze sposobów osiągnięcia hermetyzacji.

Tworzyć części klasy public (tj. dostępne dla innych części twojego programu), musisz zadeklarować je po publicsłowo kluczowe. Wszystkie zmienne lub funkcje zdefiniowane po specyfikatorze publicznym są dostępne dla wszystkich innych funkcji w programie.

Zaprzyjaźnienie jednej klasy z inną ujawnia szczegóły implementacji i zmniejsza hermetyzację. Idealnie jest, aby jak najwięcej szczegółów każdej klasy było ukryte przed wszystkimi innymi klasami.

Hermetyzacja danych w D

Każdy program D, w którym zaimplementujesz klasę z publicznymi i prywatnymi elementami członkowskimi, jest przykładem enkapsulacji i abstrakcji danych. Rozważmy następujący przykład -

Przykład

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

Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -

Total 60

Powyższa klasa dodaje liczby do siebie i zwraca sumę. Członkowie publiczniaddNum i getTotalto interfejsy do świata zewnętrznego i użytkownik musi je znać, aby korzystać z tej klasy. Suma członka prywatnego jest czymś, co jest ukryte przed światem zewnętrznym, ale jest potrzebne do prawidłowego działania klasy.

Strategia projektowania klas w D

Większość z nas nauczyła się poprzez gorzkie doświadczenie, aby domyślnie uczynić członków klasy prywatnymi, chyba że naprawdę musimy ich ujawniać. To jest po prostu dobreencapsulation.

Mądrość ta jest najczęściej stosowana do członków danych, ale dotyczy w równym stopniu wszystkich członków, w tym funkcji wirtualnych.