本稿ではプログラムという用語に代わってソフトウェアあるいはソフトという用語を使います。コンピュータ・プログラムとソフトウェアは同じであること(ITプロジェクト管理考の投稿「ソフトウェアとは何か?」参照)、ソフトウェア部品という言い方が通用しており、プログラム部品とは言わないことが理由です。
本稿のタイトルにある「部品」という用語はネジのようなハードウェア部品のアナロジーとして使われます。しかし、ハードウェアとは異なり、ソフトウェア部品は、同じ仕様のものを複数用意することはありません。同じものが何度でも使えます。
部品は生産性を高める手段になります。部品を使うことにより、改めて作らなくて済みますので、生産性が向上します。
ソフトウェアの部品化に対し、今日ではオブジェクト指向が最も適した技術と言えます。単純に関数を使う方法が考えられますが、関数は関数名と初期値が固定的に決まっています。しかし、オブジェクト指向のクラスを用いると、利用する側の条件に合わせてある程度融通が利くようにできます。
データ(スカラー・データ、データ構造あるいはそれらの任意の組合せ)とそのデータに関連するすべての操作をまとめて、クラスと呼ぶ集合体にすることができます。この集合体のデータに関するすべての操作はクラス内で定義するメソッド(関数とほぼ同じ)で行ないます。たとえば、データ構造のスタックとそれを操作するプッシュおよびポップをひとまとめにしてクラスとして扱うには、スタックをクラス内の変数に、プッシュとポップをクラスのメソッドとして定義します。このときクラスに名前を与えます。
クラスはひな型で、ひな型のままではプログラムとして機能しません。機能するようにするには、そのクラスの実体(インスタンスという)を生成する必要があります。これはクラス名を変数に代入することによって行ないます。
変数 = クラス名 (変数の値はクラスのインスタンス)
この変数の値はクラスではなく、クラスのインスタンスです。
インスタンスにはメモリが割り当てられます。
同じクラスを使ってもう1つのインスタンスを生成すれば(即ち、もう1つの変数に同じクラス名を代入すれば)、このインスタンスに別のメモリが割り当てられます。2つのインスタンスに割り当てられたメモリは別物です。このようにして、2つのスタック・データが使えるようになります。
また、インスタンスを生成する際、スタックの要素を初期化することができます(説明省略)。
値としてインスタンスをもつ変数Aを使って、プッシュやポップのメソッドの参照を行います。それは、
A.<プッシュ>
A.<ポップ>
と表わします。もう1つのインスタンスをもつ変数をBとすると、プッシュやポップのメソッドの参照は次のように行います。
B.<プッシュ>
B.<ポップ>
上例では、同じ構造のスタックを同時に2つ扱えるようにしました。
このようにスタックを扱うクラスを定義することができました。このクラスがソフトウェア部品になります。
オブジェクト指向では、クラスの階層化ができます。上位のクラスのデータやメソッドを引き継ぎ、下位のクラスを定義する考え方が導入されています。また、クラス名をデータ型と同じように扱うこともできます。オブジェクト指向については良書がたくさん出版されていますので参考にしてください。