Chapter 3.
COMとは?



COMとは、何か?このホームページの根源にかかわる問題ですが、今まで、説明を飛ばしてきました。

COMとは、『Component Object Model』の頭文字COMを取ってCOMです。
日本語では、そのままコムと呼びます。直訳すれば、『構成オブジェクト手法』ですが、『コンポーネントオブジェクト指向』とでもしておきましょうか。

そして、このホームページ玄関に出てくる"・・・話題をCOM/OLE関連の技術に絞るため・・・"という文言で、COMの直後に出てくる単語OLE。 これはローマ字をそのまま呼んで、オー・エル・イーと呼びます。また、オーレと呼ぶ方もいます。 OLEとは、『Object Linking and Embedding』の頭文字を合わせてOLEです。 『オブジェクトのリンクと埋め込み』と日本語に訳されています。

これは余談ですが、その昔、COMが普及する前は、COMはOLEにのみ使われていました。そのため、COM≒OLEという式が成り立っていました。 その時代は、COMを勉強するためには、OLEを勉強することになり、COMとOLEを同等に扱う人を生み出す原因となってしまいました。 また、OLEの難解さから、COMも難解だと勘違いした人々を生み出しました。
う~ん、懐かしい。(^_^;



とりあえず、OLEは置いときましょう。
結論から言うと、COMとは、オブジェクト指向の利点と、実行モジュールのダイナミックリンクの利点を、同時に利用するための プログラミング手法であり仕様です。

通常、COMオブジェクトはコンポーネントと呼ばれます。そして、コンポーネントにアクセスするインターフェースは、COM独特のものになります。 それゆえに、COMで、最も重要なのは、インターフェースです。COMは、インターフェースで始まり、インターフェースに終わるのです。

これから、このCOM研究室では、コンポーネントにインターフェースを介してアクセスするものを、クライアントと呼びます。



まあ、うだうだと書いても仕方ないので、コンポーネントの特徴をまとめます。

コンポーネントの条件
ダイナミックリンク コンポーネントを動的にリンク出来なければなりません。ただ、勘違いの無いように言っておくと、このダイナミックリンクとは、DLLだけを指すわけではありません。インターフェースを介して接続できるものであれは、EXEでもコンポーネントに成り得ます。
カプセル化 これはCOMを堅牢にするために必要なことです。コンポーネントを動的に交換できても、コンポーネントとクライアントの通信方法が、変更されてはいけないのです。それは、つまり、『一度定めたインターフェースは、変更してはならない!』というこです。そのため、外部に公開するコンポーネントの内部は完全なブラックボックスとしなければなりません。これは結果としてOOPにおけるカプセル化と同じことです。

コンポーネントの利点・欠点
オブジェクトの実行時要求 必要なインターフェースは、実行中にクライアントから動的に要求されます。インターフェースが無ければ、代わりを使う?メッセージを表示する?と対応策が練れます。"DLLのバージョンが違うから、アプリが動かん!"と言う苦情が減ること請け合い。
単純なアウトプロセスコール 簡単にプロセス間通信を行えます。LPCもRPCも簡単に作れます!これはコンポーネントの利点と言うよりは、COMのバックボーンのおかげです。
再利用性 オブジェクト指向だから当然ですね。ただし、実装の継承はサポートしていません。
言語からの独立 特定のプログラミング言語に依存しないことを意味します。今の所、Windows上で動作する全てのC/C++コンパイラ、VB(S or A)、VJ++しか使えませんが・・・。



いかがでしたでしょうか? 次回からは、実際に単純なCOMオブジェクトを作成しながら、今回述べたことを詳細に解説していきます。


前へ 次へ
COM研究室へ
総合トップへ