ソフトウェアコンポーネント
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ソフトウェアコンポーネント(Software Componentry)は、ソフトウェア工学の一分野である。ソフトウェアオブジェクト、ソフトウェアアーキテクチャ、ソフトウェアフレームワーク、デザインパターンなどに基づいた分野であり、オブジェクト指向プログラミングおよび設計の理論を活用している。ソフトウェアコンポーネントとは、ハードウェアの電子部品(electronic component)からの発想であり、モジュールの互換性と信頼性を重視していることを意味する。
目次 |
[編集] 概要
ソフトウェアコンポーネントは、事前に定義されたサービスを提供するシステム構成要素であり、コンポーネント間で通信することができる。Clemens Szyperski と David Messerschmitt は、ソフトウェアコンポーネントが備えるべき5つの基準を以下のように定義した:
- 複数使用(複数回/複数個所)
- コンテキストに依存しない
- 他のコンポーネントと接続可能
- カプセル化、すなわち外部インタフェース以外は見せない
- 独立して配布・バージョン管理可能
簡単に言えば、ソフトウェアコンポーネントとは、ある仕様に従って書かれたオブジェクトである。何らかの仕様に従っている限り、それがどんな仕様であるかは問われない。COM かもしれないし、Enterprise JavaBeansかもしれない。仕様に従って作成されたオブジェクトはコンポーネントとなり、再利用性などの特徴を備えるようになる。
ソフトウェアコンポーネントは、オブジェクトの形態や複数のオブジェクトの集まりであることが多いが、インタフェース記述言語(IDL)に従ったバイナリやテキスト形式の場合もある。後者の場合、コンポーネントはコンピュータ内に他のコンポーネントとは独立した形で存在するだろう。
実行コンテキストやネットワークリンクを通してコンポーネントがアクセスされたり共有されたりする場合、コンポーネント自身やそのインタフェースをビットストリームに変換するための何らかのシリアライズ(またはマーシャリング)が行われる。
[編集] 歴史
ソフトウェアをコンポーネント化するという考え方は、1968年、ドイツのガルミッシュ=パルテンキルヒェンで行われたNATOのソフトウェア工学会議で Douglas McIlroy がMass Produced Software Components と題して発表したのが最初である。この会議はソフトウェア危機と呼ばれた事態への対策を話し合うための会議であった。彼は、その考えをUNIXオペレーティングシステムのパイプとフィルターという形で、世界で初めて実装した。
最近のソフトウェアコンポーネントの概念の多くを定義したのは Stepstone 社の Brad Cox であった。彼はそれを「ソフトウェアIC」と呼び、Objective-Cを開発してその考え方を市場に広めようとした。このあたりの経緯は彼の著書 Object-Oriented Programming - An Evolutionary Approach(1986年)に詳しく記してある。Cox の試みはシリコンのICとソフトウェアICの明らかで基本的な違いのため、失敗に終わった。シリコンのICは物質であるから、需要と供給の関係で売買は成立する。ソフトウェアICはビットの集まりであり、電子部品と同じような売買は成立しなかったのである。
IBM は1990年代初期に System Object Model (SOM) と名づけたソフトウェアコンポーネントのアーキテクチャを提唱した。今日ではいくつかのソフトウェアコンポーネントモデルが成功しているが、それを可能にしたのはマイクロソフトのOLEやCOMが登場したためであると主張する人もいる。
[編集] オブジェクト指向プログラミングとの違い
オブジェクト指向プログラミング(OOP)の考え方では、ソフトウェアはオブジェクトのモデルに従って書かれる。OOP やオブジェクト指向は実世界の相互作用のモデル化に注目し、そこからエンドユーザーやプログラマが直感的に利用可能なある種の「動詞」と「名詞」を抽出する。
一方、ソフトウェアコンポーネントでは必ずしもそのような前提はなく、事前に製作されたコンポーネント群を組み合わせて、電気製品や機械製品を作るようにソフトウェアを作ることを強調する。実際、有用なコンポーネントの定義はオブジェクトほど直感的ではない。コンポーネントはオブジェクトのように擬人化されることはなく、エンドユーザーによるプログラミングにも悲観的な立場と言える。ソフトウェアコンポーネントに基づいた新たなプログラミングパラダイム、コンポーネント指向プログラミングを提唱する人もいる。
この両者の区別は初期の計算機科学者らにその起源があるとする人もいる。すなわち、ドナルド・クヌースは文芸的プログラミングとして直観と形式モデルの融合を提唱した。一方、エドガー・ダイクストラは論文 The Cruelty of Really Teaching Computer Science でプログラミングは数学の一分野でしかないと主張した。両者の考え方は学界での論争を呼び、2つの手法の利点と欠点が議論され、両者の融合を可能にする戦略が話し合われた。彼らの立場が本当に対立するものだったかについては異論もある。
ソフトウェアコンポーネントを効果的に再利用可能にするには多大な労力と注意が必要である。特に以下のような点が重要である:
- 完全に文書化すること
- テストをしっかり行うこと
- 特に各種入力値を入力したときの動作をしっかり確認すること
- 分かり易い(あるいは利用し易い)エラーメッセージを返すこと
- 想定していない状況で使われる可能性があることを念頭において開発すること
[編集] アーキテクチャ
複数のソフトウェアコンポーネントを実行するコンピュータをアプリケーションサーバと呼ぶ。このようなアプリケーションサーバとソフトウェアコンポーネントの組み合わせは典型的な分散コンピューティングの一種であり、金融アプリケーションやビジネスソフトウェアで使われている。
[編集] 技術
- パイプとフィルター
- コンポーネント指向プログラミング
- フラクタル・コンポーネントモデル[1]: ObjectWebより
- Visual Basic Extension、OCX/ActiveX/COM、DCOM: マイクロソフト
- XPCOM: Mozilla Foundation
- VCL、CLX: ボーランド。 VCLをモデルとしたフリーな LCL ライブラリ。
- Enterprise JavaBeans: サン・マイクロシステムズ
- UNO: OpenOffice.orgオフィススイート
- Eiffel言語
- Oberon言語と BlackBox
- Z++言語
- OSGi Service Platform で定義されたバンドル
- .NET における
System.ComponentModel
名前空間
- 複合文書技術
- Bonobo (GNOMEの一部)
- Object Linking and Embedding (OLE)
- OpenDoc
- Fresco
- 分散コンピューティングのソフトウェアコンポーネント
- 9P: Plan 9で開発された分散プロトコル。Infernoなどで使用されている。
- CORBA: Object Management Group
- D-BUS: freedesktop.org
- DCOMおよび後期のCOM、COM+: マイクロソフト
- DCOP (KDE)
- DSOMとSOM: IBM(既に使われていない)
- Java EE: サン・マイクロシステムズ
- .NET Remoting: マイクロソフト
- Z++言語: ZHMicro
- Webサービス
- Universal Network Objects (UNO): OpenOffice.org
- インタフェース記述言語
[編集] 参考文献
- Brad J. Cox, Andrew J. Novobilski: Object-Oriented Programming: An Evolutionary Approach. 2nd ed. Addison-Wesley, Reading 1991 ISBN 0-201-54834-8
- Bertrand Meyer: Object-Oriented Software Construction. 2nd ed. Prentice Hall, 1997.
- Clemens Szyperski: Component Software: Beyond Object-Oriented Programming. 2nd ed. Addison-Wesley Professional, Boston 2002 ISBN 0-201-74572-0
- George T. Heineman, William T. Councill, Component-Based Software Engineering: Putting the Pieces Together. Addison-Wesley Professional, Reading 2001 ISBN 0-201-70485-4
[編集] 関連項目
[編集] 外部リンク
- Mass Produced Software Components by M. Douglas McIlroy
- NATO Science Committee Software Engineering Conference in Garmisch - reports (PDF)
- Planning the Software Industrial Revolution 製造業とソフトウェアの歴史比較
- The independence of notion of component-orientation.
- Cox's feasibility demonstration
- Component Systems 包括的リスト
- "Why Software Reuse has Failed and How to Make It Work for You" by Douglas C. Schmidt