##前提
使用教材
・スッキリわかるJava入門
・Java SE 7/8 Bronze問題集(黒本)
Java Bronzeの学習中に、ややこしい!と思った概念「カプセル化」「データ隠蔽」「情報隠蔽」についてまとめます。
「スッキリわかるJava入門」ではカプセル化・情報隠蔽・データ遮蔽の違いを明瞭にしていない(そもそも「データ隠蔽」「情報隠蔽」という用語が出てこない)ので、Java黒本の内容を参考にしています。
##カプセル化
「1 関係するデータをまとめること」
「2 まとめたデータを必要とする処理をまとめること」
※カプセル化は、データ遮蔽と組み合わせることで完成する。
##データ隠蔽
「外部からフィールドを直接操作できないようにすること」
目的:カプセル化の維持
カプセル化によってまとめられたデータが、まとめたもの以外のモジュールから利用されて関係が複雑化するのを防ぐ。
実装方法
・アクセス修飾子をprivateにすることで外部からフィールド操作を禁じる
・フィールドにアクセスしたい場合はgetter, setterと呼ばれるメソッド(アクセサメソッド)を介するようにする(必須では無い)
##情報隠蔽
「公開すべきものと非公開にすべきものを区別して扱うこと」
目的:抽象化の効果を維持
抽象化によって、モジュール間の関係性を単純化している。
「使われる側」にある、抽象化によって無視したはずのモジュールを、「使う側」が勝手に利用してしまうと、関係性が複雑化する。これを避けるために情報遮蔽を行う
実装方法
・公開部分→インターフェースとして公開する
・非公開部分→パッケージ・アクセス修飾子を使って不適切なアクセスを制御する
・ポリモーフィズム(多態化)との関係
※ポリモーフィズム=インスタンスを抽象化し、共通の型で扱うこと
→外部から不必要な箇所を触られて、抽象化してざっくりまとめた処理が複雑化するのを防ぐために情報隠蔽する