なぜこれがルールであるのか分かりません。このルールの何が恩恵ですか?
私は、この規則に従う方が良いという例を教えてください。OOPのプログラミングスタイルでは、オブジェクトのデータメンバーに他人が直接アクセスするのを隠すべき理由
答えて
オブジェクトの完全性を維持するのに役立つデータ隠蔽とも呼ばれます。誤使用や外部からの干渉からデータを保護します。データに直接アクセスすることはできませんが、アクセス制御を指定して情報を取得することができます。データまたはオブジェクトは、必要に応じて公開または非公開にすることができます。非公開のデータは、オブジェクトの範囲外ではアクセスできません。データが公開されている場合は、プログラムの他の部分からアクセスできます。
データ隠蔽の長所の1つは、クラスを悪用することから保護することです。あなたはクラスのユーザーがそれを使って正しいことをすることを信じることができないので、間違ったことをすることは不可能になります。あなたのクラスのユーザーがそのメンバーのいずれかに直接アクセスできるようにすると、そのメンバーは無効または無意味な値に設定される可能性があります。
より実用的な理由の1つは、データメンバーの実装を変更できないことです。たとえば、size
のメンバーに公開してもらえれば、後でクラスを実際ににする必要があります。サイズの変更に応じてを実行すると、スタックされています。アクセサメソッドがある場合、これらのメソッドは必要なだけ魅力的なものになります。
カプセル化が非常に重要な理由として、「クラスのユーザーが誤用するのを防ぐ」ことがしばしば勧められます。
他の信頼されていない開発者が使用するクラスを作成していることを意味していると思います。信用できないクライアントの議論は、この問題を混乱させる。
ほとんどの場合、あなたのクラスのユーザーはあなたとあなたのチームのメンバーです。
クラスのパブリックメソッドとプロパティは、クラスと残りのコードの間のインターフェイスポイントを構成します。そのインタフェースが小さくなればなるほど、使いやすく理解しやすくなります。
カプセル化する理由は、クラスのインターフェイスをできるだけ小さく、簡潔にすることです。
クラスが非常に凝集性があり、インターフェイスが小さければ、それらがどのように動作し、プログラムの別の部分に集中するかを簡単に「忘れる」ことができます。
ウェブリクエストを行うクラスの例を挙げてください。単一のパブリックメソッドDownloadFile(url)を公開することがあります。このクラスは非常に複雑ですが、シンプルなインターフェースは、内部の仕組みを忘れることができ、解決しようとしている問題に集中するための余裕をあなたに残すことを意味します。
このカウンタの例は、すべてのメソッドを公開しているWebリクエストクラスです。それは20のメソッド、DownloadBegin、DownloadEnd、ChooseProtocolなどを持っています。それらはすべて内部的に使用されるかもしれませんが、外部的に呼び出されることは決してありませんでした。クラスを使用するには、どのメソッドを呼び出すかを知る前に、内部的にどのように動作するのかを知る必要があります。
これは懸念事項の分離にも関係します。パブリックインターフェイスを持ち、データがパブリックでない場合は、データを保持するクラスのみを変更して、データがいつでも表現される方法を変更できます。データが隠されておらず、変更されている場合は、データを使用するすべてのコードを変更する必要があります。
- 1. C#イベントを他のイベントに直接サブスクライブできない理由
- 2. ThreadPoolは他のスレッドのコントロールに直接アクセスできますか?
- 3. OOPを理解する - 他のクラスでPDO接続を使用する方法
- 4. 設定ファイルを直接アクセスから隠すには?
- 5. WCFのデータメンバー値にアクセスするには?
- 6. リストからオブジェクトのデータメンバーへのアクセス
- 7. オブジェクトのフルストリング表現への直接アクセス
- 8. 他のファイルでmysqli接続オブジェクトにアクセスできませんか?
- 9. OOP - 1つのオブジェクトを他のオブジェクトに渡しますか?
- 10. byrefのある関数を代理人に直接変換できないのはなぜですか?
- 11. Java、データベース - データベースに直接入れることができる新しいオブジェクトを割り当てる理由
- 12. C++ ATL COMオブジェクトへの直接アクセス
- 13. JSONオブジェクトのすべての直接近傍を出力する
- 14. モックされたオブジェクトに直接アクセスすることはできません
- 15. jqueryオブジェクトの直接の子孫にきれいにアクセスするにはどうすればよいですか?
- 16. 1人の管理ユーザーの製品を他の管理ユーザーから隠すには?
- 17. .htaccessやその他の方法でサブフォルダへの直接アクセスをブロックする
- 18. 直接URL経由でアクセスするすべてのドット(。)ファイルを保護する方法
- 19. 私のフォームが他のすべてのアイテムをスキップする理由
- 20. Facebookのオブジェクト代理人にアクセスしますか?
- 21. Rのdata.frameのVector要素に直接アクセスできますか?
- 22. プライベート修飾子を使用すると、他のオブジェクトのメンバーに直接アクセスできるのはなぜですか?
- 23. 他のクラスメソッドの結果にアクセスできない理由を理解できません
- 24. アクセスJSONオブジェクトのプロパティを直接、私はここに、直接JSONオブジェクトのプロパティにアクセスし、それをログに記録しようとしているそれを
- 25. サブクラスの代理人にアクセス
- 26. 404のページに直接アクセスしましたが、他のページにアクセスした後ではありません
- 27. Pythonオブジェクトのデータメンバーの要素へのアクセスをログに記録する
- 28. ブロックの直接アクセス
- 29. 代理人または代理人またはその他
- 30. なぜBOOLに直接アクセスできないのですか:_myBool?
http://en.wikipedia.org/wiki/Field_encapsulation#Advantages – Devjosh
あなたが想像しているデータは存在しません。 –