組件對象模型

組件對象模型

組件對象模型(Component Object Model,COM) 是基於Windows 平台的一套組件對象接口標準,由一組構造規範和組件對象庫組成。一般的對象是由數據成員和作用在其上的方法組成,而組件對象和一般對象雖有相似性,但又有較大不同。組件對象不使用方法而用接口來描述自身。接口被定義為“在對象上實現的一組語義上相關的功能”,其實質是一組函式指針表,每個指針必須初始化指向某個具體的函式體。一個組件對象實現的接口數量沒有限制。

平台介紹

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

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

歷史

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是基於組件對象方式概念來設計的,在基礎中,至少要讓每個組件都可以支持二個功能:

•查詢組件中有哪些界面

•讓組件做自我生命管理,此概念的實踐即為引用計數(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組件的能力擴及到網路上,但是因為網路安全以及防火牆的問題,讓設備上下文OM無法廣泛的流行。

.NET

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

相關詞條

相關搜尋

熱門詞條

聯絡我們