カプセル化とは
カプセル化(かぷせるか)とは、オブジェクト指向プログラミングにおいて、データ(変数)とそれを操作する処理(メソッド)を一つのオブジェクト(クラス)にまとめ、外部から直接データを覗き見たり、勝手に書き換えたりできないように保護する仕組みのことです。薬のカプセルのように、中身(不要な詳細情報や重要な設定値)を隠蔽して安全に保護します。外部とのやり取りは、専用の公開された窓口(メソッド)を介してのみ行うルールにすることで、プログラムの他の部分からの不正なアクセスを防ぎ、システムの安全性や独立性を高めることができます。
具体例
銀行の「口座残高」を管理するシステムを考えます。残高データを誰でも直接変更できると困るので隠蔽(非公開に)します。残高を操作するには、必ず「預金する」「引き出す」という専用のメソッドを通すように制限します。これにより、残高がマイナスになるような不正な入出金を防ぐことができます。
もう少し詳しく
カプセル化を実現するためには、「アクセス修飾子」と呼ばれる仕組みを利用します。代表的なものに、クラスの外部から全くアクセスできないようにする「private(非公開)」、どこからでも自由にアクセスできる「public(公開)」、そして継承した子クラスからのみアクセスを許可する「protected(保護)」があります。一般的に、オブジェクト指向のベストプラクティスとしては、クラスが持つデータ(属性・フィールド)はすべて「private」にして外部から隠蔽し、そのデータにアクセスしたり値を変更したりするための専用のメソッド(ゲッターとセッターと呼ばれます)だけを「public」として公開します。このように設計することで、例えば「年齢というデータにマイナスの数値がセットされようとしたらエラーを返す」といった入力チェックのロジックを、セッターメソッドの中に確実に組み込むことができ、オブジェクトが常に正しい状態を保つことを保証できるようになります。これは「情報隠蔽」とも呼ばれ、大規模開発において予期せぬバグの連鎖を防ぐための極めて重要な防波堤となります。
試験でのポイント
試験では、オブジェクト指向の主要な特徴として「カプセル化」「情報隠蔽」というキーワードがセットで問われます。「データと手続きを一体化し、内部構造を外部から見えなくすること」という説明文が出たら、迷わずカプセル化を選択できるようにしてください。また、カプセル化の最大の目的・メリットが「他のプログラムからの影響を受けにくくし(独立性を高める)、変更や保守を容易にすること」である点も頻出の知識です。UMLのクラス図に関連する問題では、属性(データ)や操作(メソッド)の前に付けられる可視性の記号が問われることがあります。「-」がprivate(非公開)、「+」がpublic(公開)、「#」がprotected(保護)を表すことを確実に暗記しておきましょう。
関連する用語
オブジェクト指向、クラス、メソッド、情報隠蔽