-PR-
解決済み

COMコンポーネントって何?

  • 困ってます
  • 質問No.19202
  • 閲覧数389
  • ありがとう数16
  • 気になる数2
  • 回答数6
  • コメント数0

お礼率 53% (210/390)

よく、COMコンポーネントって聞くんですが、何のことかわかりません。VBやVBAのような言語名ではないことは、なんとなく分かるのですが・・・。できるだけわかりやすく教えてください。
通報する
  • 回答数6
  • 気になる2
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.6
レベル10

ベストアンサー率 28% (42/146)

失礼ですが、クラスをご存知ないのであればCOMは多分
全く理解できないでしょうねぇ

クラスについても、ご自分で勉強が必要だとは思いますが
簡単に説明しておきます。
構造体(属性)に、関数(操作)を加え、カプセル化したものです。
従来のプログラミングでは、変数をばらばらに扱わず、
構造体と呼ばれる型に関係ある変数をまとめて、
プログラム中のデータ構造が明確になるようにしておきました。
そこで、この構造体に専属の関数を加えてしまえば、
その構造体は単独で自分の面倒をみることが出来るようになります。
それがクラスです。
その結果、プログラム中のデータや処理が、クラス単位で整理され、
それぞれ部品のように組み替えが可能になりました。

このように、クラス単位にプログラムを分割することで
巨大なプログラムを明瞭にする言語をオブジェクト指向言語といいます。

また、クラスには親と子があり、「継承」という考えを用いて
どんどんバージョンアップや特化を行うことが容易です。

VBで説明すると、
Dim value as A
として変数を宣言した場合、クラスは「A」です。
valueはオブジェクトや、インスタンスと呼ばれます。
valueを使って、Aに含まれる関数を呼び出して、valueを
操作することが出来ます。
value.Init()
等。

ざっくり説明するとこんな感じです。
詳細については、各言語の書籍を参照してください。

このようにして作ったクラスを、
・他の言語から使いたい
・ネットワーク経由で使いたい
などと言った機能を実現する、Microsoft提供の方法の一つが、
COMやDCOMと呼ばれるものです。
COMは、他のプログラムからの使いまわしに強いので、
一度作っておけば、VB、Delphiは勿論、VBScript、JavaScrips、WSHなどから
呼び出しが可能です。
また、COM自体のバージョンが上がっても、それを呼び出してる
プログラム自体には変更の必要がありません。
お礼コメント
holydevil

お礼率 53% (210/390)

ありがとうございました。
非常に丁寧に御回答いただきありがとうございました。
仕事柄プログラムは使わないため、今は分からないことだらけですが、今後ともよろしくお願いします。
(今はASPでWEBアプリを作りたいと思ってます。)
投稿日時 - 2000-12-21 16:07:31
関連するQ&A
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1

Microsoft Developer Network(MSDN)には、以下の ように書かれています。 『COMとは』 COMはActiveXコントロールとOLEの土台となる 基本的な"オブジェクトモデル"です。COMによって、 オブジェクトの機能は、ほかのコンポーネントや ホストアプリケーションに公開されます。COMは オブジェクトの公開方法と、プロセス間、または ネ ...続きを読む
Microsoft Developer Network(MSDN)には、以下の
ように書かれています。
『COMとは』
COMはActiveXコントロールとOLEの土台となる
基本的な"オブジェクトモデル"です。COMによって、
オブジェクトの機能は、ほかのコンポーネントや
ホストアプリケーションに公開されます。COMは
オブジェクトの公開方法と、プロセス間、または
ネットワーク間での公開の動作方法を定義します。
また、COMはオブジェクトのライフサイクルも
定義します。

一応Windowsプログラムでは最近よく使われるように
なってきているようです。
#結構使うのは難しいですが・・・

もっと詳しく勉強したいのであれば、プログラムの
本が置いてある本屋さんに行って、本を購入しても
いいのではないでしょうか。

ではでは☆


  • 回答No.2
レベル9

ベストアンサー率 56% (45/80)

COMとはバイナリをどのように作るかを示す規約で、ソフトウェアをコンポーネントで1つの管理単位とし、その中にあるオブジェクトを再利用可能にします。 ですから、COMで開発したソフトウェアは、すべてソフトウェアのバイナリの部品として再利用できます。 これ以上簡単な説明をしようとすると、いろいろと誤解が生じそうなので、とりあえずこんなところでしょうか。
COMとはバイナリをどのように作るかを示す規約で、ソフトウェアをコンポーネントで1つの管理単位とし、その中にあるオブジェクトを再利用可能にします。
ですから、COMで開発したソフトウェアは、すべてソフトウェアのバイナリの部品として再利用できます。

これ以上簡単な説明をしようとすると、いろいろと誤解が生じそうなので、とりあえずこんなところでしょうか。
  • 回答No.3
レベル10

ベストアンサー率 28% (42/146)

ComponentObjectModelの略です。 コンポーネントとは、ソフトウェアの部品として機能する オブジェクトのことです。 関数との違いは、クラスとしてカプセル化してあるので 保守性・再利用性とともに、ブラックボックス化しているので 利用が簡単、という点もあります。 定義については他の方がおっしゃってる通りなので COMを使うメリットと特徴について軽く説明しておきます。 ま ...続きを読む
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環境でプログラムを作る以上、押さえておかねばならない
ネジクギ的存在になってゆくことでしょう。
  • 回答No.4
レベル10

ベストアンサー率 28% (42/146)

ごめんなさい、説明が抜けました。 COMの特徴についてですが・・・ ・インターフェイスの統一的な呼び出し手段がある ・参照カウンタを持つ という重要な二点のことを説明忘れてました。 COMは、クラスオブジェクトですので継承によって さまざまなインターフェイスが追加されて行きます。 それらを統一的に呼び出す手段として、QueryInterface メソッドが存在してます。 参照 ...続きを読む
ごめんなさい、説明が抜けました。
COMの特徴についてですが・・・

・インターフェイスの統一的な呼び出し手段がある
・参照カウンタを持つ

という重要な二点のことを説明忘れてました。
COMは、クラスオブジェクトですので継承によって
さまざまなインターフェイスが追加されて行きます。
それらを統一的に呼び出す手段として、QueryInterface
メソッドが存在してます。

参照カウンタは、COMが参照されるたびにインクリメントし
解放されるとデクリメントするカウンタ値です。
これが0になった時にメモリから削除されます。
Javaをご存知でしたら、GarbegeCorrectorと考えると分かり易いと
思います。
要するに、C++でも容易にメモリリークを防げる仕組み、と。

実際にCOMを作ってみるのでしたら、やはり書籍があると
助かると思います。
VBだと私はちょっと解りません。(簡単に出来ると思いますが)
補足コメント
holydevil

お礼率 53% (210/390)

クラスオブジェクトってふつうのオブジェクトと何が違うのでしょうか?あと、バイナリってなんですか?
超基本的な質問ですみません。
投稿日時 - 2000-12-19 11:33:58
  • 回答No.5
レベル10

ベストアンサー率 28% (42/146)

すいません、クラスオブジェクトではありません、 「クラス」でお願いします。 コンピュータが扱うデータは基本的にすべて数値ですが、 アスキーコードなど、ある範囲の数値を人間に見やすい 文字に変換可能なものを「テキスト」といいます。これはご存知の通り。 そして、そうでないものが「バイナリ」です。 つまり、BMPやJPEG,EXEはバイナリファイルです。 HTMLやJavaScript、ソース ...続きを読む
すいません、クラスオブジェクトではありません、
「クラス」でお願いします。

コンピュータが扱うデータは基本的にすべて数値ですが、
アスキーコードなど、ある範囲の数値を人間に見やすい
文字に変換可能なものを「テキスト」といいます。これはご存知の通り。
そして、そうでないものが「バイナリ」です。
つまり、BMPやJPEG,EXEはバイナリファイルです。
HTMLやJavaScript、ソースファイル等はテキストファイルです。

語弊を承知でより簡便に言うなら、「文字」しか書いてないのはテキスト、
文字以外の数値があるならバイナリです。

ソースファイルはテキストから、コンパイル・リンクの過程でバイナリファイルとなります。
COMオブジェクトは、この状態でないとなりませんので、
つまりソースが何の言語であったかなんてことは
どうでもよくなっている、ということです。

因みに、COMではC・C++でいうヘッダファイルの代わりに
IDLというインターフェイス定義言語という専用の簡易な言語を使います。
これは、ただの定義を記述する言語ですので非常に簡単で、どちらかというと
C言語みたいな、設定ファイルです。
補足コメント
holydevil

お礼率 53% (210/390)

ありがとうございます。
なんとなく見えてきました。あとクラスってどういうことなんでしょう?クラスの意味がはっきり分かりません。
投稿日時 - 2000-12-20 13:08:55
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ