良いデザインは情報を隠蔽する
- 良いデザインは内部でもっているデータや実装を出来る限り他のモジュールから隠蔽する。
- モジュールはAPI経由でのみ伝達され、内部で何が行われているか他のモジュールは意識しない。
なぜ隠蔽するか
- 分離されたモジュールは個別に開発したりテストしたりできる。
- すると、並列に開発できる。
- モジュールが分離されていれば1つ1つのモジュールを理解しやすいし、変更が他のモジュールに影響を与えづらいからメンテナンスしやすい。
- 再利用もしやすい。
- どのモジュールが駄目なのか判断しやすいので、大きいシステムが開発しやすい。
どうやって隠蔽するか
- 要素へのアクセスを適切に制限する。
- アクセス修飾子を適切につけると公開を制限できる。
どういう基準で公開を制限する?
- とにかく必要最低限のレベルで要素を公開する。
クラスをpublicにすると?
- 使用者からそのクラスが見える(そのクラスを使用できる)ので、別バージョンのリリースで変更したり消したり出来ない
- 見せなくていい場合はアクセス範囲を絞るべき
長さが0でない配列のフィールドはfinalでも常に破壊可能
- フィールドのアクセスをprivateにして変更不可なリストに突っ込めばいい
- フィールドのアクセスをprivateにしてgetterでクローンを返してもいい
結論
とにかくいろんな要素をできるだけ公開しない