2014-07-16 21:53:19|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:CAA, CATIA|来源:唯设编程网
作为一个组件提供者,你的组件视图也许有所不同。你也许想要利用有CAA V5提供的代码分解能力,并且充分利用其扩展性。这使得你可以设计并编码一个简单的应用程序组件,类似由多个C++类构成的一个圆组件,一个是圆的主实现类,其它是这个主实现类的扩展类,这些类中的每一个实现一个或者多个接口,通过这些接口客户的应用程序员对圆进行操作,通过这种方式向应用程序员提供一个简单、单一的组件。
比如,组成这个圆组件的类可以设计成如图2所示的结构:
图 2: 组件提供者看见多个相互关联的类
按照这种设计,当客户应用程序员操作一个圆时有多达4各类可以被实例化,但是所有事件的都在犹如只有一个组件被操作的情形下发生。
CAA V5对象模型的模块化和扩展性是通过扩展提供的。这是用于从C++对象构建CAA V5组件并提供不需要重新编译客户程序而实现软件更新的一种非常有效的方式。
一个对主实现类的扩展是一个单独的类,这个类附加到主实现类并对主实现类进行扩展,以实现主实现类本身没有实现的额外接口。扩展的通常用途是为了在多个组件之间共享接口的实现,或者实现一个在框架发布之后的新接口,这个接口在框架发布时并不存在。这大大提供了模块化和扩展性。
扩展是C++类,这些类的基类中必须有一个是CATBaseUnknown类,同时必须直接以OM的方式派生自CATBaseUnknown。他们可以是如下的类型:
扩展类和被扩展的类在扩展源文件中使用宏CATImplementClass进行声明。扩展与所实现的接口之间的链接通过字典(dictionary)进行管理。针对扩展包含代码的共享库同样也被包含在字典中。
当一个指向扩展所实现的接口指针通过QueryInterface请求时,作为一个组件的扩展而实现接口的类会被自动创建。所以你不需要关注一个用于创建扩展类的全局函数工厂。
注意扩展不满足递归的条件,不存在扩展的扩展。