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 是從外界隱藏的,但需要為類正常運作。
設計策略:
我們大多數人都通過痛苦經曆教訓,默認情況下類成員是私有的,除非我們真的要揭露他們。這隻是良好的封裝。
這種智慧是最常應用於數據成員,但它同樣適用於所有成員,包括虛函數。