组件对象模型

一种面向对象的编程模式
收藏
0有用+1
0
组件对象模型(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应用程序开发平台