あなたの教授は正しいです。すべてのインスタンス変数に対して盲目的にゲッターとセッターを作成する必要はありません。必要な場所に作成します。
インスタンス変数を持つBankAccount
クラスがあるbalance
場合、バランスをチェックして設定できるようにする場合は、そのクラスのゲッターとセッターを作成するのが理にかなっています。
ここでも、実装をカプセル化するという形で情報が隠されています。ゲッター" double getBalance()
"は、基になるインスタンス変数の値を返す場合があります。または、変数の実装の選択肢でdouble
ある場合は、から派生した値を返す場合があります。または、リモートWebサービスを呼び出してBigDecimal
結果。したがって、getter / setterは実装を変更できるため、カプセル化に違反しません(さらに、JavaBeansにも違反しません)。
JavaBeansが行うことはgetXXX(), setXXX()
、ユーザーが通常調べたり変更したりするクラスの属性である「プロパティ」を取得および設定するためのインターフェース()を定義することです。クラスに「プロパティ」と見なされない情報がある場合、それを公開する必要はありません。たとえば、BankAccount
クラスに引き出しの検証に使用されるインスタンス変数があるとします。クライアントがこれにアクセスしたり変更したりする必要がない場合は、ゲッターまたはセッターを作成しても意味がありません。