プログラムの部品化

オブジェクト指向の解説書やJavaの教本ではオブジェクト指向について「オブジェクト指向以前のプログラム言語ではプログラムを部品化して再利用するのは難しかった。オブジェクト指向によって、似たような処理、同じ処理を一つ集まりとしてまとめることが出来き、プログラムの部品化が可能になった」と説明されています。

確かに、オブジェクト指向を取り入れて設計されたJava言語はプログラムの部品化がしやすくなっています。しかし、オブジェクト指向以前のC言語でも処理を関数化し、それらをまとめたライブラリを使うことによって処理を再利用する事は出来ました。さらに遡ればFortranでさえ呼び名は違いますがサブルーチンという処理を再利用するための定義法はありました。
では、それら「処理の再利用」と「プログラムの部品化」は何が違って、その違いはどのように実現されているのでしょう。

プログラムの部品化はプログラムの再利用を促進し、プログラム開発の生産性を飛躍的に高めています。
では、部品化を考える前に部品とはどういう物でしょうか。
例えば、自動車。
自動車にはモーターがたくさん使われています。ドアガラスの昇降、ワイパー、ボタン操作で角度が変わるドアミラー、数え上げればきりがないでしょう。
それらのモーターは全て固有の物でしょうか。
たぶん、同じモーターが別の機器にも使われている事でしょう。だからモーターは部品なのです。

しかし、モーター単独では使えません。
減速ギヤ―が付いたり、回転運動を往復運動に変えるリンク機構が付くことによってモーターはドアガラスの昇降機構やワイパーに使われるのです。つまり、部品とは別の物と組み合わされることによって少し大きな部品になることが出来なければいけません。
英語で言うとパーツが集まって、ユニットになり、コンポーネントになって、モジュールになり、プロダクトになる。当然、同じパーツでもいろいろなコンポーネントで使われます。これが実際の部品です。

ソフトウェアの場合、サブルーチンも関数もそれ自身を単体の部品として再利用することはできても、それを使ったユニットやコンポーネントを作るには、元々のサブルーチンや関数の内部構造の知識が必要です。一方、オブジェクト指向の概念に基づいたJavaでは、内部構造の知識がなくても公開されている仕様を理解すれば可能です。
これが「処理の再利用」と「プログラムの部品化」の違いであり、Javaがオブジェクト指向以前の言語と違うところです。
このプログラムの部品化を可能にしているのは、Javaでは

継承

抽象クラスとインターフェース

ポリモーフィズム

の四つの要素技術です。