COM技术内幕 || 这样理解COM组件

本文目的:弄清楚何为COM组件。倘若COM组件于你也是朦胧无定义的,请仔细阅读,能懂!

简述

       一个应用程序通常是由单个的二进制文件组成的。当编译器生成此应用程序之后,在对下一版本重新编译并发行新生成的版本之前,应用程序一般不会发生任何变化。操作系统、硬件及客户需求的改变都必须等到整个应用程序被重新编译之后才能够得以认可。整个软件工业就这样随着已发行软件的日益“老化”而奔向未来。

         目前这种状况已经发生了变化。人们认识到应用程序在发行之后不应该保持那种静止的状态。开发人员应找出一种方法,以能够给已经发行的软件不断地注入新的活力。这种解决方案就是将单个的应用程序分隔成多个独立的部分,也即组件(如图1-1所示)。

                   

       这种做法的好处是可以随着技术的不断发展而用用的组件取代已有的组件(参见图1-2)。此时的应用程序将不再像以前那样是一个在发行之前就已命中注定要过时的静态实体,而是可以随着新组件不断取代旧的组件而趋于完善。并且从已有的组件可以建立全新的应用。

                                         

       传统的作法是将应用程序分割成文件、模块或类,然后将它们编译并链接成一个铁板一块状的应用程序。它与组件建立应用程序的过程(称为是组件架构)有很大的不同。一个组件同一个微型应用程序类似,即都是已经编译、链接好并可以使用的了,应用程序就是由多个这样的组件打包而得到的。各定制的组件可以在运行时同其它组件连接起来已构成某个应用程序。在需要对应用程序进行修改或改进时,只需将构成此应用程序的组件中的某个用新的版本替换掉即可。

       当然将铁板状的应用程序拆分成组件需要一个强大的“锤子”。我们所用的“锤子”就被称作COM。COM,即组件对象模型,是关于如何建立组件以及如何通过组件建构应用程序的一个规范。Microsoft开发COM,其目的是使用Microsoft的各种软件产品更加灵活、更具有动态性并且更易于定制。目前Microsoft的几乎所有应用程序都使用了COM。Microsoft的ActiveX技术就是基于COM而建立起来的。

        建立可用于组装应用程序的COM组件,那么这些应用程序不但可随时间的流逝而“幸存”,而且可逐步发展、进化。

 使用组件的优点

1.应用程序可随时间的流逝而发展进化;

2.应用程序定制,组件架构从本质上讲是可被定制的,因用户可以用更能满足他们需要的组件来将某个组件替换掉。

   

组件库

       组件架构最引人注目的优点之一是快速应用程序开发。这一优点可以使开发人员从某个组件库中取出所需的组件并将其快速地组装到一块以构造所需的应用程序,如同搭积木一样。

       

分布式组件

       在将已有应用程序转化成分布式应用程序时,若已有应用程序是由组件组装成的,那么转化过程将会简单得多。这是因为,首先,应用程序已经被划分成为可以位于远地的各外功能部分。其次,由于仁义组件均是可以被替换的,由此可以将某个组件替换专门负责同某个远地组件通信的组件。如图1-5,组件C和组件D被放到了网络上远地机器上。在本地,它们被替换成了两个新的组件:Remoting C和 Remoting D。这两个新的组件的作用是将其它组件发来的请求通过网络转发给Componet C和Componet D。本地机器上的应用程序并不需要知道实际所用到的组件到底在何处,应用程序完全不需要知道实际的组件到底在那里。

       

对组件的需求

1.组件必须动态连接;

2.组件必须隐藏(或封装)其内部实现细节。

COM

       COM是一个说明如何建立可动态互变组件的规范。它提供了为保证能够互操作,客户和组件应遵循一些标准。标准对于组件架构的重要性同其它任何一个具有可改变部分的系统是一样的。例如,花园水管的尺寸及户外水龙头的尺寸也是由标准所控制的。PCMCIA卡及其插槽的制造也需要遵循一系列的标准。当某个系统的各不同部分是由在不同国家、不同组织工作的不同的人制造出来时,标准的重要性就更为突出了。没有标准,任何东西都不能一起工作。

       COM规范就是一套为组件架构设置标准的文档。

COM组件是……

       通过上述知识的学习,我们大概知道COM组件就是遵循一定规范的拥有某些优点的可执行程序的统称。程序实现需动态连接,隐藏内部细节,可是组装、拆分、替换使得程序能按需求不断更新、满足人们需求,这样的一些“麻雀虽小,五脏俱全”似的程序,就成为COM组件。

       我们来看一下官方的标准定义:

       COM组件是以Win32动态链接库(DLLs)或可执行文件(EXEs)的形势发布的可执行代码组成的。遵循COM规范编写的组件将能够满足对组件架构的所有需求。

       COM组件是动态链接的。COM使用DLL将组件动态链接起来。但前面我们已经看到,动态链接本身并不能满足对于组件架构的需求。为满足这些需求,组件还必须是封装的。

COM组件不是……

       COM并不是一种计算机语言。将COM同某种计算机语言相提并论是没有意义的。COM所说明的是如何编写组件,但具体选用什么语言来编写则完全是自由的。

        将COM同DLL相比或相提并论也是不合适的。实际上COM是使用了DLL来给组件提供动态链接的能力。利用DLL动态链接能力最佳的方法是COM。对于可用DLL解决的任一问题,均可以用COM组件更好地加以解决。

        COM给开发人员提供的是一种开发与语言无关的组件库的方法,但COM本身并没有提供任何实现。

COM库

        COM具有一个被称作是COM库(COM Library)的API,它提供的是对所有客户及组件都非常有用的组件管理服务。COM库中的大多数代码均可以支持分布式或网络化的组件。Windows系统上分布式COM(DCOM)的实现中提供了一些同网络上其它组件通信所需要的代码。这不但可以节省开发人员花在网络编程上的时间,而且可以使得他们无需了解如何进行网络编程。

COM方法

      COM最值得称赞的地方也许就是我们可以将其作为一种编写程序的方法。例如,可以在任何操作系统上使用任何编程语言按COM风格进行编程。COM充分体现了组件编程的概念。同结构化编程及面向对象的编程方法一样,COM也是一种组织软件的方法。

小结

       软件工业技术的迅速发展使得传统的那种每隔几年就由开发人员将应用程序升级一次的做法越来越不能适应软件发展的需求。解决这一问题的方法就是将应用程序分割成一些小的应用或组件。然后将这些组件在运行时组装起来以形成所需的应用程序。每一个组件都可以在不影响其它组件的情况下被升级。这使得应用程序可以随时向前发展进化。

       COM提供了编写组件的一个标准方法。遵循标准的组件可以被组合起来以形成应用程序。至于这些组件是谁编写的、如何实现的都是无关紧要的。每一个COM组件均可同其它组件一起使用。实现这种可动态改变组件的关键问题是信息的封装。对于封装,COM是通过组件和客户之间的连接或接口来实现的。

学习参考:《COM技术内幕》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值