カプセル化と情報隠蔽という言葉は、厳密には違った意味の言葉のはずだったのですが、よく意味が混同して使われてしまっている言葉です。
驚くべきことにプログラミング入門者向けに書かれている本でも混同した意味しか書かれていないこともあります。
もちろん、厳密に違う意味で書かれている資料もあります。
資料(文脈)によって意味が微妙に違って使用されているのが現状なので、そのことを知っていないと混乱すると思います。
この記事では、 カプセル化と情報隠蔽の意味の違いを簡単にわかりやすく書いておきます。
カプセル化の意味とは
カプセル化の意味とは、関連のある要素(データとロジック)をひとまとめにして1つのモジュールにすることです。(モジュール≒オブジェクト)
Aというデータは、aというロジック(処理、関数)をよく利用する(関連している)から、
Bというデータは、bというロジック(処理、関数)をよく利用する(関連している) から、
プログラム上まとめて1つのモジュールにすると便利だよねということです。
カプセル化において、重要となってくるのは、関連のあるものを適切にまとめれらるかどうかということです。
Aというデータに、関係のないbというロジックをまとめてモジュール化しても、使いにくいプログラムになるだけでメリットがありません。
カプセル化によってまとめられたモジュールは、関連のあるものを適切にまとめることであり、そのモジュールがある役割(抽象概念)を担うということです。
カプセル化のメリットとは
カプセル化のメリットとは、モジュールの組み立てでプログラミングができるようになるということなのですが、下記のようなメリットが挙げられます。
- 関連のある要素(データ、ロジック)だけを集めることで、コードが見やすくなる
- 変更時の影響をモジュール内だけにできる
- それぞれが独立した部品になるので、テストや再利用がしやすくなる
情報隠蔽の意味とは
情報隠蔽の意味とは、モジュールの利用者には、モジュールの仕様(使用方法)だけを公開して、モジュールの実装(実現手段、設計情報)は非公開にして隠しましょうということです。
モジュール利用者には、必要なものだけ見せればよいということです。
なので、プログラミング言語には、モジュールのデータやロジックのうち、利用者がアクセスできるものを限定する仕組みが備わっています。
情報隠蔽のメリットとは
情報隠蔽のメリットは、下記のものが挙げられます。
- モジュールの使い方がわかりやすくなる
- モジュールを作成者の想定通りに使ってもらえる
現実世界の例でいうと、例えばスマホ。
一般ユーザーが表示できる画面やボタンの他に、
もし開発者用の画面やボタンも一緒に混ざってたくさん表示されていた場合、
一般ユーザーはどうやって使用すればよいのか把握することが大変になります。
また、下手に押してしまうとスマホが壊れてしまうようなボタンもあるかもしれません。
なので、スマホでは基本的に一般ユーザーが使用する画面やボタンしか表示されないようなっています。
カプセル化と情報隠蔽の違いとは【まとめ】
カプセル化とは、データとロジックをモジュールにまとめることで、
情報隠蔽とは、モジュールの実装詳細は隠しましょうということで、
つまり、 カプセル化と情報隠蔽の違いとは、簡単に言うと、
あくまで、まとめることと隠すことは違うことだよねということでした。