ソフトウェアコンポーネント
インタフェースさえ同一であれば、システムの動作を損なうことなくコンポーネント単位でバージョンアップしたり実装を置換したりできる。
一般に、コンポーネントBがコンポーネントAを即座に置換できる場合、コンポーネントBはコンポーネントAが提供するものを全て提供していなければならず、さらにコンポーネントAが使っていた他の要素以外のものを必要としないようになっていなければならない。
ソフトウェアコンポーネントは、(クラスではなく)オブジェクトまたは複数のオブジェクトの集まりであることが多いが(オブジェクト指向プログラミングの場合)、インタフェース記述言語 (IDL) に従ったバイナリやテキスト形式の場合もある。後者の場合、コンポーネントはコンピュータ内に他のコンポーネントとは独立した形で存在するだろう。
実行コンテキストやネットワークリンクを通してコンポーネントがアクセスされたり共有されたりする場合、コンポーネント自身やそのインタフェースをビットストリームに変換するための何らかのシリアライズ(またはマーシャリング)が行われる。
高品質のソフトウェアコンポーネントでは再利用性(英語版)が重要な特徴である。プログラマはソフトウェアコンポーネントを設計・実装する際に、様々なプログラムから利用できるよう心がける必要がある。ソフトウェアコンポーネントを再利用可能なものにするには多大な努力と注意深さを要する。再利用性を備えたコンポーネントは次のような要件を持たなければならない。
文書が完備されている。
完全に評価済みである。 頑健性 - 入力の妥当性を完全にチェックしている。 適切なエラーメッセージやリターンコードを返すことができる。
本来想定していない使われ方をする可能性を考慮している。