- ベストアンサー
COMコンポーネントって何?
よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
失礼ですが、クラスをご存知ないのであればCOMは多分 全く理解できないでしょうねぇ クラスについても、ご自分で勉強が必要だとは思いますが 簡単に説明しておきます。 構造体(属性)に、関数(操作)を加え、カプセル化したものです。 従来のプログラミングでは、変数をばらばらに扱わず、 構造体と呼ばれる型に関係ある変数をまとめて、 プログラム中のデータ構造が明確になるようにしておきました。 そこで、この構造体に専属の関数を加えてしまえば、 その構造体は単独で自分の面倒をみることが出来るようになります。 それがクラスです。 その結果、プログラム中のデータや処理が、クラス単位で整理され、 それぞれ部品のように組み替えが可能になりました。 このように、クラス単位にプログラムを分割することで 巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。 また、クラスには親と子があり、「継承」という考えを用いて どんどんバージョンアップや特化を行うことが容易です。 VBで説明すると、 Dim value as A として変数を宣言した場合、クラスは「A」です。 valueはオブジェクトや、インスタンスと呼ばれます。 valueを使って、Aに含まれる関数を呼び出して、valueを 操作することが出来ます。 value.Init() 等。 ざっくり説明するとこんな感じです。 詳細については、各言語の書籍を参照してください。 このようにして作ったクラスを、 ・他の言語から使いたい ・ネットワーク経由で使いたい などと言った機能を実現する、Microsoft提供の方法の一つが、 COMやDCOMと呼ばれるものです。 COMは、他のプログラムからの使いまわしに強いので、 一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから 呼び出しが可能です。 また、COM自体のバージョンが上がっても、それを呼び出してる プログラム自体には変更の必要がありません。
その他の回答 (5)
- hyde-la
- ベストアンサー率28% (42/146)
すいません、クラスオブジェクトではありません、 「クラス」でお願いします。 コンピュータが扱うデータは基本的にすべて数値ですが、 アスキーコードなど、ある範囲の数値を人間に見やすい 文字に変換可能なものを「テキスト」といいます。これはご存知の通り。 そして、そうでないものが「バイナリ」です。 つまり、BMPやJPEG,EXEはバイナリファイルです。 HTMLやJavaScript、ソースファイル等はテキストファイルです。 語弊を承知でより簡便に言うなら、「文字」しか書いてないのはテキスト、 文字以外の数値があるならバイナリです。 ソースファイルはテキストから、コンパイル・リンクの過程でバイナリファイルとなります。 COMオブジェクトは、この状態でないとなりませんので、 つまりソースが何の言語であったかなんてことは どうでもよくなっている、ということです。 因みに、COMではC・C++でいうヘッダファイルの代わりに IDLというインターフェイス定義言語という専用の簡易な言語を使います。 これは、ただの定義を記述する言語ですので非常に簡単で、どちらかというと C言語みたいな、設定ファイルです。
補足
ありがとうございます。 なんとなく見えてきました。あとクラスってどういうことなんでしょう?クラスの意味がはっきり分かりません。
- hyde-la
- ベストアンサー率28% (42/146)
ごめんなさい、説明が抜けました。 COMの特徴についてですが・・・ ・インターフェイスの統一的な呼び出し手段がある ・参照カウンタを持つ という重要な二点のことを説明忘れてました。 COMは、クラスオブジェクトですので継承によって さまざまなインターフェイスが追加されて行きます。 それらを統一的に呼び出す手段として、QueryInterface メソッドが存在してます。 参照カウンタは、COMが参照されるたびにインクリメントし 解放されるとデクリメントするカウンタ値です。 これが0になった時にメモリから削除されます。 Javaをご存知でしたら、GarbegeCorrectorと考えると分かり易いと 思います。 要するに、C++でも容易にメモリリークを防げる仕組み、と。 実際にCOMを作ってみるのでしたら、やはり書籍があると 助かると思います。 VBだと私はちょっと解りません。(簡単に出来ると思いますが)
補足
クラスオブジェクトってふつうのオブジェクトと何が違うのでしょうか?あと、バイナリってなんですか? 超基本的な質問ですみません。
- hyde-la
- ベストアンサー率28% (42/146)
ComponentObjectModelの略です。 コンポーネントとは、ソフトウェアの部品として機能する オブジェクトのことです。 関数との違いは、クラスとしてカプセル化してあるので 保守性・再利用性とともに、ブラックボックス化しているので 利用が簡単、という点もあります。 定義については他の方がおっしゃってる通りなので COMを使うメリットと特徴について軽く説明しておきます。 また、ActiveXやDCOMなども含めて、COMといってしまうことが 多々有るようです。 CORBAをご存知なら、それに似たものと考えてください。 利点: 言語・処理系に依存しない(バイナリ)コンポーネント つまり、VC++でCOMを作ってそれをVBやDelphiから自由に呼び出せる。 計量で高速なコンポーネントも設計可能。 実際のCOM作成について: DLLとの違いは、DLLが関数ベースであるのに対して COMは基本的にクラスベースなので、独立性・再利用性・保守性の高い コンポーネントの作成が簡易です。 DLLでも一応クラスの形式を取ることは出来ますが、バージョンアップ時 インターフェイスが変わってしまうと問題があります。 COMではJavaのinterface,implimentに似た仕組みで インターフェイスを統一できます。 ネットワーク越しに実行出来る(透過性)ものをDCOM、 GUI要素を持つCOMをActiveXなどと呼び分けるのが従来のようです。 これはMicrosoft社の技術の重要なポイントですので Windows環境でプログラムを作る以上、押さえておかねばならない ネジクギ的存在になってゆくことでしょう。
- すもあん(@ryoyama)
- ベストアンサー率56% (45/80)
COMとはバイナリをどのように作るかを示す規約で、ソフトウェアをコンポーネントで1つの管理単位とし、その中にあるオブジェクトを再利用可能にします。 ですから、COMで開発したソフトウェアは、すべてソフトウェアのバイナリの部品として再利用できます。 これ以上簡単な説明をしようとすると、いろいろと誤解が生じそうなので、とりあえずこんなところでしょうか。
Microsoft Developer Network(MSDN)には、以下の ように書かれています。 『COMとは』 COMはActiveXコントロールとOLEの土台となる 基本的な"オブジェクトモデル"です。COMによって、 オブジェクトの機能は、ほかのコンポーネントや ホストアプリケーションに公開されます。COMは オブジェクトの公開方法と、プロセス間、または ネットワーク間での公開の動作方法を定義します。 また、COMはオブジェクトのライフサイクルも 定義します。 一応Windowsプログラムでは最近よく使われるように なってきているようです。 #結構使うのは難しいですが・・・ もっと詳しく勉強したいのであれば、プログラムの 本が置いてある本屋さんに行って、本を購入しても いいのではないでしょうか。 ではでは☆
お礼
ありがとうございました。 非常に丁寧に御回答いただきありがとうございました。 仕事柄プログラムは使わないため、今は分からないことだらけですが、今後ともよろしくお願いします。 (今はASPでWEBアプリを作りたいと思ってます。)