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 是從外界隱藏的,但需要為類正常運作。

設計策略:

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

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