ほぷしぃ

Java言語入門 〜C言語を学んだ君へ〜

[第7回]オブジェクト指向プログラミング

[1] オブジェクト指向を構成する要素

では、オブジェクト指向を構成する要素を説明します。
オブジェクト指向の概念で重要な要素は次の3つです。

カプセル化
継承
ポリモーフィズム

その前に、ひとつ説明しておく必要があります。それはクラスです。
オブジェクトは前に説明しましたが、「モノ」です。
現実世界に存在するもののことをいいます。
これが、オブジェクト指向で重要な働きをします。
そして、このオブジェクトを作るために必要なものがクラスです。
クラスは「データ」と「手続き」を持ち、オブジェクトを定義します。
簡単にまとめると、クラスとはオブジェクトを作る「設計図」のようなものです。

クラスとオブジェクトのイメージ図

クラスとオブジェクトのイメージ
人間というクラスで考えた場合にいろいろな特徴があります。
個人の名前や身長などといった情報と、歩くや寝るといった動作です。
これら2つが先ほど出た、「データ」と「手続き」にそれぞれ対応しています。
それらをまとめたものを設計図(クラス)として、オブジェクトを作成します。

[2] カプセル化

カプセル化とは、オブジェクトのデータや手続きを隠蔽することです。
オブジェクト指向では、クラス内に記述したデータや手続きを呼び出すことで、オブジェクト同士のやりとりを行います。
その時、隠蔽をしていなければ、そのオブジェクト内部だけで使っていて、
その他のオブジェクトでは呼び出してほしくないデータや手続きも呼び出されてしまう可能性もあります。
他に誤ってデータを変更してしまう恐れもあります。
カプセル化はこのような誤りを防ぐために使用します。
それによって、プログラムの保守性が高まります。

カプセル化なしのイメージ

カプセル化なしのイメージ
このままだとオブジェクトBのデータを自由にアクセスすることができる。

カプセル化ありのイメージ

カプセル化ありのイメージ
カプセル化を行い、アクセスを禁止することによって保守性があがる。

[3] 継承

継承とは、「あるクラス」の機能を受け継いで、「新しいクラス」を生成することです。
この時、「あるクラス」を親クラス(スーパークラス)、「新しいクラス」をサブクラスといいます。
これにより、サブクラスでは親クラスの機能を使うことができ、プログラムの再利用性が高まります。
 例えば、犬クラス、猫クラスを作る場合、それぞれを個々に作ることはできます。
しかし、それではプログラムの作成が大変です。
犬と猫は同じ動物で、共通の部分がいくつかあります。
そこで、動物クラスを作成し、それを継承することで、プログラムの作成が簡単になります。

個別に作成した例

個別の作成したオブジェクトのイメージ
このように、犬クラスと猫クラスを作成したのでは、共通している部分を2度書く必要があり手間がかかってしまいます。
そこで、この共通部分を持つクラスを作成し、それを引き継ぐことで手間を省くことができます。

継承を使った例

継承を使ったオブジェクトのイメージ
上の例で、「名前」、「食べる」、「走る」の部分は同じなので1つにまとめて、新たに動物クラスを作成しました。
共通部分をまとめたうえで、次にそれぞれの動物を作成します。この例だと犬と猫です。
犬と猫は上の動物を引き継いでいるので、犬と猫に必要な情報「名前」、「食べる」、「走る」という動作を書かずに使うことができるのです。
そして、「ワン」と「ニャー」の部分をそれぞれに付け加えることで手間を省くことができます。
この引き継ぐ処理をJavaでは継承と呼びます。

[4] ポリモーフィズム

ポリモーフィズム(多態性)とは、呼び出し側が処理内容を決めるのではなく、受け手が処理内容を決めることです。
Aさん、Bさん、Cさんという人がいたとします。
AさんはBさんとCさんの上司です。
AさんはBさんとCさんにある命令としたとします。
同じ命令をしたとしてもそれぞれの人がとる行動は同じだとは限りません。
以上の処理は、ポリモーフィズムを用いることで簡単に行えます。



前のページへ ページのトップへ 第8回へ