使用CAA创建接口(Creating Interfaces)

2013-04-23 20:09:37|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, CAA, 图形/图像, CATIA|来源:唯设编程网

 

摘要

这篇文章介绍接口(Interfaces)。描述他们的在对象模型(Object Modeler)中的角色,和他们是怎么组成的,包括如何使用他们。

什么是CAA V5接口?

基于对象(Object-oriented)设计以及相应的基于对象语言(如C++)允许应用程序员使用特定的结构设计和编码现实中的对象,该结构包括结构体-数据成员和行为部分-成员函数或者成员方法。使用C++,类使用构造函数被实例化,同时使用这些类的应用程序员可以引用被声明为共有(Public)类型的数据成员和方法,但继承这些类构建新的类时也可以使用被定义为保护类型(Protected)的数据成员和方法。这是非常优美的基于对象特征,但是当一个类的头文件改变时,及时仅仅改变私有部分,所有包含该文件的应用程序都必须重新编译。

一个更通用的设计对象模式是仅仅以他们的行为对待这些类,同时仅仅使用方法(methods)来描述这些行为:这种模式提供了接口以使用这个对象。对于应用程序员,接口是一个对象唯一可见的部分,通过它隐藏了对象的具体实现,这些具体实现的工作全部由类的提供者完成。

接口在框架类开发者和应用程序开发者之间构成了一个契约。这个契约包括基于现实世界抽象出来用于处理的对象,用于操控这些对象的方法和如何调用这些方法。这个约定不应该随着时间改变而改变,而仅仅增添新的内容。框架顶层的应用程序开发人员不再因为框架程序的修改而需要重新编译程序。

实现一个接口是框架类开发人员履行契约的方式。选择合适的技术是他/她个人的业务,在需要的时候他们也可以从一种技术转换成另一种技术而不会对应用程序造成影响。

一个已经发布的接口不能够随着时间的改变而改变。一个接口已经提供的实现也应该继续实现这个没有改变的接口从而不需要用户程序在后来进行任何更改。如果需要进行修改(比如增加新的方法),应该提供一个新的接口。如果有其他接口必须被实现,已经存在的实现也不能够被更改,CAA V5提供了不影响客户程序扩展它们的途径。

适应接口和实现分离的需求如下:

封装(Encapsulation):一个对象仅仅提供句柄来进行操作,而不是它的内部结构实现控制。

多态(Polymorphism):共享同一个接口的对象可以被应用程序使用同一种方式进行处理,即使这些对象实现接口的方式不同。

继承(Inheritance):拥有共同接口的对象可以被认为是暴露了那些共同接口的一类基对象。这些对象派生至基对象并且继承它的接口。

无依赖编译(build independence):在应用程序和所使用的框架之间的耦合应该尽可能的小。应用程序仅仅知道框架的接口,同时接口实现方式的改变不需要重新编译应用程序。

框架开放结构(Framework open architecture):用户可以实现框架接口和向已经存在的实现增加新的接口。

多重实现(Multiple implementation):一个给定接口的框架应该可以关联多种针对该接口的实现。这种多重实现可以是静态的(连续的)或者动态的(同时的)。静态的多重实现意味着当前的实现在设定时间切换到其他状态,比如匹配一种新的技术。动态多重实现允许多种实现方式同时存在,并且允许按照用户的请求从一种实现切换到另一种实现。

分布式的对象架构(Distributed object architecture): 一个框架的对象实例能够被一个运行在其它进程的对象操作,可以是其它节点,而不是运行客户程序的进程,也许是通过一个对象请求中断,该中断为对象向远程对象服务发送请求。

接口是由哪些部分组成?
一个简单的接口

一个CATIA接口使用C++抽象类的方式进行创建。因此它仅仅包含纯虚函数(pure virtual methods)。它由头文件(header file),源文件(source file)和TIE文件构成。

接口头文件

这是CATIA接口CAAIXX的头文件:

 

#ifndef CAAIXX_h

#define CAAIXX_h



#include "CATBaseUnknown.h"



extern ExportedByCAADLL IID IID_CAAIXX;



class ExportedByCAADLL CAAIXX : public CATBaseUnknown

{

  CATDeclareInterface;

  public :

    virtual HRESULT __stdcall MXX1() = 0;

    virtual HRESULT __stdcall MXX2(CATBaseUnknown * pUnk) = 0;

};



#endif
下面解释各部分的功能。

CAA接口定义

这些功能包括:

<123>
发表评论0条 】
网友评论(共?条评论)..
使用CAA创建接口(Creating Interfaces)