- PR -

getter/setter

投稿者投稿内容
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2004-09-22 10:56
引用:

永井和彦さんの書き込み (2004-09-21 15:09) より:
私の場合は、フィールドは全て例外無くprivateにして、アクセサのスコープを適宜設定する方向で統一しています。


私もほぼ同じです。
基本的に、
1.フィールドは全てprivate+get/setメソッドを作る
2.コンストラクタ内ではフィールドは直接操作
3.メソッドからはget/setメソッド使用
としています。

引用:

永井和彦さんの書き込み (2004-09-21 15:09) より:
で、とりあえず「不利益がほぼ無く、利益はある(場合もある)」ということで、例外無く作成するという行動パターンになっています。
主張として「アクセサを作らなければならない」という仰々しいものでは無く、単純に「アクセサを作るのを躊躇う理由が無い」というものですね。

で、「方針はシンプル、しかも一律」なので、後からコードを追いやすいです。


まさにそのとおりだと思います。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-09-22 11:27
いろいろとご意見ありがとうございました。

結論としては、今後も package private なクラスではアクセサを用意せず、フィールドを public で公開することにしました。

フィールドを直接操作するほうがシンプルだと考えました。フィールドの参照・代入は副作用がないことが明らかなので。アクセサを経由する場合、副作用の有無を確認するためにアクセサの実装を見なければいけなくなります。本来、内部実装を気にしなくていいようにカプセル化(アクセサによる隠蔽)を行うのですが、package private で扱うクラスの場合、関係が密で内部実装を把握していないとならないことも多いと思います。このような場合、アクセサによる隠蔽は逆効果で、必要以上に(内部実装の)見通しを悪くしてしまう、と判断しました。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-09-22 21:21
クラス設計自体を見直す(リファクタリングする)という選択肢も使えるようにしておいた方が良いと思います。

スキルアップ/キャリアアップ(JOB@IT)