メンバー変数は、インターフェイスではなくクラスの実装です。実装を変更したい場合があるため、他のクラスがその実装を直接参照することを許可しないでください。
次のメソッドを持つクラスを検討してください-C ++構文ですが、それは重要ではありません...
class example
{
public:
virtual void Set_Mode (int p_mode);
virtual int Mode () const;
};
メンバーと呼ばれる変数があるように起こっていることはかなり明白なようだmode
か、m_mode
直接店舗モード値は、「プロパティ」は、いくつかの言語でどうなるのか、かなりやっていることというか、似た-しかし、それは必ずしも真実ではありません。これを処理する方法はたくさんあります。たとえば、Set_Modeメソッドは...
- switchステートメントを使用してモードを識別します。
- そのモード値に応じて、いくつかの内部クラスのサブクラスをインスタンス化します。
- そのインスタンスへのポインタをメンバー変数として格納します。
これを行うと、例のクラスの他の多くのメソッドが、ポインターを介してその内部クラスの適切なメソッドを呼び出し、現在のモードを確認する必要なくモード固有の動作を取得できます。
ここでのポイントは、この種のことを実装するための可能な方法が複数存在するということではなく、いつかは気が変わるかもしれません。単純な変数から始めたのかもしれませんが、すべてのメソッドのモードを特定するすべてのスイッチステートメントに問題が生じています。あるいは、インスタンスポインターのことから始めたのに、状況にとって重すぎることが判明したのかもしれません。
このようなことがすべてのメンバーデータで発生する可能性があることがわかりました。値が格納される単位をマイルからキロメートルに変更する必要がある場合があります。または、一意に識別されるケースの列挙では、追加情報などを考慮せずにすべてのケースを一意に識別できない場合があります。
これはメソッドでも発生する可能性があります。一部のメソッドは純粋に内部で使用されるものであり、実装によって異なり、プライベートである必要があります。しかし、多くのメソッドはインターフェースの一部であり、クラスの内部実装が置き換えられたからといって、名前を変更する必要はありません。
とにかく、実装が公開されている場合、他のコードは必然的にそれに依存し始め、その実装を維持することにロックされます。実装が他のコードから隠されている場合、そのような状況は起こり得ません。
実装の詳細へのアクセスをブロックすることを「データ非表示」と呼びます。