第1章 オブジェクト指向プログラミング
1.1 オブジェクト指向について
本節では、Java言語を学習していくうえで、切り離すことはできないオブジェクト指向について説明していきます。
1.1.1 プログラミングのアプローチ方法
オブジェクト指向を説明する前に、プログラミングのアプローチ方法について説明します。
1. 手続き指向
ある機能を作成するうえで「どのように実現(プログラム)するか」を中心に考える手法です。(一般的な実現言語はC言語)
2. データ指向
手続き指向とは逆にシステムに「必要なデータ」を中心に考える手法です。(一般的な実現言語はリレーショナル型データベース+COBOL言語)
3. オブジェクト指向
端的に述べると上記の手続きとデータの両方を重要視した考え方です。(一般的な実現言語はJava、C++)
これまでのアプローチ方法である1と2を両方取り入れた形がオブジェクト指向となっています。
それでは次の項でオブジェクト指向とはどういうものなのか具体的に説明していきます。
1.1.2 オブジェクト指向とは
オブジェクト指向という言葉を直訳すると「オブジェクト=もの、指向=~目指した/~に向いた」という意味になります。例えば「現実の世界をコンピュータ内に再現(モデリング)すること」の再現(モデリング)作業が「もの(現実世界をパソコン内に再現)を目指している」と言えます。
それはデータでも手続きでもなく「モノ」即ち「オブジェクト」を中心に「分析/設計/製造/etc」を行う発想になります。
現実の世界を見渡しても様々な「モノ」が存在し、それらが互いに関係しあってある機能を実現していることが分かると思います。
例えば「会社」を例にとってみましょう。
会社の内には本業を行う業務部門があります。また総務部に相当する本業以外の業務を行っている部署も存在します。この2つ(他にも部署はあります)の部署どちらが欠けても会社として機能しなくなります。つまりこの2つの部署それぞれが「オブジェクト」つまり「モノ」としてとらえればいいのです。
図 1.1.1 現実世界とオブジェクトの関係
各部門はそれぞれ自分がやるべき作業を独立して行います。その部署ではできない作業を行う必要が発生した場合は、それを行える専門の部署に依頼し、その依頼結果を利用して作業を進めていきます。そして最終的にひとつの会社として機能することになります。話をプログラムの世界に戻せば、会社は製品としてのソフトウェア(アプリケーションプログラム)であり、各部署がそのソフトウェアの中のある機能と見ることができます。
繰り返しになってしまいますが、現実の世界にはさまざまなモノが存在します。それらのモノたちは、それぞれ独立して機能し、また互いに連携しながら別の機能を生み出しています。単独のモノと2つ以上のモノ同士の関係を、忠実にコンピュータシステム内に再現しようというのが、「オブジェクト指向」のアプローチなのです。
それでは次の項でJavaとオブジェクト指向の概念がどのように結びついているのか説明します。
1.1.3 オブジェクト指向プログラミング
まずJavaはオブジェクト指向言語です。「Java入門」で学習して来た範囲では、クラスを1つだけ作成し、その中ですべてが完結するようなプログラムを扱ってきました。しかしこの様なプログラミングはオブジェクト指向らしいプログラミングではありません。
オブジェクト指向プログラミングに以下のような特徴があることを示します。
ポイント
- 現実世界の「もの」の考え方に近い
- 仕様変更に強い
- すでにあるクラスの定義を利用して新しいクラスを定義する(継承)
- オブジェクトの独立性、安全性を高める(カプセル化)
- 同じメソッドでもオブジェクトの種類により違う動作を行わせる(ポリモーフィズム)
Javaでは「クラス」(プログラム部品のための雛形)を複数定義し、クラスから生成した様々なタイプの「オブジェクト」を組み合わせてプログラミングを行うのが一般的です。プログラムを作成していくうえで、どのようなオブジェクトがどのように振る舞うかを考えることから始まります。クラスの最も重要な役割はそのようなオブジェクトを設計し定義することです。
このような考え方の元で行う手法をオブジェクト指向プログラミングといいます。
それでは次の節でオブジェクトの定義について詳しく説明していきます。