ソフトウェアコンポーネント
1960年代、科学技術系の様々な計算に使用可能なサブルーチンライブラリが構築された。そうしたサブルーチンライブラリはよく使われる主なアルゴリズムを効率的に実装していたが、用途は科学技術計算に限られていた。商用システムでは、アセンブリ言語、COBOL、PL/Iや他の第二世代や第三世代の言語で書かれた再利用可能なモジュールをシステムやアプリケーションライブラリとして使用するようになっていった。
ソフトウェアをコンポーネント化するという考え方は、1968年、ドイツのガルミッシュ=パルテンキルヒェンで行われたNATOのソフトウェア工学会議で Douglas McIlroy がMass Produced Software Components と題して発表したのが最初である。この会議はソフトウェア危機と呼ばれた事態への対策を話し合うための会議であった。彼は、その考えをUNIXオペレーティングシステムのパイプとフィルターという形で、世界で初めて実装した。
最近のソフトウェアコンポーネントの概念の多くを定義したのは Stepstone 社の Brad Cox であった。彼はそれを「ソフトウェアIC」と呼び、Objective-Cを開発してその考え方を市場に広めようとした。このあたりの経緯は彼の著書 Object-Oriented Programming - An Evolutionary Approach(1986年)に詳しく記してある。
個々のソフトウェアコンポーネントは、ソフトウェアパッケージだったり、Webサービスだったり、ウェブリソースだったり、相互に関連する機能(とデータ)の集合をカプセル化したモジュールだったりする。
すべてのシステムプロセスを別々のコンポーネントとして配置すると、各コンポーネント内のデータや関数は全て(クラスのコンテンツのように)相互に意味的に関連することになる。この原則のため、コンポーネントはしばしば「モジュラー」であり「統一的」であると言われる。
システム全体として協調動作するため、コンポーネント群は「インタフェース」経由で相互にやりとりする。あるコンポーネントがシステムの他の部分にサービスを提供するとき、他のコンポーネントが利用可能なインタフェースを公開し、どうやって使えばよいかを示す。このインタフェースをコンポーネントの署名とみることができ、それを使う側はコンポーネントの内部(実装)を知る必要はない。この原則によりコンポーネントは「カプセル化」される。本記事にも掲載されているUMLのコンポーネント図ではロリポップ記号(白丸)でこのインタフェースを表現している。
一方コンポーネントは機能するのに他のコンポーネントを必要とすることがあり、サービスの提供に必要となる使用インタフェースも決まっている。UMLのコンポーネント図ではそれをソケット記号(半円)で表し、他のコンポーネントが公開しているインタフェース(ロリポップ)と接続する形で表現している。
コンポーネントの持つもう1つの重要な特性は「置換可能」だという点で、公開しているインタフェースが同一のコンポーネントを設計時または実行時に相互に置換可能である。