CATIA CAA 二次开发详细教程

合集下载

CATIA CAA 二次开发 第二讲:添加Workbench

CATIA CAA 二次开发 第二讲:添加Workbench

CATIA CAA 二次开发第二讲:添加Workbench【机知网】1.前言这一部分很重要请注意认真看,说它重要是因为在后面程序的调试中可能会出现错误,请你务必在安装开发vc环境的时候注意,在安装vc的时候记得有个地方自己选,最好你都装了,如果你没有装也没有关系,到时候从vc的安装文件里面考出来也可以,就是关于RADE中会用到的lib库,在vc中的目录为vc98/mfc/lib目录下,如果你调试出现问题,比如error没有找到mfc42u.lib 或者别的你就要从安装盘里面把所有的lib里面的文件考到你的vc对应安装目录下。

1.2进入正题1.新建工作空间你按照我以前的帖子安装完开发环境在vc下面就有了RADE的菜单找个标签页你可以选择下面的复选框,以后新建工程的时候就不会弹出了,然后选择ok你可以先建立你的开发目录然后选择Workspace Directory的时候指定目录,with就选择mkmk,tool level选择你的版本。

点击next选择创建一个新的框架frame,然后finish,弹出new framework对话框,输入你的frame名字,下面的选择如图所示,fram ework t’ype-implementation,framework function-development,然后ok弹出下面的配置对话框然后ok,dos窗口闪动几下就可以了1.创建module有了工作空间和框架下面就是添加module了,好像你做的所有开发都在module里面(我也是刚入门,很多东西还不懂^_^)Project目录下面选择new module弹出下面的对话框输入你的module名字,module information选择shared object,也就是交互式(caa的开发分为交互式和批处理,听似水年华这么跟我讲的^_^),然后ok。

弹出下面的产生文件对话框然后点击ok,你的module就添加到workspace里面了,在vc的fileview 窗口如下所示:1.载入必须的API函数选择菜单如下所示:弹出如下的对话框Mode选择第一项,然后点击add,添加函数所在目录,选到你的catia目录下面的B14,一定要选对。

CATIA软件二次开发实践指南

CATIA软件二次开发实践指南

CATIA软件二次开发实践指南CATIA是由法国达索系统公司(Dassault Systèmes)开发的一款世界领先的三维设计软件。

它广泛用于航空航天、汽车制造、工业设计等领域。

为了满足用户特定的定制需求,CATIA软件支持二次开发,这使得用户可以根据自身需要对CATIA进行功能扩展和定制。

本篇文章将为读者介绍如何进行CATIA软件的二次开发,并提供一些实用的开发实践指南。

一、二次开发环境搭建在开始CATIA软件的二次开发之前,我们需要搭建相应的开发环境。

首先,确保已安装CATIA软件,并具备基本的CATIA使用经验。

其次,要安装CATIA官方提供的开发工具包CATIA Customization Tools(CCT)。

CCT是一套特殊的插件和工具,可以帮助开发者进行CATIA的定制和开发。

安装完成后,启动CATIA,选择“工具-集中管理-定制工具”命令,确保CCT已成功安装并可用。

二、二次开发的基本概念在进行CATIA二次开发之前,了解一些基本概念是很重要的。

CATIA软件基于面向对象的编程思想,开发者需要熟悉CATIA的对象模型和相关API接口。

对象模型描述了CATIA软件中各个元素之间的关系和属性,开发者通过调用API接口对CATIA进行操作和扩展。

例如,我们可以通过API接口创建、编辑、删除CATIA中的零件、装配、图纸等对象。

三、CATIA二次开发的实践指南1. 熟悉CATIA对象模型:详细了解CATIA对象模型可以帮助开发者深入理解CATIA软件的内部结构和机制。

CATIA的对象模型按照层次结构组织,从最顶层的“CATIA.Application”到最底层的具体对象,开发者可以根据自身需求在对象模型中定位到所需的对象。

2. 学习API文档和示例:CATIA提供了详细的API文档,其中包含了各种API接口的详细说明和使用示例。

开发者可以通过阅读API文档来学习如何调用CATIA提供的接口和方法。

CATIA CAA关于workbench和adding的二次开发

CATIA CAA关于workbench和adding的二次开发

本文介绍的实例将在MechenicalDesign(机械设计)中插入一个名为“测试工作台”的Workbench,内容非常基础,每个步骤尽可能描述的非常详细,供初学者参考。

具体步骤如下:1. 准备工作参照前面的步骤,创建一个解决方案和一个Framework,并将解决方案与CATIA的系统接口建立连接。

该过程参见《CATIA二次开发CAA培训课件》2. 新建Workbench3.1 选择“文件->Add CAAV5 Item->CATIA Resources->CATIA Pattern”命令:在弹出对话框中选择“Workshop”并点击OK按钮:3.2 在新弹出的对话框中选择对象的类型为Workbench,在Work Object Name栏输入Workbench的名称。

然后点击Associated Workshop输入框后面的“…”按钮,这里选择PRDWorkshop,即为Product空间。

在新创建的Workbench中,会包含Product空间的一些基本标准命令,如插入产品等。

如果选择Part空间,则会包含Part空间的一些基本命令。

设置完成后点击OK,最终状态如下:3.3 点击Next:3.4 该设置界面保持默认即可,点击Next,进入参数设置界面:也保持默认,点击Finish,在最后弹出的信息确认对话框中直接点击OK。

3.5 选择“项目->Select CAA V5 Projects …”:在弹出的窗口中将刚才新建立的TestWb模块载入到开发环境中:将MyTestWbk.m设置成当前启动项目:现在的目录结构如下图所示:Workbench的资源文件保存在下图所示的位置:3. 编译(mkmk)工程点击“生成->mkmk ”,编译新建的Module。

4. 运行CNEXT查看效果点击Tools->Open Runtime Window ,打开命令框。

输入“cnext”打开CATIA。

CATIA二次开发环境构建详细步骤,亲测可用

CATIA二次开发环境构建详细步骤,亲测可用

CATIA二次开发环境构建一、初步介绍CATIA二次开发暂可用版本V5 R18和V5 R19,V5 R18可在XP系统32位、64位上完成安装,V5 R19在Win7系统64位上完成安装。

搭建环境需要安装CATIA、CAA、RADE、Visual Studio 2005(以下简称VS)。

CATIA、CAA、RADE版本须一致,CAA即Component Application Architecture,会安装到CATIA同目录下,用于提供大量C++及Java接口(我们只用到C++接口)。

RADE即Rapid Application Development Environment,与CATIA不同目录,用于在VS中集成开发工具,以提供独立的创建、调试、编译工具。

安装文件多为ISO格式,建议采用Daemon Tools(辅助工具中有安装包)虚拟光驱进行安装。

二、V5 R18在XP 32位、64位下安装步骤1.安装CATIA V5 R18,安装目录不可以存在空格,建议可用D:\ProgramFiles\DassaultSystemes\B18,除选择安装目录外,其余过程采用默认设置,直接点击下一步。

安装完成后将文件夹下面的覆盖到CATIA安装目录下的intel_a\code\bin文件夹里,完成破解。

2.安装VS,安装位置不限。

3.安装CAA,程序会自动安装到CATIA同目录下,无需破解。

4.安装RADE,RADE不能与CATIA安装到同一个目录下面,可采用B18_RADE;如图:将RADE安装目录下面的intel_a\code\bin文件夹中的原版备份;将 CRK文件夹下面的和覆盖到RADE安装目录下面的intel_a\code\bin 文件夹里面;运行intel_a\code\bin下面的,点击install按钮。

安装成功后,再点击,在弹出对话框右边所有复选框都勾选;将备份的原版再拷回到intel_a\code\bin中覆盖;再次运行,弹出对话框如下图所示:要求右边所有复选框全部勾选,并且灰化。

CATIA-CAA二次开发教程

CATIA-CAA二次开发教程

CATIA CAA V5R19 二次开发详细教程CAA,全称C omponent A pplication A rchitecture,组件应用架构。

CAA架构CATIA本身是按照组件模型建立起来的,用户可以通过开发自己的CAA组件,对DASSAULT SYSTEMES的CATIA V5进行扩展;也可以把用户自己开发的CAA组件结合起来,实现用户自定义应用。

CAA应用的框架结构遵从组件对象模型,有自己的框架结构。

每个应用有至少一个框架(framework),每个框架有至少一个模块(module)。

每个框架里面有一个IdentityCard.h 文件,这个文件通过宏“AddPrereqComponent(framenwork,protected)”来声明“声明”这个框架的一些首先必备的其他框架名称,framework是框架名称。

CAA的编译器就是通过IdentityCard.h文件,来把头文件搜索限制在首先必备框架所包含的接口中。

每个模块下面定义了一个Imakefile.mk文件,这个文件指明了这个模块中所有文件在编译时用到的其它模块和一些外部库以及为编译器提供如何编译的模块必须信息,还指定在不同的操作系统下面编译时的一些可能的特殊要求。

CAA环境对Cnext能够运行的所有操作系统中采用同样的编译器,这为开发者提供了很大的方便,因为他们可以不需要知道怎样用不同的编译器和怎么写makefile。

但是MKMK并不能做所有的事情,开发者至少要说明他们想要做什么。

我们在自己的源文件中用到其它模块的接口,要在Imakefile.mk中进行说明。

程序结构采用了COM组件模型,组件模型中有两个常用的概念:接口(Interface)和实现(Implement)。

接口是一个包含许多纯虚函数的抽象对象,这些纯虚函数指明了接口支持的方法。

实现是一个具体定义接口中的方法的对象,一个实现对象必须显式声明它支持哪些接口,还必须定义它支持的接口中的所有抽象方法,实现对象可以支持一个或多个接口,而客户应用只能通过这些接口与实现对象发生联系。

CATIA CAA 二次开发程序的发布甄选.

CATIA CAA 二次开发程序的发布甄选.

CATIA CAA 二次开发程序的发布#.CATIA CAA 二次开发程序的发布1.发布条件:已安装了CATIA,版本不能低于开发使用的CAA版本。

CAA代码成果物“intel_a”文件中的所有文件。

其他版本的CATIA与此类似。

1.发布方法:2.将“intel_a”文件存放在要发布机器上,存放“intel_a”文件的路径最好不要有中文字符和空格。

(例:E:\VCINewFromExisting\intel_a)3.点击”开始” –> ”所有程序” –> “CATIA P3” –> “Tools” –>”Environment Editor V5R19”1.点击“确定”。

1.选择”Environment” –> “New”1.“Name” 栏为将要创建的桌面快捷方式的名称;在”Install Path” 栏中,CATIA的安装路径后输入”; E:\VCINewFromExisting\intel_a”,这是要发布的intel_a的存放路径;其他如图所选,采取默认设置。

完成后点击”OK”。

1.至此发布完成,在桌面上会生成一个名为”NewFromExisting”的CATIA类型图标。

双击该图标,会启动CATIA,用户便可使用CATIA原所有功能和新发布的功能。

1.与原CATIA图标集成发布方法:设:Catia的工作目录是 D:\DS\B19\intel_a;已开发插件的工作目录是D:\MyAddin\intel_a;将D:\MyAddin\intel_a下这些文件复制到D:\DS\B19\intel_a对应的位置,即可在运行Catia时候自动加载插件:code \ bin \ *.dll;\ code \dictionary \ *.dico;\ code \ productIC \ *.script;\ code \ productIC \ *.xml;\ resources \ graphic \ icons \ normal \ *.bmp;\ resources \ msgcatalog \ *.CATNls;\ resources \ msgcatalog \ *.CATRsc;感谢您使用本店文档您的满意是我们永恒的追求!(本句可删)------------------------------------------------------------------------------------------------------------。

CAA插件的开发方法(CATIA二次开发)

CAA插件的开发方法(CATIA二次开发)

插件的开发方法2004-8-24一、创建插件接口1.1 头文件如:#ifndef CAAIAfrGeoCreationWkbAddin_h#define CAAIAfrGeoCreationWkbAddin_h// ApplicationFrame Framework#include <CA TIWorkbenchAddin.h>// Needed to derive from CATIWorkbenchAddin// Local Framework#include "CAAAfrGeoCreationWbench.h" // Needed to export the IID// Global Unique IDentifier defined in .cpp// exported by CAAAfrGeoCreationWbenchextern IID ExportedByCAAAfrGeoCreationWbench IID_CAAIAfrGeoCreationWkbAddin;class ExportedByCAAAfrGeoCreationWbench CAAIAfrGeoCreationWkbAddin : public CATIWorkbenchAddin {// Used in conjunction with CATImplementInterface in the .cpp fileCA TDeclareInterface;public:};#endif1.2 源文件1.2.1 组成1)接口标识符(IID)构造2)接口实现1.2.2 实例如:#include <CAAIAfrGeoCreationWkbAddin.h>// Use uuid_gen -C on UNIX or uuidgen -s on NT to generate the IIDIID IID_CAAIAfrGeoCreationWkbAddin = { /* a4188b88-d4c1-11d3-b7f5-0008c74fe8dd */0xa4188b88,0x11d3,{0xb7, 0xf5, 0x00, 0x08, 0xc7, 0x4f, 0xe8, 0xdd}};// Declares that CAAIAfrGeoCreationWkbAddin is an interface that// OM-derives from CATIWorkbenchAddinCATImplementInterface(CAAIAfrGeoCreationWkbAddin, CATIWorkbenchAddin);1.3 TIE文件1.3.1 内容头文件引用1.3.2 实例如:// Used by mkmk to create TIE_CAAIAfrGeoCreationWkbAddin.h#include <CAAIAfrGeoCreationWkbAddin.h>详见《接口开发》二、插件开发2.1 头文件2.1.1 结构#ifndef <插件类>_H#define <插件类>_H// System framework#include "CATBaseUnknown.h" // Needed to derive from CATBaseUnknown// ApplicationFrame framworkclass CATCmdContainer; // Needed by CreateToolbarsclass <插件类> : public CATBaseUnknown{// Used in conjunction with CATImplementClass in the .cpp fileCATDeclareClass;public:<插件类> (); //构造函数virtual ~<插件类> (); //析构函数// Instantiates the command headers for the commandsvoid CreateCommands(); //定义命令标签// Creates toolbars and arranges the commands insideCA TCmdContainer * CreateToolbars(); //创建菜单和工具条private:};#endif2.1.2 实例#ifndef CAAAfrGeoOperationAdn_H#define CAAAfrGeoOperationAdn_H// System framework#include "CA TBaseUnknown.h" // Needed to derive from CATBaseUnknown// ApplicationFrame framworkclass CATCmdContainer; // Needed by CreateToolbarsclass CAAAfrGeoOperationAdn : public CATBaseUnknown{// Used in conjunction with CATImplementClass in the .cpp fileCA TDeclareClass;public:CAAAfrGeoOperationAdn();virtual ~CAAAfrGeoOperationAdn();// Instantiates the command headers for the commandsvoid CreateCommands();// Creates toolbars and arranges the commands insideCA TCmdContainer * CreateToolbars();private:};#endif2.2 源文件2.2.1 定义命令标签类如:2.2.2 建立“联结(TIE)”对象指定插件插入的交互界面,如:1)界面#Include “TIE_CATIShapeDesignWorkshopAddin.h”;TIE_CATIShapeDesignWorkshopAddin(CAAEMmrCombinedCurveAdn);2)“零件设计(Part Design)”界面#include <TIE_CATIPrtWksAddin.h>TIE_CATIPrtWksAddin(CAAMmrDebugAdn);2.2.3 声明插件类CATImplementClass(CAAMmrDebugAdn, DataExtension, CATBaseUnknown,CAAMmrDebugAddin);2.2.4 更新接口字典文件2.2.4.1 字典文件名<框架>.dico2. 2.4.2 存放目录<>\CNext\Code\Dictionay2. 2.4.3 语句如插入如下结构的语句行:<接口实现类> <TIE接口类> <共享库名>如:CAAMmrCombinedCurveAddin CA TIShapeDesignWorkshopAddin libCAAMmrCombinedCurveAddIn其中:(1)<接口实现类>在CATImplementClass中指定,如CAAMmrCombinedCurveAddin:CATImplementClass ( CAAEMmrCombinedCurveAdn ,DataExtension ,CA TBaseUnknown ,CAAMmrCombinedCurveAddin );(2)<TIE接口类>TIE语句中所定义,如CATIShapeDesignWorkshopAddin:TIE_CATIShapeDesignWorkshopAddin(CAAEMmrCombinedCurveAdn);2.2.5 编制构造函数与析构函数2.2.6 定义命令标签(CreateCommands)和创建菜单/工具条(CreateToolbars)如:// Local Framework#include "CAAAfrGeoOperationAdn.h"// ApplicationFrame Framework#include <CA TCreateWorkshop.h>// Creates the CAAAfrGeoOperationAdnHeader command header class#include "CA TCommandHeader.h"MacDeclareHeader(CAAAfrGeoOperationAdnHeader);// To declare that the class// is a DataExtension of (late type) CAAAfrGeoOperationAddinCATImplementClass(CAAAfrGeoOperationAdn,DataExtension, CA TBaseUnknown,CAAAfrGeoOperationAddin(在接口字典中定义,见下句));// To create the TIE Object (即设置指向本插件的接口)(****)#include <TIE_CAAIAfrGeoCreationWkbAddin.h>TIE_CAAIAfrGeoCreationWkbAddin(CAAAfrGeoOperationAdn);// To declare that CAAAfrGeoOperationAddin implements CAAIAfrGeoCreationWkbAddin, insert// the following line in the interface dictionary: (???????功用)//CAAAfrGeoOperationAddin CAAIAfrGeoCreationWkbAddin libCAAAfrGeoCreationWkbAddin//---------------------------------------------------------------------------CAAAfrGeoOperationAdn::CAAAfrGeoOperationAdn(){}CAAAfrGeoOperationAdn::~CAAAfrGeoOperationAdn(){}void CAAAfrGeoOperationAdn::CreateCommands(){// Instantiation of the header class created by the macro MacDeclareHeader -// commands are always available and are represented by a push buttonnew CAAAfrGeoOperationAdnHeader("CAAAfrUnionHdr" ,"CommandLib","CommandName",(void *)NULL);new CAAAfrGeoOperationAdnHeader("CAAAfrSubstractHdr","CommandLib","CommandName",(void *)NULL);new CAAAfrGeoOperationAdnHeader("CAAAfrFilletHdr" ,"CommandLib","CommandName",(void *)NULL); }CATCmdContainer * CAAAfrGeoOperationAdn::CreateToolbars(){// CAAAfrOperationTlb ToolbarNewAccess(CATCmdContainer,pCAAAfrOperationTlb,CAAAfrOperationTlb);NewAccess(CATCmdStarter,pCAAAfrTUnionStr,CAAAfrTUnionStr);SetAccessCommand(pCAAAfrTUnionStr,"CAAAfrUnionHdr");SetAccessChild(pCAAAfrOperationTlb,pCAAAfrTUnionStr);NewAccess(CATCmdStarter,pCAAAfrTSubstractStr,CAAAfrTSubstractStr);SetAccessNext(pCAAAfrTUnionStr,pCAAAfrTSubstractStr);NewAccess(CATCmdStarter,pCAAAfrTFilletStr,CAAAfrTFilletStr);SetAccessCommand(pCAAAfrTFilletStr,"CAAAfrFilletHdr");SetAccessNext(pCAAAfrTSubstractStr,pCAAAfrTFilletStr);//----------------------// Menu bar (?????)NewAccess(CATCmdContainer,pCAAAfrOperationMbr,CAAAfrOperationMbr);// menu Tools with three new commandNewAccess(CATCmdContainer,pCAAAfrOperationToolsMnu,CA TAfrToolsMnu);SetAccessChild(pCAAAfrOperationMbr,pCAAAfrOperationToolsMnu);NewAccess(CATCmdSeparator,pCAAAfrOperationToolsSep,CAAAfrOperationToolsSep);SetAccessChild(pCAAAfrOperationToolsMnu,pCAAAfrOperationToolsSep);NewAccess(CATCmdStarter,pCAAAfrMUnionStr,CAAAfrMUnionStr);SetAccessCommand(pCAAAfrMUnionStr,"CAAAfrUnionHdr");SetAccessNext(pCAAAfrOperationToolsSep,pCAAAfrMUnionStr);NewAccess(CATCmdStarter,pCAAAfrMSubstractStr,CAAAfrMSubstractStr);SetAccessCommand(pCAAAfrMSubstractStr,"CAAAfrSubstractHdr");SetAccessNext(pCAAAfrMUnionStr,pCAAAfrMSubstractStr);NewAccess(CATCmdStarter,pCAAAfrMFilletStr,pCAAAfrMFilletStr);SetAccessCommand(pCAAAfrMFilletStr,"CAAAfrFilletHdr");SetAccessNext(pCAAAfrMSubstractStr,pCAAAfrMFilletStr);// Set the menu// pCAAAfrOperationTlb: Always the toolbar returned by the method// pCAAAfrOperationMbr: The container which contains all the menu's containersSetAddinMenu(pCAAAfrOperationTlb,pCAAAfrOperationMbr); (?????)// Invisible toolbarAddToolbarView(pCAAAfrOperationTlb,-1,Right);// Pointer of the first toolbar createdreturn pCAAAfrOperationTlb;}。

CATIA二次开发-CAA基础

CATIA二次开发-CAA基础

CATIA的一些基本概念
l
Workshop和Workbench:它们为CATIA的功能模块的组织。CATIA
将其功能细分,每个人都可以选择自己的模块进入进行设计,简化了
界面。 如下图:
Module
Framework
Workbench
Workshop
Catia对话框
对话框架包含在类CATInteractiveApplication下, 此类如下:public class CATInteractiveApplication , 交互式应用的基类,作用:交互应用程序的基类,进化论 是在单文档,多文档或者模态对话框,如catia v5版本那 样。为了创建你的交互式应用程序,你应该,创建一个从 CATInteractiveApplication派生的类,并且重载 BeginApplication and EndApplication方法,但是不要 直接实例化这个类
框架(FRAMEWORK):框架提供对所有应用程序有用的功能(如接 口、存储)。它提供了统一的总设计。框架是对相似应用程序集合的 一个部分(统一但不完整)解决方案。开发者的任务是用这不完整的 解决方案加上必要的代码建立完整的应用。在领域(DOMAIN)内的一 个应用包括不变部分和可变部分。不变部分由框架把握,一般可占到 80%,可变部分由开发者把握,一般可占到20% 。开发者通过向框架 添加变化部分的代码把握其动作,而形成新的特定应用。框架根据是 否针对特殊领域还是若干领域,可分为水平框架、垂直框架、复合文 挡框架。
面向对象技术只能通过重用类库已有的类来实现有限的重用, 而软件组件结构(SCI)提供了最高层次的代码重用。
软件组件结构(SCI:Software Component Infrastructure) 有三个基本的概念:框架(FRAMEWORK)、组件(Component)和对象 总线(Products Bus)。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CATIA CAA 二次开发详细教程第一讲:基本概念1. 什么是组件?由于本人是自学,属于摸着石头过河,所以很多东西显得比较幼稚,大家请见谅。

CAA,全称C omponent A pplication A rchitecture,组件应用架构。

这个东西对不搞软件的人来说可能很陌生,我也很陌生啊,原来光知道“面向对象的技术”就很牛逼了,“组件技术”难道更牛逼吗?既然类和组件有着这么多类似的地方,那么传统的面向对象编程和面向组件编程有什么区别呢?简单的说,面向对象关注的是组合在一个二进制可执行文件中的各个类的关系,而面向组件的编程关注的是在彼此独立的基础上模块之间的交互性,这种交互性使得你并不需要熟悉它们内部的工作原理。

这两种方法最基本的不同在于它们对最终的应用程序的观点。

在传统的面向对象编程中,尽管你可以精心的把所有的商业逻辑分布在不同的类中,一旦这些类被编译,它们就被固化成了一个巨大的二进制代码。

所有的类共享同一个物理单元(通常是一个可执行文件)、被操作系统认为是同一个进程,使用同一个地址空间以及共享相同的安全策略等等。

如果多个开发者在同一份代码上进行开发,他们甚至还要共享源文件。

在这种情况下,修改一个类可能会让整个项目被重新链接,并重新进行必要的测试,更严重的,还有可能要修改其他的类。

但是,在面向组件开发中,应用程序是由一系列可以互相交互的二进制模块组合而成的。

一个具体的二进制组件可能并不能完成什么工作。

有些组件是为了提供一些常规服务而编写的,例如通信的封装或者文件访问组件。

也有一些是为了某些特定应用而专门开发的。

一个应用程序的设计者可以通过把这些不同的组件提供的功能粘合在一起来实现他们需要的商业逻辑。

很多面向组件的技术——例如: COM 、 J2EE 、 CORBA 和 .NET 都为二进制组件提供了的无缝链接的机制。

而唯一的不同就是你需要在组件通信上花费的力气。

把一个二进制应用程序分解成不同的二进制组件的动机和把不同的类放到不同的文件中是类似的。

后者使得不同的类的开发人员可以彼此独立的工作,尽管即时修改了一个类也要重新链接整个应用程序,但是你只需要重新编译被修改的部分就可以了。

但是,面向组件的开发还是和简单软件项目的管理更复杂一些。

因为一个面向组件的应用程序是一个二进制代码块的集合,你可以把组件当作是 LEGO 的积木块一样,随心所欲的拆装它们。

如果你需要修改一个组件的实现,只需要修改那个组件就可以了,而组件的客户机不需要重新编译也不需要重新开发。

对于那些不常用到的组件,组件甚至可以在一个程序运行的时候被更新。

这些改进和增强使得组件可以立即进行更新,而所有该组件的客户都将立即受益。

无论是在同一台机器上还是通过网络远程访问。

面向组件的应用程序也更易于扩展。

当你需要实现新的需求的时候,你可以提供一个新的组件,而不去影响那些和新需求无关的组件。

这些特点使得面向组件的开发降低了大型软件项目长期维护的成本,这是一个最实际的商业问题,也正是如此,组件技术才如此迅速的被接受。

面向组件的应用程序通常可以更快的响应市场,因为你可以有很大的选择空间,不仅仅是自己开发的组件,还可以从第三方厂商来购买某些组件,从而避免了重复制造轮子。

这里, VB 就是一个很好的例子,丰富的 ActiveX 控件使得很多人在快速开发中得到了享受。

面向对象和面向组件另一个重要的不同在于这两种技术在继承和重用模型上的侧重点不同。

在面向对象的分析和设计中,应用程序通常被分解成复杂的类继承结构。

类的设计和要解决的商业问题紧密结合。

你可以从已有基类继承并特化其行为来实现代码重用。

问题在于,这是一种很糟糕的重用的方法。

当你从一个基类派生一个子类的时候,你必须对基类的实现有透彻的理解才可能保证不出问题。

例如:修改一个成员变量会不会带来副作用?这会对基类中的代码有什么影响?重载基类的方法会不会破坏那些想使用基类版本的客户的行为?等等。

这种形式的重用被称为白盒重用(White-box reuse),因为当你重用的时候你就需要去了解基类实现的细节。

显然。

白盒重用在可扩展性较高的大型应用中并不经济,也很难得到第三方Framework厂商的支持。

面向组件的开发采用了黑盒重用(Black-box reuse)的方法,它可以让你对组件内部全然不知的情况下来使用组件公开的接口。

这样,你就可以远离那些复杂的继承关系。

而面向组件的开发者也可以把更多的精力放在制定组件和客户的沟通的接口上了。

最后,面向对象编程提供了有限的工具和设计模式来处理和应用程序运行时相关的问题,例如多线程、并发管理、安全、分布式应用和版本控制等。

面向对象的开发者当面对这些“公共需求”的时候,或多或少的需要自己来解决问题。

但是面向组件的开发方式却使你在这方面要灵活的多。

以下是CSDN社区网友对组件的一个讨论:1面向对象是面向组件的基础,组件是在对象的基础上加上属性和事件2复用粒度的大小不同。

通常多个密切相关的对象组织在一起完成一个/或多特定的功能。

组件有多个侧面(facet),不同的使用者可能只使用其中的部分。

3级别不一样,“面向对象”是对语言级别的,“组件”是对应用级别的。

组件可以由对象实体组成。

? ?4组件由一个或若干个对象组成。

对象提供可访问的接口。

5可笑,现在很多人把面向对象编程理解为面向组件编程,真是幼稚!6组件是一种面向应用的概念,对象是一种面向编程方法的概念。

一般进行组件编程都是用面向对象的方法编程进行实现。

组件已经是一种能实际应用的实例了。

本人的理解,见笑了。

7面向对象是在代码一级对数据和方法的封装,C++,JAVA面向组件是在二进制代码上的封装,COM/COM+,CORBA8面向组件的集成度和可重用度更高(如楼上的meking_lee所说的),面向组件渴望一种真正的接口级的搭积木的软件模式,目前在语言特性上支持这一点的就只有java了(当然也许我见识短)。

9用C++实现组件,是因为没有直接支持组件的语言。

现在的组件太大了。

10 应该说是面向对像和基于组件2. CAA架构CATIA本身是按照组件模型建立起来的,用户可以通过开发自己的CAA组件,对DASSAULT SYSTEMES的CATIA V5进行扩展;也可以把用户自己开发的CAA组件结合起来,实现用户自定义应用。

CAA应用的框架结构遵从组件对象模型,有自己的框架结构。

每个应用有至少一个框架(framework),每个框架有至少一个模块(module)。

每个框架里面有一个IdentityCard.h文件,这个文件通过宏“AddPrereqComponent(framenwor k,protected)”来声明“声明”这个框架的一些首先必备的其他框架名称,fr amework是框架名称。

CAA的编译器就是通过IdentityCard.h文件,来把头文件搜索限制在首先必备框架所包含的接口中。

每个模块下面定义了一个Imakefile.mk文件,这个文件指明了这个模块中所有文件在编译时用到的其它模块和一些外部库以及为编译器提供如何编译的模块必须信息,还指定在不同的操作系统下面编译时的一些可能的特殊要求。

CAA环境对Cnext 能够运行的所有操作系统中采用同样的编译器,这为开发者提供了很大的方便,因为他们可以不需要知道怎样用不同的编译器和怎么写makefile。

但是MKMK并不能做所有的事情,开发者至少要说明他们想要做什么。

我们在自己的源文件中用到其它模块的接口,要在Imakefile.mk中进行说明。

程序结构采用了COM组件模型,组件模型中有两个常用的概念:接口(Interface)和实现(Implement)。

接口是一个包含许多纯虚函数的抽象对象,这些纯虚函数指明了接口支持的方法。

实现是一个具体定义接口中的方法的对象,一个实现对象必须显式声明它支持哪些接口,还必须定义它支持的接口中的所有抽象方法,实现对象可以支持一个或多个接口,而客户应用只能通过这些接口与实现对象发生联系。

下面的这个图好像比较能体现CAA的思想,不过要仔细看看。

3.What's RADE??RADE,Rapid Application Development Environment,快速应用研发环境,是一个可视化的集成开发环境,它提供完整的编程工具组。

RAD E以Microsoft Visual C++6.0为载体,开发工具完全集成在了VC++环境中,并且提供了一个CAA框架程序编译器,但同时也限制了VC++的部分功能。

可以说CATIA CAA–RADE是目前所有高端CAD/CAM开发环境中最为复杂、同时也是功能最为强大的一个。

CAA V5 RADE包括一系列工具:TCK(Tool Configuration Key)、MAB (多工作空间应用生成器)、CUT(C++单元调试管理器)、MKMK(CAA编译工具) 、CID(C++交互式面板)等,以插件的形式与MSDev VC++集成到一起。

然后借助于这些工具在MSDev? ?环境下开发自己的CAA组件。

TCK管理RADE环境,TCK命令是用来管理开发工具包的安装,用来创建一个工作环境。

当在WinowsNT上用CAA V5的可视化创建工具(以插件形式嵌入Microsoft Developer Studio),tck_init 和 tck_profile命令在打开一个V5的工作区时被自动调用。

MKMK(多工作区应用编译器)是DS(Dassault Systems)原代码编译工具,它构建在平台无关(UNIX和WindowsNT)的标准编译器上,它支持面向组件的设计模式。

MKMK提供一种统一的工具来编译和连接CAA应用而不管是用的什么编程语言(Fortran, C, C++, IDL, Express, CIRCE,...)。

CUT是单元调试管理器,CUT用mkodt命令来运行传递给测试框架中的测试对象,通过选择不同的命令参数来决定选择测试一个对象或者所有对象。

CID即C++交互式面板,CID根据软件开发人员的需求,支持从设计、开发到测试、推广及维护的整个开发设计周期,CID提供对RADE产品的单点访问。

尽管CID在WindowsNT下运行,它能够产生Unix程序代码。

MAB多工作空间应用生成器产品,它为CATIA V5应用程序提供一个集成统一的编译、链接、编辑、生成环境。

MAB能够承担多工作空间编辑,链接,运行代码生成,以及各工作空间之间依赖性的有效管理。

MAB还可以监控任一工作空间的源代码的变更,在整个编译过程中显示跟踪该变更,使编译过程只需要编译更改部分即可。

CATIA CAA 二次开发第二讲:添加Workbench这一部分很重要请注意认真看,说它重要是因为在后面程序的调试中可能会出现错误,请你务必在安装开发vc环境的时候注意,在安装vc的时候记得有个地方自己选,最好你都装了,如果你没有装也没有关系,到时候从vc的安装文件里面考出来也可以,就是关于RADE中会用到的lib库,在vc中的目录为v c98/mfc/lib目录下,如果你调试出现问题,比如error没有找到mfc42u.lib 或者别的你就要从安装盘里面把所有的lib里面的文件考到你的vc对应安装目录下。

相关文档
最新文档