C++类的动态组件化技术
文章来源毕业论文网
组件接口生命周期 C++类 ATL组件类 C++基类 ATL模板基类继承
论文摘要:在组件化编程的时代,如何复用累积的大量没有组件特性的C++类?本文从工程的角度对这一问题进行探讨,利用现有组件技术,提出了一套将C++组件的完整解决方案。
1. 问题的提出
ponent Object Model,组件对象模型,)技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列组件技术将Windows编程带入了组件化时代,传统的面向对象的软件开发方法已经逐渐被面向组件的方法所取代。
COM标准建立在二进制可执行代码级的基础上,不论何种工具、开发的组件,规范,就可复用于VC、VB、Delphi、的语言无关性将软件复用的层次从源代码级推进到了二进制级,复用更方便,也更安全。
技术带来全新的软件设计和开发模式的同时,也带来了新的问题。
许多软件公司在开发自己的软件产品过程中,都累积了大量C++类,这些代码设计精良,功能完备,以面向对象的标准来无可挑剔。然而,,时代继续被复用。如果它们在软件组件化的趋势中被淘汰,那对软件公司和开发人员来说都是极大的损失。
COM专家Don Box曾说过,“COM is a super C++”。这给了我们一个启示,是否可以实现一种技术,能够动态的为普通C++的封装呢?这样,既可以保持这些代码自身的完整和特性,使它们能继续应用于原来的系统,也可以在需要作为组件使用的时候,把它们动态转变成组件,复用于新系统。
一个自然而然的想法是,为每一个C++组件,将原C++类的每个public方法都对应于该接口的一个方法,接口方法的实现可以简单的调用相对应的C++类方法即可。这样,程序由原有的C++类控制,但COM层的封装则由组件提供。基本思路如下图所示:
本文就这一技术展开讨论,最终提供一套由普通C++组件的完整解决方案。我们选用ATL(Active Template Library,活动模板库,简称ATL)组件的开发工具,开发环境为Visual Studio 。如没有特殊说明,下文中的“C++类”指没有组件特性C++类,“C++对象”指C++类的实例;“ATL组件类”指用于包装的ATL类,“ATL对象”指ATL组件类的实例。
2. 用ATL包装C++类
按上述思路将C++对象动态组件化后,所得的组件实际上由两部分组成:ATL组件对象和绑定的C++对象。两者的生命周期互相牵制,但要保持一致。生命周期的是C++类动态组件化的首要难点。
C++类分为两种,一种是简单的C++类,一种是集合型的C++类。集合型的C++
C 类的动态组件化技术 来自淘豆网www.taodocs.com转载请标明出处.