2012-05-01 3 views
2

なぜこれがルールであるのか分かりません。このルールの何が恩恵ですか?
私は、この規則に従う方が良いという例を教えてください。OOPのプログラミングスタイルでは、オブジェクトのデータメンバーに他人が直接アクセスするのを隠すべき理由

+1

http://en.wikipedia.org/wiki/Field_encapsulation#Advantages – Devjosh

+0

あなたが想像しているデータは存在しません。 –

答えて

4

オブジェクトの完全性を維持するのに役立つデータ隠蔽とも呼ばれます。誤使用や外部からの干渉からデータを保護します。データに直接アクセスすることはできませんが、アクセス制御を指定して情報を取得することができます。データまたはオブジェクトは、必要に応じて公開または非公開にすることができます。非公開のデータは、オブジェクトの範囲外ではアクセスできません。データが公開されている場合は、プログラムの他の部分からアクセスできます。

1

データ隠蔽の長所の1つは、クラスを悪用することから保護することです。あなたはクラスのユーザーがそれを使って正しいことをすることを信じることができないので、間違ったことをすることは不可能になります。あなたのクラスのユーザーがそのメンバーのいずれかに直接アクセスできるようにすると、そのメンバーは無効または無意味な値に設定される可能性があります。

より実用的な理由の1つは、データメンバーの実装を変更できないことです。たとえば、sizeのメンバーに公開してもらえれば、後でクラスを実際ににする必要があります。サイズの変更に応じてを実行すると、スタックされています。アクセサメソッドがある場合、これらのメソッドは必要なだけ魅力的なものになります。

1

カプセル化が非常に重要な理由として、「クラスのユーザーが誤用するのを防ぐ」ことがしばしば勧められます。

他の信頼されていない開発者が使用するクラスを作成していることを意味していると思います。信用できないクライアントの議論は、この問題を混乱させる。

ほとんどの場合、あなたのクラスのユーザーはあなたとあなたのチームのメンバーです。

クラスのパブリックメソッドとプロパティは、クラスと残りのコードの間のインターフェイスポイントを構成します。そのインタフェースが小さくなればなるほど、使いやすく理解しやすくなります。

カプセル化する理由は、クラスのインターフェイスをできるだけ小さく、簡潔にすることです。

クラスが非常に凝集性があり、インターフェイスが小さければ、それらがどのように動作し、プログラムの別の部分に集中するかを簡単に「忘れる」ことができます。

ウェブリクエストを行うクラスの例を挙げてください。単一のパブリックメソッドDownloadFile(url)を公開することがあります。このクラスは非常に複雑ですが、シンプルなインターフェースは、内部の仕組みを忘れることができ、解決しようとしている問題に集中するための余裕をあなたに残すことを意味します。

このカウンタの例は、すべてのメソッドを公開しているWebリクエストクラスです。それは20のメソッド、DownloadBegin、DownloadEnd、ChooseProtocolなどを持っています。それらはすべて内部的に使用されるかもしれませんが、外部的に呼び出されることは決してありませんでした。クラスを使用するには、どのメソッドを呼び出すかを知る前に、内部的にどのように動作するのかを知る必要があります。

0

これは懸念事項の分離にも関係します。パブリックインターフェイスを持ち、データがパブリックでない場合は、データを保持するクラスのみを変更して、データがいつでも表現される方法を変更できます。データが隠されておらず、変更されている場合は、データを使用するすべてのコードを変更する必要があります。

関連する問題