オブジェクト指向プログラミングは、データと、そのデータを扱う操作をまとめたオブジェクト同士のやり取りでプログラムを構成する考え方です。クラスとインスタンス、カプセル化・継承・多態性を、具体例でつなげて理解しましょう。
クラスは型、インスタンスは実体
銀行口座クラスに、残高などの属性と、入金・出金などのメソッドを定義します。そのクラスを基に作ったAさんの口座、Bさんの口座がインスタンスです。両者は共通の操作を持ちながら、それぞれの残高を保持できます。
| 概念 | 意味 | 例 |
|---|---|---|
| クラス | 共通する属性や操作を定義する型 | 銀行口座クラス |
| インスタンス | クラスを基に生成した実体 | Aさんの口座・Bさんの口座 |
| カプセル化 | データと操作をまとめ、内部へのアクセスを制御 | 出金メソッドで金額・残高を確認 |
| 継承 | 既存クラスを基に新しいクラスを定義 | 動物クラスを継承した犬クラス |
| 多態性 | 共通の操作で対象に応じた実装を利用 | 犬と猫に鳴く操作を呼び出す |
カプセル化で操作の入口をそろえる
外部から残高へ任意の値を直接代入させる代わりに、出金メソッドを通して変更します。メソッド内で金額や残高の条件を確認することで、状態を正しく保ちやすくなります。内部実装を隠し、公開する操作を維持できれば、実装の変更が他の部分へ及ぼす影響も抑えやすくなります。
継承と差分プログラミング
動物クラスの共通の特徴を犬クラスや猫クラスへ引き継ぎ、追加や変更が必要な部分を実装します。これが差分プログラミングの基本です。「犬は動物である」というis-a関係で考えると整理できます。車がエンジンを持つ関係は、車の一部として別のオブジェクトを持つ構成であり、同じ継承関係とは限りません。
多態性とオーバーライド
動物を表す共通の型から「鳴く」を呼び出すと、犬では「ワン」、猫では「ニャー」と動作します。呼び出す側は共通の操作を使い、実際の対象に応じて処理が選ばれます。継承したメソッドの実装を子クラスで再定義するのがオーバーライドです。同じ名前のメソッドを引数の型や個数などを変えて定義するオーバーロードとは区別します。対応の詳細は言語によって異なります。
保守しやすさは設計によって変わる
オブジェクト指向は再利用や変更の局所化に役立ちますが、クラスを増やすだけで必ず保守性が高まるわけではありません。適切な責務の分け方や、外部へ公開する操作の設計が重要です。C++やJavaなどで利用でき、複数の書き方を組み合わせる言語もあります。
理解を確かめる確認問題
同じ銀行口座クラスから作ったAさんとBさんの口座を、それぞれ何と呼びますか?
解答・解説を見る
インスタンスです。クラスは属性や操作を定義する型で、インスタンスはその型を基に生成された実体です。

コメント