D 程式設計 - 封裝



所有 D 程式都由以下兩個基本元素組成:

  • 程式語句(程式碼) - 這是程式中執行動作的部分,它們被稱為函式。

  • 程式資料 - 這是程式的資訊,受程式函式的影響。

封裝是面向物件程式設計的概念,它將資料及其操作資料的函式繫結在一起,並保護兩者免受外部干擾和誤用。資料封裝導致了重要的 OOP 概念資料隱藏

資料封裝是將資料與其使用的函式捆綁在一起的機制,而資料抽象是僅公開介面並向用戶隱藏實現細節的機制。

D 透過建立稱為的使用者定義型別來支援封裝和資料隱藏的特性。我們已經學習過,一個類可以包含私有、受保護和公有成員。預設情況下,類中定義的所有專案都是私有的。例如:

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

變數 length、breadth 和 height 是私有的。這意味著它們只能被 Box 類的其他成員訪問,而不能被程式的任何其他部分訪問。這就是實現封裝的一種方式。

要使類的部分成員公有(即,可被程式的其他部分訪問),必須在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

上述類將數字加在一起,並返回總和。公有成員addNumgetTotal 是面向外部世界的介面,使用者需要知道它們才能使用該類。私有成員 total 是對外部世界隱藏的內容,但類需要它才能正常執行。

D 中的類設計策略

我們大多數人都透過痛苦的經驗教訓學習到,除非我們確實需要公開類成員,否則應該預設將類成員設為私有。這正是良好的封裝

這種智慧最常應用於資料成員,但它同樣適用於所有成員,包括虛擬函式。

廣告