基于组件的开放式CAD系统模型
孙家广 陆薇 刘强
(本文转载自软件工程专家网www.21cmm.com)[url=http://www.21cmm.com/prelogin.asp?page=/bbs/index.asp?Type=F][/url]
当今计算机辅助设计(CAD)软件的规模与复杂性,使得其体系结构成为CAD软件开发及应用能否成功的决定因素.CAD系统模块的划分、模块间的联系方法、CAD系统的组成部件等正成为CAD领域中倍受关注的问题。
CAD系统模型取决于其建模目标.进入90年代以后,CAD技术和应用需求都发生了很大的变化.在技术上,“并行工程”要求某一领域的方法能够和其他专业技术在同一环境中有机结合;在需求上,随着CAD应用领域的扩大和专业深度的纵深发展,人们更倾向于选择有针对性的专业应用软件,传统的大而全的CAD系统逐渐被支持二次开发的CAD支撑系统所取代.在CAD系统再次开发成为必然的今天,CAD系统的开放性成为各开发层次用户的主要关注点。
针对CAD系统的开放性,曾先后出现了许多类系统模型,代表了CAD技术与产业发展的不同阶段.面向对象软件工程(Object-Oriented Software Engineering)技术的兴起,使CAD系统模型的发展达到一个新的阶段.此后,组件技术的逐渐成熟又为CAD系统的建模引入了新的思想。
本文系统地分析了以数据为中心、以执行为中心和面向对象的CAD系统模型的构成及其优缺点.在此基础上,运用基于组件的软件工程技术,提出了一种结构层次清晰,各模块接口规范,联系简洁,易于扩充的两级总线模型,并详细地分析了该模型中各组成部件的功能和联系方法,最后给出模型的应用实例和结论。
1几类CAD系统模型
1.1 CAD系统模型的设计目标
当前,CAD系统模型的设计目标是提高实际应用的CAD系统的开放性和集成性,同时,作为一种典型的交互系统,效率也是一个重要目标。
CAD系统的开放性包括数据的开放性、功能的开放性及系统的可扩充性.是否具备良好的开放性基本取决于系统模型.CAD系统的集成性是指通过一致的信息描述手段和处理机制将各功能子系统统一到同一个集成环境.集成性的好坏也基本取决于系统模型.CAD系统的效率通常包括系统运行的效率和应用开发的效率.运行效率是系统运行时的时空复杂度,而应用开发的效率指开发的难易程度和执行效率.效率大部分取决于系统模型,也与系统的具体实现有关。
开放的系统模型使得子功能部件的集成易于实现,同时也必然提高应用开发的效率;集成和高效反过来又有利于更好地达到开放的目的.这三者相辅相成,其中又以开放性作为集成和效率的基础,只有开放才有集成,只有开放才有效率。
1.2 以数据为中心的系统模型
以数据为中心的系统模型如图1所示.这类模型将数据库放在系统的核心层次共享,各功能部件采用统一的数据描述,各子系统的开发过程完全独立;子系统间有统一的数据交换接口;整体的可扩充性好(可任意增加符合数据交换标准的应用程序).同时,这种模型整体结构松散,集成性不够良好;只能做到数据复用,不能做到功能复用,造成大量的代码冗余;由于应用相关数据的存在,难于定义符合所有应用需求的数据接口标准,因此会出现数据语义失真.从开放性的角度来讲,这类系统只具有数据开放性,不具有功能开放性,但其可扩充性很好。
1.3 以执行为中心的系统模型
以执行为中心的系统模型如图2所示.这类模型着眼于将不同的应用系统通过统一的执行中心来实现关于数据模型和用户界面的共享和一致.它将共有的计算和执行功能从应用程序中分离出来,放在执行中心,避免了代码冗余;用户与系统的交互与应用程序相分离,便于实现统一风格的用户界面;和数据库的任何数据交换都要通过执行中心进行,有利于数据的严格管理,保证了数据的一致性.这类模型解决了以数据为中心的系统模型的代码冗余及界面风格不统一等问题,但仍存在一些缺陷:执行中心的功能设计复杂,很难确切定义符合所有应用要求的功能集合,而且实现起来也相当困难;执行中心同时与用户界面和所有应用程序保持通讯,又管理着CAD数据库,负担过重,极易形成瓶颈.这类模型既具有数据的开放性,又具有功能的开放性,可扩充性也好,整体上优于以数据为中心的系统模型。
1.4 面向对象的系统模型
随着面向对象技术的成熟,出现了更为简炼的面向对象的系统模型,如图3所示.该模型与前两类模型的设计思想有较大差别.在该模型中,CAD内核对象中封装的是能为用户界面对象和所有应用对象共享的数据及相应的操作;用户界面对象中封装的是用户界面数据及相应的操作;应用对象中封装的是应用数据及相应的操作.所有这些对象通过相互间的通讯协调来完成指定的功能.从系统构成的角度来说,该模型的结构是无中心的,系统由各对象实体构成,各对象实体具有平等的地位,这与以数据为中心和以执行为中心的模型不同.面向对象的系统模型的主要优点在于,数据和功能的合理封装降低了由于数据和功能的集中管理所带来的通讯上的开销和操作上的复杂性.另外,系统的无中心结构也使系统的构成变得更加灵活.从整体上看,面向对象的系统模型无论其开放性还是其有效性都要优于前两类模型。
2组件技术的引入
面向对象模型比以往的模型有了很大的进步,但仍有不足:对象之间的联系是一种点对点的直接联系,当系统中对象数目增加时,通讯链接数将以平方级激增;同时,为支持通讯,每个对象实体都要维护一个包含所有对象实体功能服务信息的功能服务信息库,这部分信息不但重复,而且还要保证其一致性.这些开销都损害了系统的效率.更大的问题还在于:对象的接口没有一致的标准,造成向系统中扩充对象时的随意与不规范,不利于系统的维护以及对象的复用.为此,我们引入组件技术(Component Technology),引入该技术后,系统的整体模型如图4所示。
组件技术是继面向对象技术之后发展起来的一种新的软件工程技术,是面向对象技术的延伸.基于组件的系统模型仍然是一种面向对象的结构,但系统中的对象是按照规范设计的模块,这些定义良好的软件模块(称为组件Component)在系统中共存,并且充分地相互作用.按照这种结构,可以将若干组件组合起来,以建立更大和更复杂的系统。
这种模型的关键在于一种高效的总线结构,使组件之间能以一个公共的接口互相连接,做到组件的即插即用,无缝集成.这种模型的系统中,组件间的通讯链接数是线性的,并且由于各组件接口规范的一致性,通讯的复杂度大大下降,也提高了组件的互操作性。
根据组件在系统中地位的差异,CAD系统中的组件可以分为两个层次:核心组件和应用组件.核心组件是CAD系统必不可少的组成部分,如用户交互组件和几何造型组件,它们和系统总线一起构成了CAD系统核心.应用组件是根据不同应用领域需求开发的外围模块,如机械设计组件、建筑设计组件,可任意插拔,与CAD系统核心一起组成专业领域内的应用CAD软件。
相对于核心组件来说,应用组件所要求的系统服务要少得多,请求服务的频度也较低,根据这些特点,我们设计了一种双总线结构,辟出一条应用总线来专门支持应用组件,应用总线和核心总线相通,核心组件和应用组件之间仍然保持良好的互操作性,但应用总线屏蔽了应用组件的一部分服务请求,减少了核心总线上的流量,从而提高了CAD系统核心的效率.引入应用总线后的详细系统模型如图5所示。
3系统模型内部结构
3.1 总 线
总线提供组件之间通讯的透明机制.总线对外提供一致的接口规范,每个新加入的组件都要向总线注册其功能服务信息,并在退出时注销其功能服务信息.当一个组件要请求另一个组件的服务时,总线负责查询功能服务信息库,定位提供此服务的组件,并传送此服务请求。
3.2 核心组件
该模型框架中有如下核心组件:对象库、执行自动机、交互服务器、数据库管理器和数据转换器。
*对象库 (Object Library)
对象库作为系统的几何引擎,由一组对象类组成,其中包括几何实体类、造型算法类、图形实体显示类和几何实体选择类.这些类封装了CAD系统最基本的几何造型和图形显示功能。
*执行自动机FSEA(finite state execution automat)
执行自动机是系统的执行引擎,它是一个有限状态自动机,在交互服务传送来的事件的驱动下,从系统状态空间的一个结点转移到状态空间的另一个结点,自动机状态转换的过程也就是CAD系统运行的过程。
*交互服务器(Interactive Services)
交互服务器是系统的对话引擎,包含了所有实现用户界面的资源,包括系统运行的图形交互环境、界面资源库、界面定义宏语言解释器.图形交互环境负责人机交互,用户可以通过界面定义宏语言控制图形界面的布局,并定制界面元素的外观和功能。
*数据库管理器(Database Management)
这是系统的数据管理和访问引擎,提供对CAD数据库中的永久性数据的存取和访问操作支持,包括数据的一致性保护、共享、并发访问控制。
*数据转换器(Data Translation)
作为开放的系统模型,提供对数据开放性的支持是必须的.模型中的数据转换器提供了本系统内部数据格式与其他CAD系统数据格式的转换功能.该转换器对外有两个接口:一个是工业标准接口,通过此接口,将内部数据转换成符合工业标准的数据格式;另一种是直接转换接口,通过此接口,内部数据被转换成某一特定CAD系统的数据格式。
3.3 应用组件
CAD系统核心提供了一个应用CAD系统的原型和系统集成框架,是一个通用的支撑平台,但还远不是一个实用的CAD系统,仅当将根据某特定应用领域需求设计开发的应用组件集成到此支撑平台上时,才构成一个实用系统.应用组件可以针对任何CAD应用领域,如机械、建筑,它们插入到支撑平台上就相应构成了机械设计CAD系统、建筑设计CAD系统。
应用组件与CAD核心系统的集成方式如图6所示。
应用组件不是直接连结到应用总线(也称Broker)上,而是通过一个软件代理(Agent)间接地连在总线上.Agent的作用在于,一方面,代理应用组件的复杂通讯过程,使应用组件更专注于功能的实现;另一方面,它将适应不同应用需求的组件内部的异构数据转换成同构数据,以保证Broker上通讯语言的统一。
3.4 组件结构对系统开放性的支持
组件结构是面向对象结构的继承和延伸,它具有面向对象结构的所有优点.同时,在这种模型中,组件是一种封装良好的功能部件,对外具有一致的接口,组件间的通讯由总线统一代理,降低了组件之间的相互依赖.软件开发者可以方便地定义和建构新的即插即用组件来扩充系统.以命令为例,如果想在系统现有命令组件的基础上增加新的命令组件,只要按照命令组件的既定接口规范定义其各个状态,插入系统,执行自动机就会象执行内部命令一样自动执行.应用组件的增加更为容易,甚至可以在系统运行期间动态载入和卸载.CAD系统模型中引入组件结构,大大增加了系统功能的开放性和可扩充性。
4结 论
GHCAD系列软件是我国CAD应用工程主推产品,曾获“八五”国家科技攻关重大成果奖.GHCAD系列软件的发展过程在一定程度上也体现了CAD系统模型的发展过程.GHCAD早期产品采用的是以数据为中心的系统模型,而GHCAD3.0则是成功地以执行为中心的开放的CAD支撑系统,到GHMDS1.0,其系统模型已较为接近面向对象的系统模型,GHMDS2.0的设计中已经使用了Broker的概念,正在开发的GHMDS 4.0则采用的是本文提出的基于组件的两级总线结构。
实践证明,CAD的系统模型在CAD系统的建构中起了至关重要的作用.本文提出的基于组件的CAD系统模型,增加了系统结构的灵活性,提高了模块内聚度,降低了模块间的耦合度,使应用开发的难度下降,系统的可维护性和可重用性上升,进一步增强了系统的开放性、集成性和效率。