質問: 情報隠蔽 情報隠蔽すると外部からメソッドや変数にアクセスできなくなるので秘匿性が増すと聞きました。このためにはprivateなどの修飾詞をつければよいのでしょうか? 加えて自分は学生なのですがこのようなことをするメリットがわかりません。プログラミング開発をするときに役立つと聞きましたが具体的にはどのように役立つのでしょうか?外部の人から不正にアクセスされることがあるのでしょうか?
回答: 情報隠蔽というといろいろありますが、これは主に「フィールドの隠蔽」のことでしょうか? フィールドの隠蔽は、その通りprivateをつけて外部から見られないようにして行います。ただ、それだけでは一切利用できませんから、getter/setterと呼ばれるアクセス用のメソッドを用意することが多いです。例えばですが、 private int x; public void setx(int y){ this.x = y; } public int getx(){ return this.x; } こんな具合ですね。 隠蔽によって「外部の人から不正にアクセスされる」なんていうと、まるでクラッカーか何かがプログラムに攻撃をするように思うかもしれませんが、そういうことだけではありません。そのクラスを(自分以外の)外部のものが利用する際、フィールドの値を不正に書き換えることを予防できるということです。 例えば、こんなことが考えられます。上の例で「xの値は0~100までの整数」しか使えないとしましょう。そのとき、外部から利用可能だと、そのあたりの仕様を知らないプログラマが直接x = 1000;というように書き換えて使ってしまい、トラブルを起こしてしまうことも考えられます。 が、xを隠蔽してgetxを使ってアクセスするようにしてあれば、このgetx内に「値をチェックして、0~100以外の場合、どう対処するか」といった処理を用意しておくことができます。そうすることで、xの値を0~100以外に書き換えられることを防ぐことができるわけです。 ここではフィールドについて説明しましたが、他の要素も基本的には同じです。要するに「外部から直接好き勝手に利用されると困る」というような場合、隠蔽してこちらで用意した形に従ってアクセスすることを強制することでトラブルを回避できるというわけです。