オブジェクト指向とは?

オブジェクト指向(Object Oriented)のプログラミングの特徴と、 それが Java言語でどのように実現されているのかを解説します。
オブジェクト指向プログラミングそのものを説明する前に、 従来のプログラムがどんな組立てになっていたかを復習してみましょう。 最も広く用いられているC言語を例に見てみましょう。 C言語はいくつかの関数の集まりでした。 関数は「ひとかたまり作業」に対応します。 つまり、C言語のプログラムは「いくつかの作業の集まり」と言うことができます。

プログラムはコンピュータに仕事をさせるのが目的ですから、 上のような考え方はごく自然な形式だと言えるでしょう。 事実、C言語以前のほとんどのプログラム言語も、上のような考えに立って 設計されています。(このような言語のスタイルを指して 「手続き指向」という言い方をすることもあります。)

手続き指向の言語はコンピュータの側から見れば何の問題点もありません。 むしろ問題はプログラムが、 それを作る人間にとってわかりやすかどうかと言う点です。 プログラムが比較的小規模なうちはいいのですが、最近のように プログラムのソースが巨大になり、多数のプログラマーが共同で作業を 進めるようになると、従来のスタイルの言語による開発が行き詰まりを 見せ始めました。
たとえばC言語の場合、 プログラムのある関数から別のどの関数でも自由に呼び出すことができます。 これは非常に自由で柔軟な機能を提供する反面、やっかいな問題も発生させ ます。原因不明のバグが発生した場合、原因がどこにあるのか見つけるために 巨大なプログラムの隅からから隅までチェックしなくてはいけません。 従来のスタイルではプログラムの規模が大きくなるにつれ、こうした作業が 膨大にふくれあがってしまうのです。
上のような問題を解決するには、プログラムを作成する時にあらかじめ 「ルール」を決め、その「ルール」に基づいて作業を進める方法が有効です。 ただし、誰がそのルールを作るのか? 本当に効率良く作業を進めるルールに なるのか? という問題は残ります。 「オブジェクト指向」の考え方は、それをさらに一歩進め、言語自身のなかに そうした制限のルールを含めてしまおうというものです。 そして、そのために導入された概念が「クラス」なのです。

Java言語ではC言語の関数に当たるものとして「メソッド」と呼ばれる ものがあります。これはやはり「ひとかたまりの作業」に相当します。 ただし、Java言語のプログラムの構成単位はメソッドのみではありません。 複数のメソッドとそれに関連するデータを含む「クラス」という さらに大きなかたまりによって構成されるのです。

プログラムの規模が小さいうちは、クラスを使う意味があまりよくわからない かもしれません。むしろ余計に覚えなければならないルールが増えただけのように 感じられるでしょう。これは「簡単だ」と言われる Java言語の場合であっても そうです。実際、最も簡単なプログラムを作るのならば、Java言語よりもC言語の 方が短くてわかりやすいものになるでしょう。
しかし、ある規模以上のプログラムになると立場は逆転します。 オブジェクト指向の言語である Javaの場合、 プログラムの全体像の把握がはるかに明瞭になります。 また、一度作成したクラスは独立した部品として何度でも再利用できるという 利点も生じます。


大規模なプログラムを取り扱うためには分割のための工夫が必要

C言語などにおける開発でも大規模なプログラムを分割して扱うことは 行われますが、その仕組みは言語の文法とは独立したものです。 また、ライブラリ化したモジュールの管理の方法もシステムごとに大きく異なります。 プログラマはそれらについても学習しなくてはいけません。
Javaのクラスやパッケージは、モジュールへの分割やその管理のルールを 言語仕様の中に取り入れたものと考えることができます。 その結果、モジュール管理は半ば自動化されて作業が軽減されます。 またモジュール管理のルールもシステムに依存しなくなります。