コンポーネントベースのソフトウェアエンジニアリング
コンポーネントベースのソフトウェアエンジニアリング ( CBSE )は、 コンポーネントベースの開発 ( CBD ) とも呼ばれ、特定のソフトウェアシステム全体で利用可能な幅広い機能に関する懸念の分離を強調するソフトウェアエンジニアリングのブランチです。疎結合の独立したコンポーネントをシステムに定義、実装、および構成するための再利用ベースのアプローチです。このプラクティスは、ソフトウェア自体とそのようなソフトウェアを後援する組織に、短期と長期の両方で同様に広範囲の利益をもたらすことを目的としています。
ソフトウェアエンジニアリングの実践者は、コンポーネントをサービス指向の開始プラットフォームの一部と見なします。コンポーネントは、Webサービスでは、例えば、この役割を果たし、最近では、コンポーネントをサービスにWebサービスによって変換されるサービス指向アーキテクチャー(SOA)、で、その後、通常のコンポーネントのそれを超え、さらに特性を継承します。
コンポーネントはイベントを生成または消費でき、イベント駆動型アーキテクチャ(EDA)に使用できます。
コンポーネントの定義と特性
個々のソフトウェアコンポーネントは、関連する機能(またはデータ)のセットをカプセル化するソフトウェアパッケージ、Webサービス、Webリソース、またはモジュールです。
すべてのシステムプロセスは個別のコンポーネントに配置されるため、各コンポーネント内のすべてのデータと機能は(クラスのコンテンツと同様に)意味的に関連しています。この原則のため、コンポーネントはモジュール式で凝集しているとよく言われます。
システム全体の調整に関して、コンポーネントはインターフェースを介して互いに通信します 。コンポーネントは、システムの残りの部分にサービスを提供していますと、それは他のコンポーネントが利用できるサービスを指定してインタフェースを採用しており、どのように彼らがそうすることができます。このインターフェースは、コンポーネントのシグネチャと見なすことができます-クライアントは、コンポーネントを使用するためにコンポーネントの内部動作(実装)を知る必要はありません。この原則により、 カプセル化されたと呼ばれるコンポーネントが生成されます 。この記事内のUMLの図は、コンポーネントの外縁に取り付けられたロリポップシンボルによって提供されるインターフェースを表しています。
ただし、コンポーネントが機能するために別のコンポーネントを使用する必要がある場合、必要なサービスを指定する使用済みインターフェイスを採用します。この記事のUMLの図では、 使用されているインターフェースは、コンポーネントの外縁に接続されたオープンソケットシンボルで表されています。
構成要素の別の重要な属性は、後継成分(インターフェースを介して表現される)初期構成要素の要件を満たしている場合、コンポーネントは、(設計時または実行時に)別のものを置き換えることができるように、それらは、 置換可能であることです。その結果、コンポーネントは、そのコンポーネントが動作するシステムを破壊することなく、更新されたバージョンまたは代替品のいずれかに置き換えることができます。
コンポーネントを代替するエンジニアの経験則として、コンポーネントBが少なくともコンポーネントAが提供したものを提供し、コンポーネントAが使用したもの以上を使用しない場合、コンポーネントBはコンポーネントAをすぐに置き換えることができます。
ソフトウェアコンポーネントは、多くの場合、バイナリではなくテキスト形式でオブジェクト(クラスではなく)またはオブジェクトのコレクション(オブジェクト指向プログラミングから)の形をとり、一部のインターフェイス記述言語(IDL)に準拠して、コンポーネントが他のコンポーネントから独立して存在できるようにしますコンピューターで。つまり、コンポーネントはソースコードを変更せずに動作します。ただし、コンポーネントのソースコードの動作は、ライターによって提供されるアプリケーションの拡張性に基づいて変わる場合があります。
コンポーネントが実行コンテキストまたはネットワークリンク全体でアクセスまたは共有される場合、コンポーネントをその宛先に配信するために、シリアル化やマーシャリングなどの手法がよく使用されます。
再利用性は、高品質のソフトウェアコンポーネントの重要な特性です。プログラマは、多くの異なるプログラムが再利用できるようにソフトウェアコンポーネントを設計および実装する必要があります。さらに、ソフトウェアコンポーネントがユーザーと直接対話する場合は、コンポーネントベースのユーザビリティテストを検討する必要があります。
効果的に再利用可能なソフトウェアコンポーネントを作成するには、多大な労力と意識が必要です。コンポーネントは次のとおりである必要があります。
- 完全に文書化
- 徹底的にテスト
- 堅牢-包括的な入力有効性チェック
- 適切なエラーメッセージまたはリターンコードを返すことができます
- 予期せぬ使用に置かれることを意識して設計されています
1960年代、プログラマーは、広範な工学および科学アプリケーションで再利用可能な科学サブルーチンライブラリを構築しました。これらのサブルーチンライブラリは、明確に定義されたアルゴリズムを効果的な方法で再利用しましたが、アプリケーションの領域は限られていました。商用サイトは、システムおよびユーザーアプリケーションライブラリの両方を使用して、アセンブリ言語、COBOL、PL / 1、およびその他の第2世代および第3世代言語で書かれた再利用可能なモジュールからアプリケーションプログラムを定期的に作成しました。
2010年現在、最新の再利用可能なコンポーネントは、データ構造と、データ構造に適用されるアルゴリズムの両方をカプセル化します。コンポーネントベースのソフトウェアエンジニアリングは、ソフトウェアオブジェクト、ソフトウェアアーキテクチャ、ソフトウェアフレームワーク、ソフトウェアデザインパターンの以前の理論、およびこれらすべてのオブジェクト指向プログラミングとオブジェクト指向設計の広範な理論に基づいています。たとえば、電気通信で使用されるハードウェアコンポーネントのアイデアのようなソフトウェアコンポーネントは、最終的に互換性と信頼性を高めることができると主張しています。一方、フレームワークではなく独立したコンポーネントに焦点を当てることは間違いであると主張されます(独立したコンポーネントがなければ、コンポーネントは存在しません)。
歴史
ソフトウェアはコンポーネント化されなければならないという考えが-プレハブのコンポーネントから構築された-最初のミサは、ソフトウェアコンポーネントをプロデュース題しガルミッシュ、ドイツ、1968年のソフトウェア工学上のNATO会議でダグラス・マクロイのアドレス、と顕著になりました。会議は、いわゆるソフトウェア危機に対処するために着手しました。その後、McIlroyがUnixオペレーティングシステムにパイプとフィルターを追加したことが、このアイデアのインフラストラクチャの最初の実装でした。
StepstoneのBrad Coxは、ソフトウェアコンポーネントの現代的な概念を大部分定義しました。彼はそれらをソフトウェアICと呼び、Objective-Cプログラミング言語を発明することにより、これらのコンポーネントのインフラストラクチャと市場の構築に着手しました。 (彼はこの見解を著書「 オブジェクト指向プログラミング-進化的アプローチ 1986」で要約しています。)
ソフトウェアコンポーネントは、2つの異なるコンテキストと2種類で使用されます:i)コンポーネントをパーツとして使用して単一の実行可能ファイルを構築する、またはii)各実行可能ファイルは、インターネットまたはイントラネットを使用してコンポーネントが相互に連携する分散環境でコンポーネントとして扱われますIPC(プロセス間通信)の通信プロトコル。上記は前者に属し、以下は後者に属します。
IBMは1990年代初頭にシステムオブジェクトモデル(SOM)でその道をリードしました。反応として、Microsoftは、オブジェクトのリンクと埋め込み(OLE)およびコンポーネントオブジェクトモデル(COM)を使用したコンポーネントソフトウェアの実際の展開の道を開きました。 2010年現在、多くの成功したソフトウェアコンポーネントモデルが存在します。
建築
複数のソフトウェアコンポーネントを実行するコンピューターは、多くの場合、アプリケーションサーバーと呼ばれます。このアプリケーションサーバーとソフトウェアコンポーネントの組み合わせは、通常、分散コンピューティングと呼ばれます。これの典型的な実世界のアプリケーションは、例えば、金融アプリケーションまたはビジネスソフトウェアです。
コンポーネントモデル
コンポーネントモデルは、コンポーネントが満たす必要があるプロパティ、コンポーネントの構成のためのメソッドとメカニズムの定義です。
過去数十年の間に、研究者と開業医は異なる特性を持ついくつかのコンポーネントモデルを提案してきました。既存のコンポーネントモデルの分類を次に示します。コンポーネントモデルの例は次のとおりです。エンタープライズJavaBean(EJB)モデル、コンポーネントオブジェクトモデル(COM)モデル、.NETモデル、X-MANコンポーネントモデル、およびCommon Object Request Broker Architecture(CORBA) )コンポーネントモデル。
テクノロジーズ
- ビジネスオブジェクトテクノロジー
- ニューイ
- 特定のドメイン用のコンポーネントベースのソフトウェアフレームワーク
- 高度なコンポーネントフレームワーク
- 地球システムモデリングフレームワーク(ESMF)
- 資産管理のためのMASH IoTプラットフォーム
- 家電製品のソフトウェア用に開発されたKOALAコンポーネントモデル
- React(JavaScriptライブラリ)
- ソフトウェア通信アーキテクチャ(JTRS SCA)
- コンポーネント指向プログラミング
- OSGi Service Platformで定義されているバンドル
- モジュラーjs、css、およびその他のアセット用のコンポーネントWebプラットフォーム
- Microsoftのコンポーネントオブジェクトモデル(OCX / ActiveX / COM)およびDCOM
- TASCS-SciDAC Center for Technology for Advanced Scientific Component Software
- Eiffelプログラミング言語
- Sun Microsystems(現在のOracle)のエンタープライズJavaBean
- フローベースのプログラミング
- ObjectWebのフラクタルコンポーネントモデル
- MidgardおよびPHP用のMidCOMコンポーネントフレームワーク
- Oberon、Component Pascal、およびBlackBox Component Builder
- UNU-IISTのコンポーネントベースのモデル駆動型設計のrCOSメソッド
- ObjectWebのSOFAコンポーネントシステム
- Microsoft .NETのSystem.ComponentModel名前空間
- Unity Technologiesが開発したUnity
- Epic Gamesが開発したアンリアルエンジン
- OpenOffice.orgオフィススイートのUNO
- BorlandのVCLおよびCLXおよび同様の無料LCLライブラリ。
- Mozilla FoundationのXPCOM
- 複合文書技術
- Oberon SystemおよびBlackBox Component Builderのアクティブドキュメント
- KParts、KDE複合ドキュメントテクノロジー
- オブジェクトのリンクと埋め込み(OLE)
- OpenDoc
- 分散コンピューティングソフトウェアコンポーネント
- Microsoftの.NET Remoting
- プラン9用に開発され、Infernoおよびその他のシステムで使用される9P分散プロトコル。
- オブジェクト管理グループのCORBAおよびCORBAコンポーネントモデル
- freedesktop.org組織のD-Bus
- DCOMおよびMicrosoftのCOM(およびCOM +)以降のバージョン
- IBMのDSOMおよびSOM(現在廃止)
- ZeroCの氷
- SunのJava EE
- SICSのKompics
- OpenOffice.orgのユニバーサルネットワークオブジェクト(UNO)
- ウェブサービス
- 残り
- Zope CorporationのZope
- Remedy ITによるAXCIOMA(分散、リアルタイム、組み込みシステムのコンポーネントフレームワーク)
- COHORTE isandlaTechによる、堅牢で信頼性の高い分散型サービス指向コンポーネントベースのアプリケーションを実行および管理するためのクロスプラットフォームランタイム
- DX-MANサービスモデル
- 汎用プログラミングは、データ表現からアルゴリズムを分離することを強調しています
- インターフェイス記述言語(IDL)
- オープンサービスインターフェイス定義(OSID)
- COMとCORBAの両方の一部
- プラットフォームに依存しないコンポーネントモデリング言語
- SIDL-科学的インターフェース定義言語
- Babel Scientific Programming Language Interoperability Systemの一部(SIDLとBabelは、CCAとSciDAC TASCS Centerのコアテクノロジーです-上記参照)
- World Wide Web Consortium(W3C)のSOAP IDL
- WDDX
- SOAPの前身であるXML-RPC
- Inversion of Control(IoC)およびPlain Old C ++ / Java Object(POCO / POJO)コンポーネントフレームワーク
- パイプとフィルター
- Unixオペレーティングシステム