COM为组件和应用程序之间提供了进行通信的统一标准,为组件程序提供了一个面向对象的活动环境。COM标准包括规范和实现两大部分,规范部分定义了组件和组件之间通信的机制,这些规范不依赖于任何特定的语言和操作系统,只要遵循该规范,任何语言都可以作为组件开发的原始语言;COM标准的实现部分是COM库,COM库为COM规范的具体实现提供了一些核心服务。
COM除了客户/服务器模型特性以外,还具有语言无关性、进程透明性以及可重用机制。
COM规范的定义不依赖于任何特定的语言,因此编写组件对象所使用的语言和编写客户程序使用的语言可以不同,只要他们都能够生成符合COM规范的可执行代码即可。COM标准与面向对象的编程语言不同,它所采用的是一种二进制代码级别的标准,而不是源代码级别的标准。面向对象编程语言中定义的对象不能够跨语言进行调用,大大限制了对象的重用。COM对象把OOP(面向对象编程)语言中的对象封装到一个二进制代码里,并提供统一的接口,可以被其它编程语言所使用。
COM的进程透明性是指,运行在客户程序中的代码与运行在服务程序中的代码可以在一个进程中,也可以在不同的进程中,这取决于COM编程的方式,但是这种进程的运行对用户来说是透明的,用户可以不关心进程的位置。通常COM代码运行的方式有两种:一种是运行在客户进程里,另外一种是运行在客户进程之外。显然前者具有很高的效率,因为它可以共享客户进程里的数据,但是前者在稳定性方面就不及后者健壮,后者COM组件的不稳定性不会影响到客户进程的运行,前者则会在这种情况下崩溃。
可重用性是所有组件模型要实现的共同目标,尤其对大型的软件系统,软件的可重用性具有非常重要的意义。对COM对象的客户程序来说,它只是通过接口使用对象提供的服务,并不了解对象内部的实现过程,因此组建的重用性可以建立在组件对象的行为方式上,而不是在具体实现上,这是建立重用的关键。COM通过两种机制实现对象的重用,一种是包容方式,一个对象需要调用另外一个对象的功能时自行调用,而不需要用户干预;另外一种是聚合方式,一个对象在需要另外一个对象的功能时只是把该对象的接口暴露给用户,由用户通过接口进行功能调用。对象重用是COM规范很重要的一个方面,它保证了COM可以用于构建大规模的软件系统,使复杂的系统简化为一些相对简单的组件对象模块,体现了面向对象的思想。