本記事は、ソフトウェア開発においてよく耳にするカプセル化の概念や、メリットについて専門用語を使わずに紹介します
カプセル化とは?
始めに、カプセル化の定義を見てみます。
カプセル化とは、データの集合とデータに対する操作を、オブジェクトにまとめ、
外部に必要な情報や操作を提供し、外部に不要な情報や操作は隠蔽する、オブジェクト指向プログラミングにおける考え方。
いかがでしょうか?なかなか難しくありませんか?
オブジェクト指向プログラミングに関しては、オブジェクトと呼ばれる単位にソースコードをまとめながらプログラミングしていくこと程度の理解で構いません。
カプセル化の定義を見た時、何となくソースコードをまとめていくんだろうなという印象を抱かれたのではないでしょうか?
そしてそのイメージは概ね間違っていません。
そのイメージに付け加えて頂きたいのは、ソースコードをまとめることによって、公開する必要のない情報を隠蔽し、公開する情報を管理できるということです。
カプセル化とは?
- データの集合と操作をオブジェクトとして一つの単位にまとめること
- オブジェクト外部に公開する必要のない操作、データを隠蔽する
- オブジェクト外部に公開する操作、データを公開する
ここで日常生活を例にカプセル化を考えてみます
どのご家庭にでもあるであろうテレビのリモコンもカプセル化されている一例です
リモコンは、対象機器の操作という操作手段と、その操作に関わるデータの集合をリモコンという一つのオブジェクトにまとめています。
ここでいう操作に関わるデータの集合とは、音量、選局などに関わるデータの全てを指します。
そして、このリモコンを操作する我々は、ボタンを押せばチャンネルが変わるということは知っていますが、どのような通信方式でテレビにデータが送られているのかといった技術的詳細は知りません。
それでもテレビをリモコンで操作できるのは、適切にリモコンがカプセル化されていると言えます。
リモコンに配置された操作ボタンは公開された操作方法であり、テレビとの通信方法などは、隠蔽された操作であると言えます。
このように知らなくても良いことを隠蔽してくれていることで我々は比較的簡単にリモコンを操作できるのです。
カプセル化されたテレビリモコン
-
データの集合と操作をオブジェクトとして一つの単位にまとめること
→操作:テレビを操作する、データの集合:チャンネル、音量など - オブジェクト外部に公開する必要のない操作、データを隠蔽する
→隠蔽された情報:テレビへのデータ送信方法など - オブジェクト外部に公開する必要のある操作、データを公開する
→数字のボタン、音量キーなど
カプセル化のメリット
ここまでカプセル化の概念を紹介させて頂きました。ここからは実際のソフトウェア開発においてカプセル化の概念がどのようなメリットをもたらすのか考えてみます。
オブジェクトの操作性向上
先ほどのテレビのリモコンのように適切に公開された操作は
オブジェクトが持つ機能を容易に外部から利用することが可能となります
カプセル化がなされていない場合、ソースコード上に様々な人が書いた様々な関数が散らばっています。この中から自分が実現した機能の操作を見つけ出すのは煩雑であるのは想像に難くないと思います。
データの予期せぬ参照、変更の削減
カプセル化の特徴の一つであるデータの隠蔽がこのメリットをもたらします。
大規模なソフトウェア開発となると大人数が様々な機能をさまざまなデータを使って実装していきます。このとき定義されたデータの全てが隠蔽されておらずシステム全体の誰もが参照、変更できる状態だった時を考えてみてください。
この時定義されたデータは、データの型と名前さえ一致してしまえば同じデータとして扱われてしまいます。
つまり、あなたが定義した String name = "sample_name" は、
全く関係のない部署の面識のない人の実装によって意図しないタイミングで意図しない値に書き換えられる可能性があります。
日常生活で言えば、お風呂の給湯温度を上げたつもりが、テレビの音量が気付かぬうちに上がってしまうようなものです。
日常生活では一見ありえないようなことが、カプセル化のないソフトウェアの世界では容易に起こり得てしまうのです。
カプセル化によって、オブジェクト外部から隠蔽することで、
あなたが定義した String name = "sample_name" はあなたのオブジェクト内部でのみ
参照、修正することが保証されます。
まとめ
本記事では、カプセル化の定義とメリットを紹介させて頂きました。
カプセル化のポイントとしては、見せたくないものは隠す、見せたいものは意識して公開するという点だと思います。
なぜ、カプセル化が必要かと言えば、楽に開発したいためです。
膨大な人間が膨大なソースコードを生み出し、膨大な機能を実現したとしても、
人一人が理解できる範囲はそれほど多くありません。
人一人が理解できる範囲はそれほど多くありません。
実装の際、人はなるべくシンプルに簡単に考えたいのです。
カプセル化は、考えなくていい、考慮しなくてよい範囲を生み出してくれるため、
シンプルさを生み出すことに一役買ってくれているのです。
0 件のコメント :
コメントを投稿