特集PC技術

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

 

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

オブジェクト指向の考え方は重要であり、この回からが本格的なJavaの学習です。
C言語にはなかった、新しい要素であるオブジェクト指向を学びましょう。
これを学んでいくことにより、C言語にはない新しい世界が開けます。
オブジェクト指向を理解して、Javaプログラミングができるようになりましょう。

目次

[1] オブジェクト指向プログラミングとは

第3回から第6回までは、C言語でも行ったプログラムの基本的なことについて学んできました。
ここまでだとC言語に近い部分も多く理解がしやすかったと思います。
しかし、今のままだとC言語とJavaの違いがよくわかりません。
ここでは、C言語と何が違うのかを明らかにします。

まずは、C言語についておさらいをしましょう。C言語は、手続き型プログラミングです。
処理の流れに沿ってプログラムを書いていくことからこのように呼ばれています。
では、Javaはどうなのでしょうか。Javaは、オブジェクト指向プログラミングです。
データとそれに対する処理をまとめて「オブジェクト」(モノ)とし、そのオブジェクト間でのやり取りをします。
そして、このような考え方をオブジェクト指向と呼び、この考えを取り入れたプログラミングのことをオブジェクト指向プログラミングと呼びます。
C言語は、処理手順に重点を置いたプログラミング言語に対して、Javaはデータを中心としたプログラミング言語なのです。

[2] オブジェクト指向プログラミングの利点

C言語に慣れ親しんだ人にとって、オブジェクト指向プログラミングは重荷になる可能性があります。
これまでの回で「変数」「配列」「制御文」など、プログラムを書く上で必要な学習をしました。
これだけでも、さまざまなプログラムが作成できます。
では、データを中心に作ることによるオブジェクト指向の利点とはなんでしょうか。
オブジェクト指向プログラミングの利点を紹介します。主に次の3つです。

        「プログラムの保守が容易」(カプセル化)
        「再利用が容易」(継承)
        「プログラムの簡略化」(ポリモーフィズム)

になります。その3つの特徴を活かしてプログラミングすることによって

ソフトウェア開発・保守等の効率性、柔軟性の向上が期待できます。

オブジェクト指向プログラミングの3つの特徴についてはここでは説明しません。
Javaの学習を進めていく上で少しずつ理解してもらいたいからです。

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

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

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

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

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

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

[4] カプセル化

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

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

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

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

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

[5] 継承

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

個別に作成した例

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

継承を使った例

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

[6] ポリモーフィズム

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

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1073

pagetopこのページの先頭へ戻る