iCAx开思网

标题: 个人对CAA中Component和Interface等问题的理解和疑问 [打印本页]

作者: ashio    时间: 2007-5-8 12:08
标题: 个人对CAA中Component和Interface等问题的理解和疑问
(一)Component和Interface
        对Component可以从两个角度去理解。对于使用VC++进行开发人员,把 component看作由“一个或多个类组成”比较合适。其中有一个主实施类(main implementation class)和若干个对主实施类扩展。如图,CATCircle类就是主实施类,CATMove,CATAttributes,CATDraw类就是CATCircle类的扩展,通过扩展主实施类,可以为它/Component提供额外的接口(Interface),实现额外的操作。如图,每个类中都提供接口,或者可以这样说认为,每个类都是接口,即每个类中都包含有对Component的操作(通过成员函数实现)。不同的是,在对主实施类用CATImplementClasss();时用参数Implementation(如图对CATCircle的申明),其他则用Extension申明(对于两种不同的Extension这里不作说明)。
        所以,在VC++中每一个Module中LocalInterfaces下的都是组成一个Component的类,其中一个为主实施类,其它为它的扩展。

[ 本帖最后由 ashio 于 2007-5-8 12:32 编辑 ]
作者: ashio    时间: 2007-5-8 12:10
(二)关于TIE
        不论是Main Implementation还是它的Extension都需要一些Interface来实现对他们的操作,而这些Interface就是通过TIE与相关的类相连,一个Implementation或Extension可以TIE上多个Interface。通过TIE连接的Interface就可以通过QueryInterface来查询并且使用。
        QueryInterface能查询得到的是Component所支持的Interface集。这些Interface就是通过TIE与component相连。也就是说这些通过TIE与Main Implementation和它的Extension连接的Interface,以及继承得到的Interface都能被QueryInterface查询到。
        创建一个TIE对象,在Dictionary文件中也要加入相应项。
作者: ashio    时间: 2007-5-8 12:12
(三)关于OM继承
        Interface继承:既要进行描述Interface的C++抽象类继承和又要进行Interface的OM继承(用CATImplementInterface();实现),这样才能实现Interface继承
        通过继承之后,子Interface所属的Component就能使用到继承来的Interface

        Component继承:通过主实施类(用在CATImplementClass()中用Implementation声明的类)需要C++类继承来实现,其他扩展类(即Extension)都不用进行C++继承。
        通过继承之后,继承得到的Component也能使用父Component及其Extension的所有Interface
作者: ashio    时间: 2007-5-8 12:14
不知道我的理解是不是正确,还请各位指教!!

参考:CAA V5 For CATIA Foundations,Creating Interfaces ,Creating Components ,Using Components ,Object Modeler Inheritances(后四项都出自CAA V5 Encyclopedia-Middleware-Object Modeler)

在此还要感谢 ririyeyjl 给予的指点和引导!!
作者: ashio    时间: 2007-5-8 12:26
问题来了:)
在CAA Help文档里,常会看到这样的描述,这些描述是什么意思:
1. you must use this class as is. You should never derive it.(CATFrmEditor)
2. an implementation of this interface is supplied and you must use it as is. You should not reimplement it.(CATIIniInteractiveSession)
3. you can freely reimplement this interface.(CATIEditor)
4. you must use this class as is.(CATDocumentServices)

--这里讲的class是不是就是component的组成部分,应该如何使用?

--you must use it as is是什么意思,该如何使用?是不是这样,如果是Class就实例化它,如果是Interface就是初始化指针?
如:Class:                CATFrmEditor *pFrmEditor = new CATFrmEditor;
        Interface:        CATIIniInteractiveSession *pIniInteractiveSession=NULL;
                        pIniInteractiveSession-〉Open(…);

--reimplement/implement interface是什么意思?这样的Interface怎么使用,是要使用CATImplementInterface()?

--什么时候要用到QueryInterface?有些接口指针能通过其他接口提供的方法得到,这就用不到QueryInterface,反之就要用,是不是这种情况?

--我看到use case里有这样的语句:CATDlgFrame * pFrameWindow = GetViewerFrame() ;
GetViewerFrame()是类CATFrmWindow提供的方法,这里为什么可以直接使用,而不是对class CATFrmWindow先进行实例化再使用CATFrmWindow::GetViewerFrame()?



问题有些多,都是关于使用CAA的基础,希望能够得到大家的指点!在此谢了先!

[ 本帖最后由 ashio 于 2007-5-8 12:34 编辑 ]
作者: ashio    时间: 2007-5-10 18:39
问题多了点,主要是不知道CAA Help里的那些描述是什么意思,该怎么用这些类或者接口。还请大家多指教~
作者: ashio    时间: 2007-5-13 23:23
有点明白了,想要implement一个interface,先要建立一个class,通过它来执行interface。
希望各位大虾给一些指点!
作者: ririyeyjl    时间: 2007-5-18 11:28
那里 我们互相学习嘛  感谢你对心得的共享  
对于"CATDlgFrame * pFrameWindow = GetViewerFrame() ;"
是不是就是函数的构造  

对于那些CAA Help文档里的描述  我认为它是对接口/函数/宏等应用的说明  比如那些使用完后应当释放  见"CAA V5 Resource Exposition, Usage, Deprecation, and Stability"中CAA Resource Usages部分
作者: ashio    时间: 2007-5-18 12:59
谢谢  ririyeyjl !!

GetViewerFrame()返回的是CATDlgFrame指针,"CATDlgFrame * pFrameWindow = GetViewerFrame() ;"是用于获取CATDlgFrame指针。这个问题我可能断章取义了,这个类是继承CATFrmWindow,GetViewerFrame() 是继承来的方法,不过我没找到定义类的.h文件

另外,请问"CAA V5 Resource Exposition, Usage, Deprecation, and Stability"这个文件在哪里,是在百科全书里吗?
作者: duduwolfwolf    时间: 2007-5-21 12:10
多谢。学习中
作者: ririyeyjl    时间: 2007-5-22 09:41
对于GetViewerFrame()你可以查API的它属于ApplicationFrame头文件就不用说把
"CAA V5 Resource Exposition, Usage, Deprecation, and Stability"这个当然在百科全书里找了




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3