组件对象模型

维基百科,自由的百科全书
跳转至: 导航搜索

组件对象模型,也稱元件物件模型,英文为Component Object Model,縮寫COM,是微軟對於網頁伺服器與客戶端、增益集與Office系列软件之間互動的一項軟體元件技術。

自動化是指应用程序的COM化来让外部可以调用它們的功能,以及外部调用这些功能的方法。自动化的典型应用是微软的很多软件中都支持的巨集。由于自动化普遍使用OLE的标准接口来实现,所以這個技術有时也稱OLE自动化。

歷史[编辑]

Windows作業系統提供了三種應用程式間的通訊機制:剪貼簿(clipboard)、DDE與OLE。OLE原名是物件連結與嵌入(Object Linking and Embedding),OLE可說是DDE的改良版,OLE 1.0版提供复合文件(compound document)处理。但過於複雜,Brockschmidt, Kraig「Inside OLE」一书中提到,必须经过六个月的心灵混沌期,才能了解OLE是什么。因此OLE 2.0后,微软提出COM架构。所有OLE元件皆是COM繼承而来的,這些技術包含OLE Document和OLE Controls、Drag and Drop等。

概要[编辑]

COM是微軟自1993年便提出的元件式軟體平台,用來做行程間通訊(Inter-process communication, IPC)以及當作元件式軟體開發的平台。COM提供跟程式語言無關的方法實作一個軟體物件,因此可以在其他環境中執行。COM要求軟體元件必須遵照一個共同的接口,該接口與实现無關,因此可以隱藏实现內容,並且被其他物件在不知道其內部实现的情形下正確的使用。

COM並被實作於多個平台之上,並不限於Windows作業系統之上。但還是只有Windows最常使用COM,且某些功能已被目前的.NET平台取代。

COM元件類型[编辑]

COM是基於元件物件方式概念來設計的,在基礎中,至少要讓每個元件都可以支援二個功能:

  • 查詢元件中有哪些界面
  • 讓元件做自我生命管理,此概念的實踐即為引用計數(Reference Counting)

這二個功能即為COM的根:IUnknown介面所提供的IUnknown::QueryInterface()IUnknown::AddRef()IUnknown::Release()三個方法的由來。所有的COM元件都要實作IUnknown,表示每個COM元件都有相同的能力。

只由COM衍生實作出來的元件,稱為純COM元件

但在Windows持續發展時,Visual Basic 4.0開始支援OCX,也就是OLE Custom Control,這讓微軟開始思考要如何讓COM元件可以跨語言支援,在這樣的要求下,必須要提供一個一致的介面,以及提供一組可以呼叫介面內方法的能力,由於純COM元件只能夠支援C/C++ 的直接存取,為了要達到跨語言的能力,在COM中必須要支援在外部呼叫內部方法的機能,這個機能造就了Invoke()方法,另外為了跨語言的支援,COM應該要提供簡單的元件存取識別方式,這也就是會有GetIDsOfNames()的原因,將這些方法組合起來,定義出的必要介面,稱為IDispatch介面,所有實作此介面的,都可以支援跨語言的支援。

微軟將實作此介面的元件都稱為自動化(Automation) 元件。

相關技術[编辑]

COM曾是Windows平台下主要的軟體開發平台,並且影響至其他許多相關軟體技術。

COM+[编辑]

COM+ 是微軟Windows 2000中,Microsoft Transaction Server的強化實作版本,除了提供基本的元件交易支援外,還提供了鬆散藕合式事件(loosely-coupled events)與物件共用池(object pooling)等應用程式伺服器的能力,成為Windows 2000開始在微軟平台上主要的應用程式伺服器平台,目前.NET Framework也提供了System.EnterpriseServices命名空間以支援COM+。

Distributed COM[编辑]

Distributed COM是可以在網路上通訊的COM元件,依據RPC(Remote Procedure Call)的規範來發展的,它將COM元件的能力擴及到網路上,但是因為網路安全以及防火牆的問題,讓DCOM無法廣泛的流行。

.NET[编辑]

.NET Framework是新一代的Microsoft Windows應用程式開發平台。

参考[编辑]