D-programming-encapsulation
Dプログラミング-カプセル化
すべてのDプログラムは、次の2つの基本的な要素で構成されています-
- プログラム文(コード)-これは、アクションを実行するプログラムの一部であり、関数と呼ばれます。
- プログラムデータ-プログラム機能の影響を受けたプログラムの情報です。
カプセル化はオブジェクト指向プログラミングの概念であり、データとデータを一緒に操作する機能を結び付け、外部の干渉や誤用から安全に保ちます。 データのカプセル化により、*データ隠蔽*という重要なOOPコンセプトが生まれました。
- データのカプセル化*はデータをバンドルするメカニズムであり、それらを使用する機能と*データの抽象化*はインターフェースのみを公開し、実装の詳細をユーザーから隠すメカニズムです。
Dは、 classes と呼ばれるユーザー定義型の作成を通じて、カプセル化とデータ隠蔽のプロパティをサポートします。 クラスには、 private 、protected、および public メンバーを含めることができることをすでに検討しました。 デフォルトでは、クラスで定義されているすべてのアイテムはプライベートです。 たとえば-
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
};
変数の長さ、幅、高さは private です。 つまり、それらはBoxクラスの他のメンバーのみがアクセスでき、プログラムの他の部分はアクセスできません。 これは、カプセル化を実現する1つの方法です。
クラスの一部を public (つまり、プログラムの他の部分からアクセス可能)にするには、 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
上記のクラスは数値を加算し、合計を返します。 パブリックメンバー addNum および getTotal は外部世界へのインターフェイスであり、ユーザーはクラスを使用するためにそれらを知る必要があります。 プライベートメンバーの合計は、外部から隠されていますが、クラスが適切に動作するために必要です。
Dのクラス設計戦略
私たちのほとんどは、実際にクラスメンバーを公開する必要がない限り、デフォルトではクラスメンバーをプライベートにするという苦い経験を通じて学んでいます。 それはちょうど良い*カプセル化*です。
この知恵はデータメンバーに最も頻繁に適用されますが、仮想機能を含むすべてのメンバーに等しく適用されます。