一个应用程序通常是由一个二进制文件组成的。当编译器生成此应用程序后,在对下一个版本的源代码编译并发行新生成的版本之前,应用程序一般不会有所变化。显然,人们不愿意看到这种应用程序在发行之后处于静止状态。开发人员因此想出一种方法,让发行后的软件不断注入新的活力。这种方法就是组件技术。
组件技术有别于传统的模块、类等面向对象中的概念,以往的程序当编译之后在文件中是静止不可变的。一个组件同一个微型程序类似,都是编译、链接好的并可以使用的,一个最终的应用程序就是这样的若干组件打包得到的。换一句话说就是,各定制的组件在运行时同其他组件连接起来构成一个完整的应用程序。在程序发行之后,只要用户需要,随时可以对其中任何一个组件进程恰当的修改。
一 使用组件的优点
1. 定制程序。由于使用组件技术的应用程序是由很多小的组件组成的,所以用户定制一个应用程序时仅仅需要将相关的组件替换掉而不需要重新更改整个程序,这大大提高了程序定制的效率。另外,时刻不要忘记,组件技术就是让程序在发行后也可以方便的更换掉其中的任何一个组件。
2. 快速应用程序开发。开发人员可以从完善的组件库中取出所需的组件并快速组装成一个应用程序。当然所有的应用程序不可避免的需要一些特殊组件,但是一个应用程序的绝大部分任然可以用标准的组件建立起来。
3. 分布式应用。组件架构可以使开发分布式应用的过程得以简化。C/S架构就是向组件架构跨出的第一步。分布式的应用程序将整体分为远程和本地两个功能部分。如果使用组件技术在本地实现一个或者多个组件专门负责与位于远程的功能部分(确切的说,是其中的某个或者某几个组件)通信。本地应用程序部分就不需要了解实际的远程组件究竟在哪里,因为这样的架构就相当于在本地使用那些组件一样。
二 对组件的要求
组件可以动态的插入或者卸出应用程序,为了实现这样的功能,所有的组件必需满足两个条件。
1. 动态链接。组件技术的最终目标是应用程序在运行过程中能够将组件替换掉。如果一个组件不能在运行时动态的链接到应用程序中,那么这样的程序组装方式和面向对象技术就没有实质上的差别了。
2. 良好封装。为了说明这一点,这里定义一些术语。对于一个应用程序或者组件,如果它使用了其他组件,我们就称之为客户。一个客户通过接口与其他组件进行连接。如果某个组件发生了变化,接口没有变化,客户不需要任何变化;若客户发生了变化,接口没有变化,组件也不要任何变化;但是如果对组件或是客户的修改导致了接口的变化,那么接口的另一方也需要发生相应的变化。这样的客户与组件的实现隔离开来的要求对于组件加上了如下的限制:组件必需将其实现所用的语言封装起来;组件必需以二进制的形式发布;组件必需是在不妨碍老客户的条件下进行升级;组件在网络上的位置必需可以随意的分配;
三 COM
俗话说“没有规矩,不成方圆”,将应用程序划分成多个部分的组件也是需要遵循相应的标准的,这个标准就是COM。COM的全称是Component Object Model,即组件对象模型,是关于如何建立组件以及如何通过组件构建应用程序的一个规范。目前Microsoft所有的应用程序都是用了COM技术,ActiveX技术就是基于COM而建立起来的。
COM是一个说明如何建立可动态互变组件的规范,同时它还是一种软件组织的方法。COM规范就是一套为组件架构设置标准的文档。COM组件是以DLL或EXE的形式发布的可执行代码组成的。遵循COM规范的组件能够满足对组件架构的所有需求。
与其说COM是什么,还不如说COM不是什么更能让人加深对其的正确理解。COM不是一种编程语言,COM所说明的是如何编写组件,具体选用什么语言则是完全自由的;COM不是DLL,COM使用DLL给组件提供动态链接的功能;COM不是像Win32 API那样的函数集,COM并不提供具体的功能函数,它仅仅提供了一些常用的提供组件的管理服务,COM向开发人员提供了开发与语言无关的组件库的方法,但是本身并没有提供具体实现。
COM具有一个被称作COM库的API,用来提供对所有用户和组件都非常有用的组件管理服务。COM库保证对所有组件的绝大多数的重要的操作都可以按相同的方式完成。同时COM库也可以通过这个库提高开发效率,将更多的时间花在开发自己的客户程序或是组件上面。
COM强制开发人员必须将客户和组件严格的隔离开,这样的限制带来了各种好处:
l 提供了一种所有组件都应该遵守的标准;
l 允许使用组件的不同版本,而这一点都用户是透明的;
l 使得可以用相同的方式处理类似的组件;
l 定义了一个健壮的,与语言无关的架构;
l 支持对远程组件的透明连接。
参考文献:《COM技术内幕》