【分かりやすく】オブジェクト指向について解説【基礎情報技術者試験】
プログラミングをやるなら一度は目にする言葉、「オブジェクト指向」。基礎情報技術者試験でも登場するこの言葉について解説します。
言葉の意味
まずは、「オブジェクト指向」という言葉そのものについて考えていきましょう。
「オブジェクト」とは「物体」のこと、「指向」とは「ある方向に目標を定めて(目標を指さして)向かう」ことを示します。
つまり、「オブジェクト指向」とは「物体」という形態を目標にして向かっていくことを意味します。
...少し無理やりな気もしますが、ニュアンスを把握してください。
では、目標としている「オブジェクト」とは一体何なのでしょうか。
オブジェクトとは?
オブジェクト指向において、「オブジェクト」の辞書的な意味は
データとそれを操作するメソッドを一体化したもの
です。
「なんのこっちゃ」と感じる方が多いかと思います。非常にわかりにくい書き方ですね。
これをわかりやすく言いかえると
データ(という理解しにくいもの)を扱いやすくするために、メソッド(データをうまく処理するためのツール)を付属したもの
となります。
まだ少しわかりにくいですね。具体例を示します。
多くの人はスマートフォン(スマホ)を使っているかと思います。スマホは、タッチパネルに情報が映し出され、タッチ操作で私たちの意のままに扱うことができます。
このとき、私たちはタッチ操作によってスマホ内でどのような処理がなされているのかわかりません。しかし、意のままに扱うことはできています。
この時
スマホ内 → 理解しにくいもの(データ)
タッチパネル → スマホ内(データ)をうまく処理するためのツール(メソッド)
と言えます。そして、データとメソッドが融合した「スマホ」という「物体」のことを「オブジェクト」と呼ぶわけです。
オブジェクト指向とは?
これまでの解説から、オブジェクト指向は次のように説明することができます。
オブジェクト指向とは、何か複雑なものを設計する際、扱いやすいようにオブジェクトの集合体として設計しようとする考え方のこと
オブジェクトを積極的に使うことで、複雑な構造もメソッドで扱うことができるようになります。
結果、わかりやすくなり、「楽に」「レベルの高いものが」作り出せるようになりました。
オブジェクト指向の適用先
オブジェクト指向は、便利な概念として一般化されていますが、プログラミング言語にも採用されています。
有名なのは
・Python
・Java
です。これらの言語を勉強する機会があれば、本記事の内容を思い出してみてください。
きっと理解がスムーズになるはずです。
オブジェクト指向に関連する用語
ここからは、オブジェクト指向に関連する用語をいくつか紹介します。
基礎情報技術者試験で出題されることもありますので、用語と意味をしっかり押さえておきましょう。
カプセル化
カプセル化とは
オブジェクトのデータとメソッドを外部から見えないようにする(隠蔽する)こと
です。カプセル化により、他のものの影響を受けにくくすることができます。
設計図のある所をいじったら別のところも変えないといけなくなった...といった事故を減らすことができます。
なお、カプセル化されたオブジェクトのメソッドを使用したければ、メッセージを送ればよいです。
メッセージだけは、カプセルを透過することができます。
クラスとインスタンス
クラスは
オブジェクトのテンプレート
を、インスタンスは
クラスに具体的な設定を当てはめて作ったオブジェクト
を指します。
「オブジェクト」は概念的な定義がされていたのですが、クラスとインスタンスはオブジェクトを実践的な形に落とし込んだものと言えます。
具体例を挙げます。
クッキーを作るとき、星や動物の形をした型を使うことがありますよね?
あの型が「クラス」で、型を使って焼き上げたクッキーが「インスタンス」です。
継承
継承とは
あるクラスのデータやメソッドを、別のクラスに引き継ぐこと
です。
クラスは分けたいけど中身は似ている...といったときによく使われる手法です。
ポリモフィズム
ポリモフィズムとは
継承したメソッドを、名前を変えずに再定義する(オーバーライドという)
ことです。
ポリモフィズムにより、一つのメソッドで複数のインスタンスを扱うことができるようになります。
色々な操作があって面倒だから一つにまとめたい...でもそれぞれ動きが違う...というときに利用する手法です。
まとめ
最後にまとめです。
・「オブジェクト指向」とは、複雑な「データ」に操作用の「メソッド」を付与した「オブジェクト」を使っていこうという考え方のこと
・オブジェクト指向の関連用語として「カプセル化」「クラスとインスタンス」「継承」「ポリモフィズム」がある
ここまで読んでくださり、ありがとうございました。