今回は、基本情報技術者試験の過去問から、オブジェクト指向設計における「カプセル化」に関する問題を取り上げ、詳しく解説します。オブジェクト指向の基礎知識はエンジニアにとって重要なスキルなので、ぜひこの機会に理解を深めてください!
問題
「オブジェクト指向設計における ‘カプセル化’ に最も関係のある概念はどれか?」
- ア インターフェース
- イ 継承
- ウ ポリモーフィズム
- エ クラス
カプセル化とは?
カプセル化は、オブジェクト指向プログラミング(OOP)において、非常に重要な考え方です。簡単に言えば、「オブジェクトの内部のデータや状態を隠して、外部から直接触らせない」こと。これによって、プログラムの安全性が向上し、誤操作や不正なアクセスから守ることができます。
具体的には、オブジェクトが持つデータ(変数やプロパティ)に対して、外部からは決まった方法でしかアクセスできないようにします。例えば、get や set といったメソッド(関数)を使って、オブジェクトのデータに触れるルールを作るわけです。
各選択肢を見てみよう
ア インターフェース(正解)
インターフェースは、オブジェクトが外部とどのようにやり取りするかを定義する仕組みです。カプセル化では、内部の実装(データやロジック)を隠して、外部に公開するのはインターフェースだけという形になります。これにより、外部のコードがオブジェクト内部の実装に依存せずに、使うことができます。
たとえば、テレビのリモコンを考えてみてください。リモコンには「電源を入れる」「チャンネルを変える」といったボタンがありますが、内部の仕組み(どのように電源が入るか、どうやってチャンネルが変わるか)は知らなくてもボタンを押すだけで操作できます。これがインターフェースによるカプセル化のイメージです。
イ 継承
継承は、既存のクラスの機能を引き継ぎ、新しいクラスにその機能を追加できる仕組みです。コードの再利用を促進する便利な機能ですが、カプセル化とは直接関係がありません。
ウ ポリモーフィズム
ポリモーフィズムは、多態性とも呼ばれ、同じ操作が異なるオブジェクトに対して異なる動作をすることを意味します。例えば、「走る」という命令に対して、人は歩き、車は走る、といったように異なる動作が行われるのがポリモーフィズムです。ただし、これもカプセル化とは別の概念です。
エ クラス
クラスは、オブジェクトを定義する設計図のようなもので、オブジェクトのプロパティやメソッドを定義します。カプセル化を実現するための仕組みではありますが、クラス自体がカプセル化の要素そのものではありません。
カプセル化の例(Java)
では、実際にカプセル化がどのように使われるかを見てみましょう。以下は、Javaでカプセル化を実装した簡単な例です。
public class Person {
// プライベートフィールド:外部からは直接アクセスできない
private String name;
private int age;
// コンストラクタ
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// パブリックなゲッターとセッター:外部からアクセス可能なメソッド
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
この例では、name と age というフィールドは private に設定されていますので、外部から直接アクセスできません。しかし、getName() や getAge() といった public メソッドを使うことで、オブジェクトのデータを安全に操作できるようになっています。これがカプセル化の実際の形です。
まとめ
カプセル化は、オブジェクト指向プログラミングの基本的な考え方であり、ソフトウェアの安全性やメンテナンス性を高めるために不可欠な技術です。今回の問題における正解は インターフェース でした。インターフェースを使ってオブジェクト内部を隠し、外部とのやり取りをコントロールすることで、堅牢で柔軟なシステムを構築できます。
カプセル化について理解を深めることで、より高度なプログラミングスキルを身に着けられますので、ぜひ意識してコードを書いてみてください!

コメント