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

變數長度,寬度和高度都是私有的。這意味著,他們只能通過Box類的其他成員進行訪問,而不是由你的程式的任何其他部分。這是封裝的實現方式之一。

為了使一個類公開(即,訪問程式的其他部分)的部分,則必須在public關鍵字後聲明。所有定義的變數或函數是由程式中的所有其他函數訪問。

使一個類的另一個好友暴露的實施細則,並降低了封裝。理想的是保持盡可能多的各類別隱藏所有其他類盡可能的詳細資訊。

數據封裝示例:

實現一個類的公共和私有成員的任何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是外面的世界的介面,一個用戶需要知道他們使用的類。私有成員total 是從外界隱藏的,但需要為類正常運作。

設計策略:

我們大多數人都通過痛苦經歷教訓,默認情況下類成員是私有的,除非我們真的要揭露他們。這只是良好的封裝。

這種智慧是最常應用於數據成員,但它同樣適用於所有成員,包括虛函數。


上一篇: 比較操作符重載 下一篇: D語言介面