组件对象模型

  Component Object Model(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+是COM和MTS的统一。

  COM+特性:

  与 COM 一样,COM+ 基于二进制组件和基于接口的编程。通过使用透明 RPC 层,可以跨越进程和计算机边界进行远程方法调用。正如 COM 组件那样,COM+ 组件可以在成品中升级和扩展,而不会对使用它们的客户端应用程序造成负面影响。

  与 MTS 一样,COM+ 支持分布式事务和基于角色的安全性。它提供内置线程池方案,该方案与 MTS 的线程池方案一样透明。COM+ 编程模型同样利用侦听通过声明性属性向开发人员公开平台服务。但是,COM+ 比 MTS 更进一步地利用了基于属性的编程。除了事务性服务和集成安全性外,COM+ 还公开自定义对象构造、同步、对象池等服务。COM+ 的其他新功能(如排队组件和 COM+ 事件)也通过可配置的属性公开。

  COM+并不是COM的新版本,我们可以把它理解为COM的新发展,或者为COM更高层次上的应用。COM+的底层结构仍然以COM为基础,它几乎包容了COM的所有内容。有一种说法这样认为,COM+是COM、DCOM和MTS(Microsoft Transaction Server)的集成,这种说法有一定的道理,因为COM+确实综合了这些技术要素。但更重要的一点是,COM+倡导了一种新的概念,它把COM组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系统。 

  COM是个开放的组件标准,它有很强的扩充和扩展能力,从COM到DCOM,再到MTS的发展过程也充分说明了这一点。对COM有使用经验的读者一定可以感觉到,虽然COM已经改变了Windows程序员的应用开发模式,把组件的概念融入到Windows应用中,但是由于种种原因,DCOM和MTS的许多优越性还没有为广大的Windows程序员所认识。MTS针对企业应用和Web应用的特点,在COM/DCOM的基础上又添加了许多功能和特性,包括事务特性、安全模型、管理和配置等,MTS使COM成为一个完整的组件体系结构。由于历史的原因,COM、DCOM和MTS相互之间并不很融洽,难以形成统一的整体,不过,这种状况很快就要结束,因为COM+将把这三者有效地统一起来,形成一个全新的、功能强大的组件体系结构,并且把DCOM和MTS的各种优势以更为简捷的方式带给Windows 2000程序员和用户。 

  COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现,已经成为Microsoft系统平台策略和软件发展策略的一部分。COM+继承了COM几乎全部的优势,同时又避免了COM实现方面的一些不足。COM+紧紧地与操作系统结合起来,通过系统服务为应用程序提供全面的服务。

  COM组件类型:

  进程内组件:组件是在主调应用程序的进程范围内运行,是以DLL方式实现的。组件的实现是快速的,但由于和应用程序公用一个进程,导致了不安全的因素。