- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オブジェクト指向の「カプセル化」について)
オブジェクト指向のカプセル化について
このQ&Aのポイント
- オブジェクト指向のカプセル化とは、オブジェクトが固有の状態と振る舞いを隠ぺいしている概念のことです。
- カプセル化により、オブジェクトの内部の詳細な実装や変更が他のオブジェクトに影響を与えることなく、利用する側に公開されるインターフェースだけに注目することができます。
- 具体的には、メソッドやプロパティの公開と隠ぺいがカプセル化の一部となります。インターフェースとして公開されたメソッドやプロパティは利用する側からアクセスできるが、カプセル化された内部の実装やデータは隠ぺいされ、外部からは直接アクセスできません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
オブジェクトのカプセル化の目的は、内部の振る舞いと属性を外部から隠蔽することで再利用性・メンテナンス性を高めることにあります。 すべてのメソッド(=メッセージ)を隠蔽してしまっては、外部とのインターフェイスが取れなくなりますので、メソッドをすべて隠蔽することはありません。 プロパティ (属性) が外部に公開されても構いませんが、プロパティを外部から書き換えられることで内部の振る舞いに支障が出るようなカプセル化は失敗です。 という前提でMSと@ITの言葉を整理してみましょう。 ・@IT「固有の状態」 内部の振る舞いに関する属性を固有の状態と呼んでいると思われます。カプセル化には必須のことです。 ・@IT「振る舞い」 内部の振る舞いの事を呼んでいると思われます。同じくカプセル化には必須のことです。 ・MS「メソッド (振る舞い)」 外部とのインターフェイスのためのメソッドです。外部の要求に対してメソッドとしての振る舞いをしますが、内部の振る舞いが隠蔽されているならばカプセル化は問題ありません。 ・MS「プロパティ (属性)」 外部とのインターフェイスのための属性です。これ単体で使われることはありません。何らかのメソッドで対で使われる必要があります。属性に値を入れてメソッドを呼ぶか、メソッドを呼んで属性に値を入れてもらうかどちらかでしょう。 これ以外に内部の振る舞いのための属性が存在する前提で書かれたものと思われます。
お礼
メソッドと言っても、カプセル化されたメソッドとインターフェイス のためのメソッドがあるのですね。たしかにインターフェイスのための メソッドまで隠ぺいしちゃうと独立してしまいますね。。。 ありがとうございました。