オブジェクト指向(object-oriented)

分類
テクノロジ系 アルゴリズムとプログラミング
出る試験
基本情報応用情報
重要度
★★★★☆

データと、それを扱う処理を1つにまとめて作る考え方。外からは決められた窓口だけを使わせる。

もう少し詳しい説明

オブジェクト指向は、データと、そのデータを扱う処理を1つにまとめて作る考え方です。まとめたものをオブジェクトと呼びます。

構造化プログラミングは処理の分け方を整えましたが、データはどこからでも触れるままでした。値がおかしくなったとき、書き換えた犯人を全部調べることになります。

そこで、データのそばに、そのデータを扱う処理を置き、外からは直接触らせないようにしました。これが出発点です。

クラスとインスタンス

クラスは設計図、インスタンスはそこから作った実物です。

「犬」というクラスに「名前を持つ」「鳴く」と書いておき、そこからポチとタロウを作ります。ポチとタロウは名前が違いますが、持っている項目と、できることは同じです。

クラスの中では、データを属性(メンバ変数)、処理をメソッドと呼びます。インスタンスを作るときに最初の値を入れる特別なメソッドがコンストラクタです。

3つの柱

試験で問われるのは、ほぼこの3つです。

カプセル化

データと処理を1つの入れ物にまとめ、外からは決められた窓口を通してしか触れないようにすることです。

呼ぶ読む・書く外から呼ぶ側金額を渡すだけ窓口預ける/引き出す残高外から直接は触れない
外から呼ぶ側と残高が、直接つながっていないところを見てください。残高へ行く矢印は、窓口から出た1本だけです。

銀行口座のクラスなら、残高を外から直接書き換えさせません。「預ける」「引き出す」というメソッドだけを外に出します。

効いているのは、通り道が1本に絞られていることです。 残高へ行く道が窓口しかないので、引き出すときに残高が足りるかを確かめる処理を、必ず通る場所に置けます。道が何本もあると、確かめ忘れた道が1本でもあればそこから崩れます。

直接触らせないことを情報隠蔽とも呼びます。メリットは、おかしくなったときに調べる範囲が、その入れ物の中だけで済むことです。

継承

上のクラスが持つ性質を、下のクラスが受け継ぐことです。

犬鳴く=ワン猫鳴く=ニャー動物名前を持つ/食べる
上のクラスが持つ性質を、下のクラスがそのまま受け継ぎます。犬と猫は「名前を持つ」「食べる」を書き直す必要がなく、鳴き方の違いだけを書き足します。同じ処理を2か所に書かずに済むのが継承です。

受け継いだうえで、下のクラスは違うところだけを書き足します。共通する部分を上に1つ持てば済むので、同じ処理を何か所にも書かずにすみます。

逆に、複数のクラスに共通する性質を抜き出して上のクラスを作ることを汎化と呼びます。見ている向きが違うだけで、できる関係は同じです。

多相性(ポリモーフィズム)

同じ呼び出しに対して、相手によって違う動作をすることです。多態性ともいいます。

送る命令返ってくる動き犬鳴けワン猫鳴けニャー鳥鳴けチュン
左の列は3行とも「鳴け」で同じです。違うのは右の列だけ。呼ぶ側は相手が何かを確かめていません。

犬にも猫にも「鳴け」と言えば、犬はワンと鳴き、猫はニャーと鳴きます。呼ぶ側は相手が犬か猫かを気にしません。

役に立つのは、種類が増えたときです。鳥を足しても、呼ぶ側の処理は1行も変わりません。種類ごとに場合分けを書いていたら、足すたびに全部の場合分けを直すことになります。

受け継いだメソッドを下のクラスで書き直すことをオーバーライド、同じ名前のメソッドを引数の違いで使い分けることをオーバーロードと呼びます。名前が似ていて取り違えやすいので、「上書き(オーバーライド)」と「積み増し(オーバーロード)」で覚えてください。

何に使われているのか

Java、C++、C#、Python、Ruby など、いま広く使われている言語の多くがオブジェクト指向に対応しています。

設計の段階でも使われます。UML(Unified Modeling Language。統一モデリング言語。オブジェクト指向の設計を図で表す記法)には、クラス図(クラスどうしの関係を表す図)やシーケンス図(処理の順番を時間の流れで表す図)などがあります。応用情報では、UMLの図の読み取りが出ます。

試験ではこう出る

科目A(旧・午前)で出ます。いちばん多いのは、用語の説明を選ばせる問題です。

用語答えになる表現
カプセル化データと手続をまとめ、外から直接触れさせない
継承上位クラスの性質を下位クラスが受け継ぐ
多相性同じ呼び出しで、相手により異なる動作をする
汎化共通する性質を抜き出して上位クラスにまとめる
オーバーライド受け継いだメソッドを、下位クラスで定義し直す
オーバーロード同じ名前のメソッドを、引数の違いで使い分ける

次に多いのが、クラスとインスタンスの違いです。設計図と実物、という対応で答えられます。

応用情報では、UML(オブジェクト指向の設計を図で表す記法)のクラス図(クラスどうしの関係を表す図)を読ませる問題が出ます。汎化は白抜きの三角の矢印で表されるので、形で見分けられます。

関連する用語

構造化プログラミング
順次・選択・繰返しで組み立てる書き方。処理は整理したが、データは手つかずだった
プログラム言語
機械語・アセンブリ言語・高級言語の段。オブジェクト指向言語は高級言語の一区分
正規化
データベースで重複をなくす手順。同じことを2か所に持たない、という狙いは共通する
アジャイル開発
短い周期で作って見直す進め方。部品を差し替えやすい作りと相性がよい

ミニクイズ

オブジェクト指向における「カプセル化」の説明として、最も適切なものはどれか。

正解は 4番:データと、それを扱う手続をひとまとめにし、外から直接触れないようにすること

カプセル化は、データと、そのデータを扱う手続を1つの入れ物にまとめ、外からはあらかじめ決めた窓口を通してしか触れないようにすることです。値が勝手に書き換わらなくなるので、おかしくなったときに調べる範囲が、その入れ物の中だけで済みます。上位の性質を受け継ぐのは継承、同じ呼び出しで相手ごとに違う動作をするのは多相性です。共通する性質を抜き出して上位にまとめるのは汎化と呼ばれ、継承の関係を作るときの考え方にあたります。

間違えた用語の復習リストを見る →

この分野をまとめて解く → アルゴリズムとプログラミングのミニテスト(全44問)

最終更新:2026-10-09