ひとくち解説「カプセル化ってなんだろう」
この記事は公立はこだて未来大学 Advent Calendar 2023 Part2 15日目、あらた界隈アドベントカレンダー 10日目の記事です。(日にちが違うのは気にしないでいただけると幸いです…)
また、この記事は以下の記事に触発されて書いています。
ここ3年間、ETロボコンでOOPとチームマネジメントを扱ってきたので、その手の話を見てしまうとついつい反応してしまいます。
なので、僕なりにこの記事と同じテーマを扱って議論してみたいと思います。
よく「カプセル化」と言いますが、そもそもカプセル化ってなんでしょう?
僕はカプセル化を次のように定義しています
よくある間違いとして、「変数をprivateにしてゲッターとセッターを作れば、カプセル化をしたことになる」というものがあります。
これを題材にした動画があるので紹介します。
また、この動画の作者は、この動画に来たリプに次のように返しています。
この作者によるカプセル化の定義は、「クラスそれ自体が一個体で正常に動作できるよう、異常動作させないよう必要な機能を内部に持たせ、正常操作可能なメソッドのみ公開すること」いうことになります。
ところで、僕がオブジェクト指向を人におすすめする時におすすめする資料があります。その名も「オブジェクト指向できていますか?」です。
このスライドの12ページ目から始まる文には、次のようにあります。
これはオブジェクト指向という考え方に関するものですが、カプセル化とは何かを理解するのにも有用です。なぜなら、カプセル化はオブジェクト指向の特徴の1つですから。
ここで、これまで紹介したカプセル化の定義の共通点を見つけてみましょう。
…わかりましたか?答えは「独立」「一個体」「1つの機能に集中」です。
これらがカプセル化のめざすところではないだろうか…というのが僕の意見です。
最後に、カプセル化についてのエッセイを紹介させてください。
これは、「プログラマが知るべき97のこと」という本に記載されているものです。これ以外にも参考になるエッセイが多いですが、今回はカプセル化についての記事ですので、それに関連するものを選んでみました。
簡単にはなりましたが、「カプセル化ってなんだろう」は以上になります。
オブジェクト指向設計の世界はすごい深いので、是非一度潜ってみてください。
付録: 参考になる資料
僕がオブジェクト指向モデリングを勉強するときに読んでよかった資料たちをまとめました。