複製鏈接
請複製以下鏈接發送給好友

組件對象模型

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

組件對象模型平台介紹

COM是微軟自1993年便提出的組件式軟件平台,用來做進程間通信(Inter-process communication, IPC)以及當作組件式軟件開發的平台。COM提供跟編程語言無關的方法實現一個軟件對象,因此可以在其他環境中運行。COM要求軟件組件必須遵照一個共同的接口,該接口與實現無關,因此可以隱藏實現屬性,並且被其他對象在不知道其內部實現的情形下正確的使用。
COM並被實現於多個平台之上,並不限於Windows操作系統之上。但還是隻有Windows最常使用COM,且某些功能已被目前的.NET平台取代。

組件對象模型發展歷史

Windows 操作系統提供了三種應用程式間的通訊機制:剪貼板(clipboard)、DDEOLE。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是基於組件對象方式概念來設計的,在基礎中,至少要讓每個組件都可以支持二個功能:
  • 查詢組件中有哪些界面(User Interface)
  • 讓組件做自我生命管理,此概念的實踐即為引用計數(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應用程序開發平台
參考資料
  • 1.    孟令奎.網絡地理信息系統原理與技術:科學出版社,2006年