构件复用作为一种现实有效的软件开发方法正受到越来越多的重视和研究。近年来,随着DNA,中间件等三层体系结构和分布式对象的兴起,为基于可复用构件的软件体系结构赋予了更大的内涵。从而使我们在评价构件复用的意义时,不应只局限于开发周期的缩短,软件质量的可靠提高,更要认识到构件组装式的开发在系统维护(如版本更新,功能增删等),分布式计算等方面所带来的极大便利。由于维护阶段占软件开发周期总成本的67%左右,因此构件重用对整个软件产业的重要意义就不言而喻了.从维护和分布计算的角度考虑,构件复用就是要实现"即插即用".
传统的面向对象编程语言中,基于继承机制的类的复用,只是源代码级的重用,在源代码不可得的情况下(构件产业化的发展趋势下,这种情况很普遍),就变得毫无意义了.更为重要的是,联编以后,类构件就只是一个逻辑上的虚幻的概念了,不会给将来可能的处理带来任何方便.
MicroSoft自90年代初就进行了COM的开发,历经OLE1,VBX组件,OLE2,ActiveX,COM+的不断完善,现已成为一个相当成熟的组件模型,对构件复用提供了有力的底层支持.
一 COM对象的封装
COM是一个二进制的标准,它详细规定了一个COM组件所应具有的内存结构.COM对象间的交互完全基于对此内存结构的操作.因此可以在很大程度上忽略不同编程语言,应用环境之间的差别,解决了重新编译重新发行的问题.二进制代码级的兼容性要求操作系统的支持,但是COM描述对象连接的方法与传统的API式共享系统服务不同.连接建立后,COM底层库不再被需要,停止耗用系统资源,与API相比,操作系统必须一直管理组件之间的连接.
COM用接口的概念对组件的功能属性进行完全的封装.与组件的通信必须通过接口进行.接口不仅是一个逻辑上的概念,而且也存在着与之相对应的物理内存结构(VTABLE).一个对象可以对应多个接口,一个接口也可以由多个对象所实现,表现出灵活的多态性.同时也为版本管理提供了方便.当使用新版本的组件替换老版本时,只要该组件实现了旧版本的接口(通过包容,聚合等手段),就保证了其与原用软件系统的兼容.同时新增功能(新的接口)又可被自然的使用.
接口完全封装了内部功能,属性的具体实现,使得COM对象对外表现为"黑盒"结构,完全吻合面向对象系统所要求的"强内聚性".但由于对接口的过多强调,COM组件一般不具备广泛提倡的"弱耦合性"的特点.不过,微软一向重视接口的不变性,试图用接口的标准化推动服务的标准化,以接口为基础为软件复用建立实用的框架.其实ActiveX技术规范中的相当大一部分都是通过定义标准的接口及其相互之间的逻辑关系来确定的.
二 自动化