プログラミング言語
下の動画はこの節の解説ではありません。 解説動画の雰囲気を知っていただくための見本として、「AI・機械学習」の動画を再生します。
この節の解説動画はプレミアム限定です。プレミアムなら全科目・全節が見放題!
プレミアムで見るオブジェクト指向プログラミングは、ソフトウェア開発の考え方のひとつで、処理を部品化して、部品を組み合わせることでひとつのプログラムを作る手法です。データとそれに関連するメソッドをひとまとめにしたオブジェクトを単位として組み立てていきます。この節では、まずオブジェクトという単位そのものを押さえたうえで、カプセル化・継承・多相性という3つの基本概念を順に見ていきます。3つとも、突き詰めれば「変更に強いプログラムをどう作るか」という問いへの答えです。令和6年度には、カプセル化と継承の説明を入れ替えた形で出題されました。
簡単にいうと
データと、それを扱う手続きを、ひとまとめの「部品」にする——それがオブジェクト!部品どうしはメッセージをやり取りして協力するの。第7章のSOAで学んだ「部品化」を、プログラムの中でやっている感じだよ。
① オブジェクト指向プログラミング(OOP)
オブジェクト指向プログラミング(OOP:Object-Oriented Programming)は、ソフトウェア開発の考え方のひとつで、処理を部品化して、部品(オブジェクト)を組み合わせることでひとつのプログラムを作る手法です。
データとそれに関連するメソッドをひとまとめにしたオブジェクト(カプセル化)にします。
② データとメソッド
データは状態を、メソッドは機能を表し、機能は必要とされる業務プロセスの中から定義されます。
| 要素 | 表すもの |
|---|---|
| データ | 状態 |
| メソッド | 機能 |
各オブジェクト内のデータとメソッドの個数はそれぞれ自由です。
③ メッセージのやり取り
また、メソッドは、同じオブジェクト内のデータを操作できるだけでなく、他のオブジェクト内の機能にメッセージを送ることもできます。
具体例
受注システムをオブジェクトで組み立てる
通販システムを例に、どんなオブジェクトが考えられるかを見てみます。
| オブジェクト | 状態(データ) | 機能(メソッド) |
|---|---|---|
| 顧客 | 氏名、住所、会員種別 | 住所を変更する、会員種別を判定する |
| 商品 | 商品名、単価、在庫数 | 在庫を減らす、在庫を確認する |
| 注文 | 注文日、注文明細 | 合計金額を計算する、注文を確定する |
| 配送 | 配送先、配送日 |

オブジェクト指向
試験のポイント
簡単にいうと
中身を外から触らせない——これがカプセル化!薬のカプセルのように、中身を包んで守るイメージだよ。触りたければ、決められたメソッドを通してもらう。
① カプセル化
カプセル化は、オブジェクトのデータとメソッドを外部から隠蔽する(外部からのアクセスを制限する)仕組みです。
これにより、オブジェクトの内部のデータが誤って変更されないように保護されます。
② 「隠蔽する」という語が目印
| 選択肢の語 | 対応する概念 |
|---|---|
| 外部から隠蔽する、アクセスを制限する | カプセル化 |
簡単にいうと
継承は「親の性質を子が受け継ぐ」——動物クラスから犬クラス、みたいな関係だよ。そして多相性は「同じ呼び方で、相手によって違う動きをする」!どちらも、同じことを何度も書かずに済ませるための工夫だね。
① 継承
継承は、下位クラス(子クラス)が上位クラス(親クラス)の属性(データ)と機能(メソッド)を引き継ぐ仕組みです。
既存のクラスの機能を引き継ぎ、さらに新しい機能を追加したり、既存の機能を変更したりすることにより、コードの再利用性が向上します。
② 継承の例
動物クラスを作り、犬や猫はそのクラスを継承します。犬や猫は動物の基本的な特性を持ちながら、それぞれの特別な機能を追加できます。
| クラス | 持つもの |
|---|---|
| 動物 |
動画・テキスト・過去問・AI添削まですべて網羅!
予備校代の1/10以下で、独学の不安をまるごと解決できます
④ オブジェクトのイメージ
| オブジェクトA | オブジェクトB | |
|---|---|---|
| 状態(データ) | → メッセージ → | 状態(データ) |
| 状態(データ) | ← 返事(返り値) ← | 機能(メソッド) |
| 機能(メソッド) | ||
| 機能(メソッド) |
メッセージに対応する機能が実行され、返事(返り値)が返ります。
⑤ 従来の考え方との違い
| 従来(手続き型) | オブジェクト指向 | |
|---|---|---|
| 中心にあるもの | 処理の手順 | モノ(オブジェクト) |
| データの扱い | 処理とは別に置かれる | 処理とひとまとめ |
| 変更したいとき | 処理を書き換える | 該当するオブジェクトだけ直す |
データと処理を別々に置くと、「どの処理がどのデータを触っているか」が分からなくなります。プログラムが大きくなるほど、この問題は深刻になります。
オブジェクト指向では、データとそれを操作するメソッドを1つにまとめることで、この混乱を避けます。
⑥ 第7章とのつながり
第7章で学んだSOAとマイクロサービスアーキテクチャは、同じ発想をシステムの単位で行ったものです。
| 単位 | 考え方 |
|---|---|
| プログラムの中 | オブジェクト指向(この節) |
| システムの構成 | SOA、マイクロサービス(第7章) |
| 共通する発想 | 内容 |
|---|---|
| 部品化する | 独立した単位に分ける |
| 中身を隠す | 外からは決まった窓口だけ見える |
| 組み合わせる | 部品を組んで全体を作る |
| 変更の影響を閉じ込める | 1つを直しても他に波及しない |
規模は違っても、解こうとしている問題は同じ——「大きなものを、変更しやすい形に分けるにはどうするか」という問いです。
⑦ 3つの基本概念
オブジェクト指向プログラミングには、「カプセル化」「継承」「多相性(ポリモーフィズム)」という基本概念があります。
| 概念 | 一言でいうと |
|---|---|
| カプセル化 | 中身を隠す |
| 継承 | 引き継ぐ |
| 多相性 | 同じ呼び方で違う動きをする |
次のテーマから、この3つを順に見ていきます。
⑧ 3つが目指すもの
| 概念 | 何のためか |
|---|---|
| カプセル化 | 誤って変更されないように守る |
| 継承 | コードの再利用性を向上させる |
| 多相性 | コードの柔軟性を高める |
すべて「作りやすく、直しやすくする」ための工夫です。プログラムは一度書いて終わりではなく、何年も直しながら使い続けるものだからです。
⑨ インスタンス化
試験で関連して問われる用語として、インスタンス化があります。
| 用語 | 意味 |
|---|---|
| クラス | オブジェクトの設計図 |
| インスタンス | 設計図から作られた実体 |
| インスタンス化 | 設計図から実体を作ること |
たとえば「犬」というクラス(設計図)から、「ポチ」「タロウ」という個別の犬(インスタンス)を作る、という関係です。
令和6年度の本試験では、インスタンス化の説明にカプセル化の内容を当てるという誤りが出されました。「隠蔽する」という語が出てきたらカプセル化——この対応を押さえておきましょう。
| 配送状況を更新する |
メッセージのやり取り
「注文を確定する」という処理を追ってみます。
| 順番 | 動き |
|---|---|
| ① | 注文オブジェクトが「在庫を確認して」と商品オブジェクトにメッセージを送る |
| ② | 商品オブジェクトの「在庫を確認する」メソッドが実行される |
| ③ | 在庫あり/なしが返事(返り値)として返る |
| ④ | 在庫があれば「在庫を減らして」とメッセージを送る |
| ⑤ | 商品オブジェクトが在庫数を更新する |
| ⑥ | 注文オブジェクトが注文を確定する |
注文オブジェクトは、商品の在庫数を直接いじらない
ここが要点です。注文オブジェクトは「在庫を減らして」と頼むだけで、商品オブジェクトの中の在庫数という数字を直接書き換えません。
なぜ直接いじらないのか
| 直接いじると | メッセージで頼むと |
|---|---|
| 誰でも在庫数を変えられる | 商品オブジェクトが管理する |
| 在庫数が負になる危険 | 商品オブジェクトが検査できる |
| 在庫の数え方を変えると、全部直す | 商品オブジェクトの中だけ直せばよい |
3つ目がとくに重要
たとえば「在庫数」の管理方法を「実在庫-引当済数」に変更したいとします。
| 直接いじっていた場合 | メッセージで頼んでいた場合 | |
|---|---|---|
| 直す範囲 | 在庫数を触っているすべての場所 | 商品オブジェクトの中だけ |
| 漏れの危険 | ある | ない |
「窓口を1つにしておけば、中身を変えても外に影響しない」——これが次のテーマで学ぶカプセル化の効果です。
第3章のDBMSと同じ構造
| DBMS(第3章) | オブジェクト | |
|---|---|---|
| 外から見えるもの | SQLという窓口 | メソッドという窓口 |
| 隠されているもの | 物理的な格納方法 | 内部のデータ構造 |
| 利点 | 格納方法を変えてもSQLは同じ | 内部を変えてもメソッドは同じ |
情報システムのあらゆる階層で、同じ設計原則が使われている——このことに気づくと、個別の用語が1本の線でつながります。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a オブジェクト指向プログラミングは、処理を部品化して、部品を組み合わせることでひとつのプログラムを作る手法である。
> b オブジェクトにおいて、データは機能を、メソッドは状態を表す。
> c メソッドは、他のオブジェクト内の機能にメッセージを送ることもできる。
解答 a:○ b:× c:○
| 継承 |
| 異なるオブジェクトがそれぞれ異なる動作をする | 多相性 |
③ カプセル化のイメージ
成績表を管理するオブジェクトを考えます。
| 中心 | 周囲を囲むメソッド |
|---|---|
| 成績表データ | 成績入力、成績参照、順位表作成、成績修正、成績取消、平均点等算出 |
さまざまなメソッドが成績表データと一体となっている
成績表データにはメソッド経由のみでアクセスできる
④ 図の読み方
中心にデータがあり、その周りをメソッドが取り囲んでいます。外部からデータに直接手を伸ばすことはできず、必ずメソッドを経由します。
これが「カプセル」という名前の由来です。薬のカプセルのように、中身を包んで守るイメージです。
⑤ カプセル化の例
犬のオブジェクトを考えます。このオブジェクトには「名前」や「年齢」といったデータがありますが、これを自由に変更できないようにします。
代わりに、「名前を教えて」「年齢を教えて」というメソッド(関数)を使って、その情報を取得します。
| やりたいこと | できるか |
|---|---|
| 犬の名前を直接書き換える | できない |
| 「名前を教えて」というメソッドで取得する | できる |
⑥ なぜ直接触らせないのか
| 直接触れると起きること | 例 |
|---|---|
| ありえない値が入る | 年齢に「−5」が入る |
| 関連する値が食い違う | 生年月日を変えたのに年齢が古いまま |
| 誰が変えたか分からない | 記録が残らない |
| 内部の作りを変えられない | 外から直接使われていると変更できない |
メソッド経由にしておけば、メソッドの中で検査や記録ができます。
| メソッドの中でできること |
|---|
| 値の妥当性を検査する(年齢は0以上か) |
| 関連する値も同時に更新する |
| 変更の記録を残す |
| 権限を確認する |
⑦ 第2章・第3章とのつながり
この考え方は、これまでに何度も出てきています。
| 場面 | 何を隠しているか |
|---|---|
| OS(第2章) | ハードウェアの操作 |
| DBMS(第3章) | データの物理的な格納方法 |
| 3層スキーマ(第3章) | 内部スキーマを外部スキーマから隠す |
| ビュー(第3章) | 表の一部だけを見せる |
| カプセル化(本節) | オブジェクトのデータ |
「使う側に、必要なこと以外を知らせない」——これが情報隠蔽の原則です。
⑧ 第6章とのつながり
第2章で学んだアクセス権限や、第6章の最小権限の原則とも通じます。
| 原則 | 内容 |
|---|---|
| 最小権限の原則 | 業務上必要な最小限の権限だけを与える |
| カプセル化 | 必要なメソッドだけを公開する |
「触れる範囲を必要最小限にする」という発想は、セキュリティでもプログラム設計でも共通しています。
⑨ 試験での問われ方
令和6年度の本試験では、インスタンス化の説明にカプセル化の内容を当てるという誤りが出されました。
> 誤りの例:「インスタンス化は、オブジェクトの属性と機能を外部から隠蔽する仕組みである。」
これはカプセル化の内容です。
| 用語 | 正しい内容 |
|---|---|
| インスタンス化 | クラス(設計図)から実体を作ること |
| カプセル化 | 属性と機能を外部から隠蔽すること |
「隠蔽」という語があればカプセル化——この1点で判定できます。
具体例
カプセル化しない場合の事故
在庫管理のプログラムで、カプセル化していない場合に何が起きるかを見てみます。
カプセル化していない場合
```
商品A.在庫数 = 商品A.在庫数 - 注文数
```
プログラムのあちこちで、この1行が書かれています。
| 起きうる問題 | 内容 |
|---|---|
| 検査を忘れる | ある箇所では在庫数の確認をしているが、別の箇所では忘れている |
| 在庫が負になる | 注文数が在庫数を超えても処理される |
| 記録が残らない | 誰が、いつ、なぜ減らしたか分からない |
| 仕様変更で全部直す | 「引当済数」の概念を追加すると、全箇所を修正 |
カプセル化した場合
```
商品A.在庫を引き当てる(注文数)
```
このメソッドの中で、必要な処理がすべて行われます。
| メソッドの中で行うこと |
|---|
| 在庫数が足りるか確認する |
| 足りなければエラーを返す |
| 在庫数を減らす |
| 引当の記録を残す |
外から見える窓口は1つだけ
| 効果 | 内容 |
|---|---|
| 検査の漏れがなくなる | メソッドの中で必ず行われる |
| 記録が確実に残る | 同上 |
| 仕様変更はメソッドの中だけ | 呼び出す側は変えなくてよい |
第3章のDBMSと比べる
第3章で、DBMSを使わない場合に「排他制御を自分で実装する」必要がある、と学びました。
| 自前で実装 | DBMSに任せる | |
|---|---|---|
| 実装箇所 | すべての処理 | DBMSの中だけ |
| 漏れ | 起こりうる | 起こらない |
同じ構造が、プログラムの中でも起きている——カプセル化は、DBMSがデータベースに対してやっていることを、オブジェクトに対してやっているわけです。
業務への示唆
この考え方は、業務の設計にも応用できます。
| 場面 | カプセル化的な発想 |
|---|---|
| 在庫データの更新 | 担当部署を1つに決め、他部署は依頼する |
| 顧客情報の変更 | 窓口を1つにし、そこで検査と記録を行う |
| 価格の決定 | 決定権限を明確にし、勝手に変えられないようにする |
「誰でも触れる状態」は、事故と混乱を生みます。窓口を決め、そこを通すようにする——これは組織設計でも同じです。
第2章で学んだアクセス権限の設計や、運営管理で学ぶ標準作業の考え方とも通じます。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a カプセル化は、オブジェクトのデータとメソッドを外部から隠蔽する仕組みである。
> b カプセル化により、オブジェクトの内部のデータが誤って変更されないように保護される。
> c カプセル化されたオブジェクトのデータには、外部から直接アクセスできる。
解答 a:○ b:○ c:×

カプセル化(1/2)

カプセル化(2/2)
試験のポイント
| 名前、年齢、食べる、眠る |
| 犬(下位クラス・子クラス) | 動物の性質すべて + 吠える |
| 猫(下位クラス・子クラス) | 動物の性質すべて + 爪をとぐ |
③ 上位と下位の向き
| 用語 | 別名 | 位置 |
|---|---|---|
| 上位クラス | 親クラス | 引き継がれる側 |
| 下位クラス | 子クラス | 引き継ぐ側 |
「下位クラスが上位クラスの属性と機能を引き継ぐ」——向きを取り違えないようにしてください。親から子へ、が正しい向きです。
④ 継承がもたらすもの
既存のクラスの機能を引き継ぎ、さらに新しい機能を追加したり、既存の機能を変更したりすることにより、コードの再利用性が向上します。
| もし継承がなければ | 継承があれば |
|---|---|
| 犬にも猫にも「名前」「年齢」を書く | 動物クラスに1回書けばよい |
| 共通部分を直すとき、全部直す | 動物クラスだけ直せばよい |
| 同じコードが何度も現れる | 1か所にまとまる |
第3章の正規化と同じ発想
| 正規化(第3章) | 継承(本節) | |
|---|---|---|
| 避けるもの | 同じデータの重複 | 同じコードの重複 |
| 方法 | 共通部分を別の表に | 共通部分を上位クラスに |
| 効果 | 更新が1か所で済む | 修正が1か所で済む |
「同じことを2か所に書かない」——データでもコードでも、同じ原則が働いています。
⑤ 多相性(ポリモーフィズム)
多相性は、ひとつのメソッドや関数の呼び出しに対して、異なるオブジェクトが同じような役割や機能を持ちながらも、それぞれ異なる動作をする仕組みです。
複数の異なる型のオブジェクトが、共通のインタフェースをもち、同じ操作を行えることで、コードの柔軟性が高まります。
⑥ 多相性の例
先ほどの動物クラスで考えます。
| クラス | 「鳴く」というメソッドの動き |
|---|---|
| 犬 | 「ワン」と鳴く |
| 猫 | 「ニャー」と鳴く |
| 牛 | 「モー」と鳴く |
呼び出す側は「鳴いて」と言うだけで、相手が犬か猫かを気にしません。相手のオブジェクトが、自分に合った動作をします。
⑦ なぜ柔軟性が高まるのか
| もし多相性がなければ | 多相性があれば |
|---|---|
| 相手が犬なら犬用の処理、猫なら猫用の処理と書き分ける | 「鳴いて」と言うだけ |
| 新しい動物を追加すると、呼び出す側も直す | 新しいクラスを追加するだけ |
呼び出す側を変えずに、新しい種類を追加できる——これが柔軟性の中身です。
⑧ ポリモーフィズムという言葉
| 語 | 意味 |
|---|---|
| poly | 多くの |
| morph | 形 |
「多くの形」——同じ呼び方に対して、多くの形の動きがある、という意味です。日本語の「多相性」も、同じ意味を表しています。
⑨ 3つの概念を1枚の表で
| 概念 | 内容 | 得られるもの |
|---|---|---|
| カプセル化 | データとメソッドを外部から隠蔽する | 誤った変更からの保護 |
| 継承 | 下位クラスが上位クラスの属性と機能を引き継ぐ | コードの再利用性の向上 |
| 多相性 | 同じ呼び出しに対し異なるオブジェクトが異なる動作をする | コードの柔軟性の向上 |
⑩ 判別のキーワード
| 選択肢の語 | 対応する概念 |
|---|---|
| 外部から隠蔽する、アクセスを制限する | カプセル化 |
| 下位クラスが上位クラスの属性と機能を引き継ぐ | 継承 |
| 異なるオブジェクトが異なる動作をする、共通のインタフェース | 多相性 |
| クラスから実体を作る | インスタンス化 |
⑪ 第7章とのつながり(再確認)
多相性の説明にある「共通のインタフェースをもち」という語に注目してください。
第7章のSOAで、サービスの特徴として「外部から呼び出せるように明確に定義されたインタフェースを備える」と学びました。
| 場面 | 共通のインタフェース |
|---|---|
| 多相性(本節) | 同じメソッド名で呼べる |
| SOA(第7章) | 同じ形式で呼び出せる |
| デバイスドライバ(第2章) | 同じ命令でどのプリンタも動かせる |
「窓口の形をそろえておけば、中身が違っても同じように扱える」——この原則が、規模を変えて繰り返し現れます。
具体例
設例 インスタンス化と継承
> 次の文章の正誤を判定せよ。(令和6年度第3問 改題)
> b インスタンス化は、オブジェクトの属性と機能を外部から隠蔽する仕組みである。
> c 継承は、下位クラスが上位クラスの属性と機能を引き継ぐ仕組みである。
解答 b:× c:○
bの誤りの構造
カプセル化の定義に、インスタンス化という名前を貼り付けた形です。この科目で繰り返し見てきた作り方です。
「隠蔽する」という語で即断できます。
業務システムで継承を使う
顧客管理システムで、顧客の種類が複数ある場合を考えます。
継承を使わない場合
| クラス | 持つもの |
|---|---|
| 個人顧客 | 氏名、住所、電話番号、購入履歴、生年月日 |
| 法人顧客 | 会社名、住所、電話番号、購入履歴、担当者名 |
「住所」「電話番号」「購入履歴」が両方に書かれています。
継承を使う場合
| クラス | 持つもの |
|---|---|
| 顧客(上位クラス) | 住所、電話番号、購入履歴 |
| 個人顧客(下位クラス) | 顧客の性質 + 氏名、生年月日 |
| 法人顧客(下位クラス) | 顧客の性質 + 会社名、担当者名 |
共通部分が1か所にまとまりました。
変更が起きたとき
「顧客にメールアドレスを追加したい」という要望が出たとします。
| 継承なし | 継承あり | |
|---|---|---|
| 直す場所 | 個人顧客と法人顧客の両方 | 顧客クラスだけ |
| 種類が増えると | その数だけ直す | 変わらず1か所 |
顧客の種類が10種類あれば、10か所を直すか、1か所を直すかの違いになります。
多相性を使う場面
同じシステムで、「割引額を計算する」という処理を考えます。
| 顧客の種類 | 割引の計算方法 |
|---|---|
| 一般会員 | なし |
| ゴールド会員 | 5%割引 |
| 法人顧客 | 契約に基づく割引率 |
多相性を使わない場合
```
もし一般会員なら → 割引0
そうでなくゴールド会員なら → 5%
そうでなく法人顧客なら → 契約の割引率
```
新しい会員種別を追加するたびに、この分岐を直すことになります。
多相性を使う場合
```
顧客.割引額を計算する(購入金額)
```
呼び出す側はこれだけです。実際にどう計算するかは、それぞれのクラスが持っています。
| 新しい会員種別を追加するとき | |
|---|---|
| 多相性なし | 分岐を直す必要がある |
| 多相性あり | 新しいクラスを追加するだけ |
呼び出す側を一切変えずに、種類を増やせる——これが「コードの柔軟性が高まる」ということの具体的な意味です。
診断士としての視点
これらは技術的な話に見えますが、業務の変更にシステムがついていけるかという経営上の問題に直結します。
| 設計 | 新しい会員種別を追加するときの費用 |
|---|---|
| よくない設計 | 数十万円、数週間 |
| よい設計 | 数万円、数日 |
「システム改修に時間がかかりすぎる」という相談の裏には、こうした設計上の問題があることが多い——この視点を持っておくと、原因の見当がつけられます。
第7章で学んだマイクロサービスアーキテクチャも、「変更の影響を閉じ込める」という同じ目的のために生まれた考え方でした。
確認してみましょう
> 次の記述の正誤を判定せよ。
> a 継承により、既存のクラスの機能を引き継ぐことでコードの再利用性が向上する。
> b 多相性は、ひとつのメソッドの呼び出しに対して、異なるオブジェクトがそれぞれ異なる動作をする仕組みである。
> c 継承では、上位クラスが下位クラスの属性と機能を引き継ぐ。
解答 a:○ b:○ c:×

継承と多相性(1/2)

継承と多相性(2/2)
試験のポイント
プレミアムプラン
¥9,800〜/ 買い切り・自動更新なし(税込)
決済はStripe(世界最高水準・PCI-DSS準拠)で安全に処理されます。カード情報は当サービスに保存されません。