この人頭いいなと思ったエピソード

初心者です。

javaでは、タイトルで書きました様に、
・フィールド➡privateメンバ
・メソッド➡publicメンバ
と指定する事が一般的によく行われていると思いますが。
上記にする、有意点とは何なのでしょうか?

小生、初心者ですので出来るだけ、分かり易くご教授願います。

A 回答 (3件)

例としてWebブラウザのようなものを考えてみましょう。



・クラスA:設定ファイルを読み書きするクラス。
ファイルハンドラを保持し、ファイルオープン処理、設定取得処理、設定変更処理、ファイルクローズ処理(ファイル保存処理)を定義する。
・クラスB:キャッシュを読み書きするクラス。
ファイルハンドラを保持し、ファイルオープン処理、キャッシュ取得処理、キャッシュ追加処理、ファイルクローズ処理(ファイル保存処理)を定義する。

この時ファイルハンドラをpublicにしているとします。
そして間違えてクラスAのファイルハンドラでクラスBのファイルハンドラを上書きしたらどうなるでしょうか?
キャッシュを読み書きするはずのクラスが設定ファイルを編集してしまうことになります。それは即設定ファイル破損につながります。

もしこの時ファイルハンドラをprivateにしていたらどうでしょうか?
そして間違えてクラスAのファイルハンドラでクラスBのファイルハンドラを上書きすること自体が不可能になります。

さらにこのクラスを使っているアプリケーションがPlug-inをサポートしているとしましょう。
この時ファイルハンドラをpublicにしていると、悪意のあるPlug-inから設定ファイルを破壊できることになります。
ファイルハンドラをprivateにしていれば、悪意のあるPlug-inが設定ファイルを破壊しようとしてもファイルハンドラを書き換えられないことになります。

こうした理由から見える必要がないものは見せないほうがアプリケーション全体の安定性や、セキュリティを確保できることになります。
ですから、やりすぎは良くないけれど外部から特別見せる必要がないものはprivateの方がよいといわれるわけです。
    • good
    • 0

クラス内部からしか使われないフィールドやメソッドについては、


スコープを最小限に留めるために private は当然です。
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%B3 …

クラス外部から使用される場合ですが、メソッドについては単純に public にします。
ですがフィールドについては、
private のままにして専用の public メソッドにて読み書きすることが多いです。

その理由ですが、Java の仕様に Beans というのがあり、
これに即した書き方が教科書でも推奨されて一般的に広まったからだと思います。
https://ja.wikipedia.org/wiki/JavaBeans

Beans 形式にする意味ですが、
* オブジェクト指向の「カプセル化」を実現でき、クラスの安全性が高まる
* 値を参照・更新するだけで、処理が発生するケースに対応できる
* Java 用のライブラリが、Beans 形式を要求することが多い
* 特に RAD ツールで使われる場合は必須だった

ただし、言語的に必須とされているわけではないので、
特に理由が無ければフィールドを public 指定してもなんら問題ないでしょう。
クラス設計はシンプルであればあるほど良いという考え方もありますので。
https://ja.wikipedia.org/wiki/Plain_Old_Java_Obj …
    • good
    • 0

単純に、外に見せる必要の無いものは隠す ということです。


だからフィールドはprivateは絶対じゃ有りません。でも
そうしておいた方が無難です。

「カプセル化」を学びましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報