【オブジェクト指向入門】カプセル化とは?わかりやすく解説

カプセル

こんにちは、ハニ太郎(@82_taro)です♪

オブジェクト指向プログラミングにおいてクラスとインスタンスを利用すれば現実世界を模倣したプログラムを自由に開発できます。

しかし、間違えて属性(フィールド)を書き換えてしまったり、誤った操作(メソッド)を呼び出してしまうなどのヒューマンエラーを完全に無くすことはできません。

そこで、ミスを未然に防ぐための「カプセル化」という仕組みが用意されています。

今回の記事では、そんな便利な仕組みである「カプセル化」についてわかりやすく解説していきます。

ハニ太郎

最後まで読んでね♪

はじめに

本記事では、オブジェクト指向の基礎を理解している前提でカプセル化について解説していきます。

そのため、オブジェクト指向の基礎に不安がある方は先に以下2つの記事を読んでおいてください。

>【初心者向け】オブジェクト指向とは?世界一わかりやすく解説してみた

「オブジェクト指向とは?」から始まり、オブジェクト指向の本質までを解説した記事となります。

>【オブジェクト指向入門】クラス・インスタンスとは?わかりやすく解説

オブジェクト指向における「クラス」と「インスタンス」について解説した記事となります。

これからの学習の基礎となる内容なので先に読んで理解しておきましょう。

カプセル化とは?

先ほど挙げた二つの記事でオブジェクト指向の基礎は理解できたでしょうか?

では、オブジェクト指向の三大機能の一つである「カプセル化」とは一体何なのでしょうか?

まずは下記のように理解しておきましょう。

カプセル化とは

大切な情報(フィールド)や操作(メソッド)についてアクセス制御をかけることにより、悪意や間違いによる利用を防止し、想定しない利用が発生したならば、その原因箇所を特定しやすくするための仕組み。

この定義から「カプセル化」は”安全に”オブジェクト指向を実現するための仕組みと言えます。

カプセル化を利用することでより現実世界を模倣しやすくなるのです。

アクセス修飾子と定石

前章でカプセル化がどういったものかは理解できたでしょうか?

「とりあえずアクセス制御をかけて安全に利用できるようにするんやろ?」といった具合に思っていただけたら現時点では十分です。

では、一体どのようにすればアクセス制御をかけることができるのでしょうか?

それぞれのメンバ(フィールドおよびメソッド)に対して「Aクラス、Bクラス、Cクラスからの利用は許す」といったように細かく設定すると、とても手間がかかります。

そこで下図のようにざっくりと4段階からアクセス制御の方法を選ぶような仕組みとなっています。

アクセス修飾子

上記の図に示した「private」や「public」などはアクセス修飾子と呼ばれ、フィールドやメソッドを宣言する際、先頭に記述することでアクセス制御が可能となります。

なお現時点で4つ全てを覚える必要はありません。

まずは「private」と「public」だけ覚えておけば十分かと思います。

というのも、以下のようなお決まりのパターンが存在するからです。

アクセス修飾の定石
  • フィールドはすべて「private」
  • メソッドはすべて「public」

とりあえずはこのパターンに沿ってアクセス修飾を行い、その後臨機応変に微調整すれば良いのです。

ここで勘の良い人だと「フィールドをすべてprivateにしてしまったら、外部から一切読み書きできなくなるのでは?」と思うかもしれません。

しかし、心配ご無用。

メソッドを経由すればフィールドにはアクセスすることができます。

それを示したのが以下の図。

カプセル化の図

メソッドでフィールドを守るイメージですね。

メソッドを通さないとフィールドを読み書きすることができないことが図からもわかるかと思います。

カプセル化の本質

オブジェクト指向の本質を思い出してください。

システムやプログラムというのは、突き詰めれば「現実世界における何らかの相互作用」を自動化するためのものでした。

そして、「現実世界の登場人物たちの動きをそっくり仮想世界に再現する」ことがオブジェクト指向の本質です。

では、このオブジェクト指向の世界における「バグ」「不具合」とは一体何でしょうか?

それは、すなわち以下の状態に他なりません。

不具合とは

現実世界と仮想世界が食い違ってしまうこと。

しかし、今回学んだカプセル化を使えば、どのように利用されてもフィールドに不正な値が入ってしまうことのない、「現実世界の登場人物と矛盾しないクラス」を作ることができます。

そして、その「現実の登場人物と矛盾しないクラス」を集めてプログラムを作れば、「現実世界と矛盾しないプログラム」になるという考え方がカプセル化の本質なのです。

カプセル化の本質
「現実の登場人物と矛盾しないクラス」を集めてプログラムを作れば、「現実世界と矛盾しないプログラム」を作ることができるという考え方。

おわりに

ハニ太郎

ここまで記事を読んでいただきありがとうございました♪

カプセル化について理解できたでしょうか?

オブジェクト指向をマスターするために避けては通れない道なので、ここでしっかり理解を固めておきましょう。

また、カプセル化について理解ができたら次に「継承」について学ぶのがおすすめです。

>【オブジェクト指向入門】継承とは?(基本編)わかりやすく解説

あなたがオブジェクト指向をマスターできるよう応援しております(^^)

コメントを残す