ソフトウェアコンポーネント
[Wikipedia|▼Menu]
UML 2.0 のコンポーネント図で、2つのコンポーネントを表現した例。CheckoutコンポーネントはCardProcessingコンポーネントを使用している。

ソフトウェアコンポーネント(: software component / software componentry)は、ソフトウェアシステムの様々な機能を関心の分離によって分割したものである。システムを独立した結合の弱い再利用可能なコンポーネント(部品)群で構成する設計技法は Component-Based Software Engineering (CBSE) と呼ばれ、ソフトウェア工学の一分野となっている。

コンポーネントの考え方は、サービス指向の起点となっている。例えば、Webサービスサービス指向アーキテクチャ (SOA) ではソフトウェアコンポーネントの考え方を発展させサービスをコンポーネント化するという考え方をする。

狭義ではEJBなどインタフェースが標準化されたもののみを示し、広義では関数化、クラス化などソースコードレベルで再利用出来る物などを示す。
概要

個々のソフトウェアコンポーネントは、ソフトウェアパッケージだったり、Webサービスだったり、ウェブリソースだったり、相互に関連する機能(とデータ)の集合をカプセル化したモジュールだったりする。

すべてのシステムプロセスを別々のコンポーネントとして配置すると、各コンポーネント内のデータや関数は全て(クラスのコンテンツのように)相互に意味的に関連することになる。この原則のため、コンポーネントはしばしば「モジュラー」であり「統一的」であると言われる。

システム全体として協調動作するため、コンポーネント群は「インタフェース」経由で相互にやりとりする。あるコンポーネントがシステムの他の部分にサービスを提供するとき、他のコンポーネントが利用可能なインタフェースを公開し、どうやって使えばよいかを示す。このインタフェースをコンポーネントの署名とみることができ、それを使う側はコンポーネントの内部(実装)を知る必要はない。この原則によりコンポーネントは「カプセル化」される。本記事にも掲載されているUMLコンポーネント図ではロリポップ記号(白丸)でこのインタフェースを表現している。

一方コンポーネントは機能するのに他のコンポーネントを必要とすることがあり、サービスの提供に必要となる使用インタフェースも決まっている。UMLのコンポーネント図ではそれをソケット記号(半円)で表し、他のコンポーネントが公開しているインタフェース(ロリポップ)と接続する形で表現している。UML 2.0 のコンポーネント図でソフトウェアコンポーネント群を表現した例。ホテルの休日予約システムを表現している。

コンポーネントの持つもう1つの重要な特性は「置換可能」だという点で、公開しているインタフェースが同一のコンポーネントを設計時または実行時に相互に置換可能である。インタフェースさえ同一であれば、システムの動作を損なうことなくコンポーネント単位でバージョンアップしたり実装を置換したりできる。

一般に、コンポーネントBがコンポーネントAを即座に置換できる場合、コンポーネントBはコンポーネントAが提供するものを全て提供していなければならず、さらにコンポーネントAが使っていた他の要素以外のものを必要としないようになっていなければならない。

ソフトウェアコンポーネントは、(クラスではなく)オブジェクトまたは複数のオブジェクトの集まりであることが多いが(オブジェクト指向プログラミングの場合)、インタフェース記述言語 (IDL) に従ったバイナリテキスト形式の場合もある。後者の場合、コンポーネントはコンピュータ内に他のコンポーネントとは独立した形で存在するだろう。

実行コンテキストやネットワークリンクを通してコンポーネントがアクセスされたり共有されたりする場合、コンポーネント自身やそのインタフェースをビットストリームに変換するための何らかのシリアライズ(またはマーシャリング)が行われる。

高品質のソフトウェアコンポーネントでは再利用性(英語版)が重要な特徴である。プログラマはソフトウェアコンポーネントを設計・実装する際に、様々なプログラムから利用できるよう心がける必要がある。ソフトウェアコンポーネントを再利用可能なものにするには多大な努力と注意深さを要する。再利用性を備えたコンポーネントは次のような要件を持たなければならない。

文書が完備されている。

完全に評価済みである。

頑健性 - 入力の妥当性を完全にチェックしている。

適切なエラーメッセージやリターンコードを返すことができる。


本来想定していない使われ方をする可能性を考慮している。

歴史

1960年代、科学技術系の様々な計算に使用可能なサブルーチンライブラリが構築された。そうしたサブルーチンライブラリはよく使われる主なアルゴリズムを効率的に実装していたが、用途は科学技術計算に限られていた。商用システムでは、アセンブリ言語COBOLPL/Iや他の第二世代や第三世代の言語で書かれた再利用可能なモジュールをシステムやアプリケーションライブラリとして使用するようになっていった。

ソフトウェアをコンポーネント化するという考え方は、1968年ドイツガルミッシュ=パルテンキルヒェンで行われたNATOソフトウェア工学会議で Douglas McIlroy がMass Produced Software Components と題して発表したのが最初である[1]。この会議はソフトウェア危機と呼ばれた事態への対策を話し合うための会議であった。彼は、その考えをUNIXオペレーティングシステムパイプとフィルターという形で、世界で初めて実装した。

最近のソフトウェアコンポーネントの概念の多くを定義したのは Stepstone 社の Brad Cox であった[2]。彼はそれを「ソフトウェアIC」と呼び、Objective-Cを開発してその考え方を市場に広めようとした。このあたりの経緯は彼の著書 Object-Oriented Programming - An Evolutionary Approach(1986年)に詳しく記してある。Cox の試みはシリコンのICとソフトウェアICの明らかで基本的な違いのため、失敗に終わった。シリコンのICは物質であるから、需要と供給の関係で売買は成立する。ソフトウェアICはビットの集まりであり、電子部品と同じような売買は成立しなかったのである。

IBM は1990年代初期に System Object Model (SOM) と名づけたソフトウェアコンポーネントのアーキテクチャを提唱した。今日ではいくつかのソフトウェアコンポーネントモデルが成功しているが、それを可能にしたのはマイクロソフトOLECOMが登場したためであると主張する人もいる[3]

2010年現在、再利用可能なコンポーネントはデータ構造とそのデータ構造に適用されるアルゴリズムをカプセル化したものとなっている。ソフトウェアオブジェクトソフトウェアアーキテクチャソフトウェアフレームワークデザインパターンなどに基づいて構築されており、オブジェクト指向プログラミングおよび設計の理論を活用している。ソフトウェアコンポーネントとは、ハードウェア電子部品(electronic component)からの発想であり[4]モジュールの互換性と信頼性を重視していることを意味する。また、フレームワークなしにコンポーネントは存在しないという意味で、個々のコンポーネントよりフレームワークの方が重要だとも言われている[5]

UI

UIは機能ごとの小さなUIに分割できる。このUIコンポーネントは状態 (state)・処理 (logic)・見た目 (view) を1箇所に集約しカプセル化している[6]。カプセル化のおかげで外部(例: DOM)に依存せずそれ単体で機能できる(自己完結している)[7][8]。これらの再利用可能なUIコンポーネントを集めそれらの相互作用を定義することで、UI全体を構成することができる[9][10](c.f. マイクロフロントエンド)。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:32 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef