2014年4月28日 星期一

COM 元件物件模型

元件物件模型[編輯]

元件物件模型,也稱元件物件模型,英文為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元件的能力擴及到網路上,但是因為網路安全以及防火牆的問題,讓裝置內容OM無法廣泛的流行。

沒有留言:

張貼留言