宋刚+刘永志+申长雨
作者简介: 宋刚(1977—),男,山东潍坊人,讲师,博士研究生,研究方向为计算机数值模拟,(Email)songgang@zzu.edu.cn0引言
ZMold是橡塑模具国家工程研究中心自主开发的注塑模具CAE软件.[1]在研制宇航员出舱面窗过程中,通过数百次模拟面窗成型过程得出优化的成型工艺参数,ZMold软件发挥重要作用.在开发ZMold软件的过程中,用户需要输入或者选择大量的信息,例如材料信息、求解算法参数、成型条件、有限元网格属性和分析过程选择等.这些信息还可以细分,例如单材料包含热塑性材料、热固性材料、冷却液、模具材料和填充物等.这些材料所包含的信息内容又各不相同,非常繁杂.对话框作为信息输入的主要手段在软件开发中被大量使用.在Windows程序中,对话框模式是最为经典的UI设计模式之一,具有良好的用户体验和快捷的操作效率.[2]在早期的ZMold开发中,对话框是在程序中固定编写的,如果软件需要生成新对话框或者修改原来对话框,需要开发人员对软件源代码进行修改,重新编译连接生成新的可执行文件,过程非常费时费力.为满足模具CAE分析软件各种信息的输入需求,使开发人员可以方便地设计所需的对话框并且不需要修改程序代码,开发数据驱动对话框模块ZDialog.该模块可以从文件读取所需信息创建对话框.
创建数据驱动对话框需要的信息有两类:一类是对话框原型描述的定义文件,说明对话框包含的组件和相关逻辑,例如按钮、编辑框和下拉框及其触发的功能等;另一类是结果文件,记录对话框组件的取值和用户的输入或选择,由ZDialog自动生成,并提供接口函数进行读写操作以提供数据给计算模块使用.ZDialog模块的功能图解见图1.由图1可以看出,当软件开发者需要新的对话框或者对已有的对话框进行修改时,只需修改定义文件,ZDialog模块可以根据新的定义文件自动生成新的对话框,从而增加软件的重用性和适应性,提高开发效率,减轻开发强度.
图 1ZDialog模块的功能图解
Fig.1Function chart of ZDialog
1ZDialog原理
ZDialog模块开发工具采用Microsoft VC++.利用面向对象的开发思想[3],将其主要封装在CMoldDefine,CMoldData和从CDialog继承的ZDialog对话框等3个类中.CMoldDefine类用来操作定义文件;CMoldData类用来操作结果数据文件;ZDialog类用来管理对话框.ZDialog类主要包含对话框组件类的数组.对话框组件类从MFC的组件类继承而来,主要包括文本、编辑框、下拉框和列表组件等.在这些类中添加新的成员和方法以扩充组件的状态和操作.通过这些新的成员和方法将对话框与定义文件和数据文件紧密结合起来,实现数据驱动功能.
首先创建CMoldDefine定义文件对象,依照定义文件格式读取数据文件,从而创建CMoldData对象;然后利用CMoldDefine类的实例生成ZDialog对象的对话框组件对象的数组,利用CMoldData对象给这些组件对象赋值,在ZDialog::OnInitDialog中创建这些组件.此时,调用ZDialog::DoModal方法就可以显示对话框.同时,利用消息映射编写统一的事件函数,左键单击处理用户对这些组件的操作.编写ZDialog::DoDataExchange函数进行数据交换.[4]在用户关闭对话框时,可将更新后的数据写入结果数据文件中,下次打开对话框便是更新后的数据.
如何开发合适的对话框定义文件是实现数据驱动对话框的关键所在,也是研究的重点.
2对话框定义文件
ZDialog模块的核心是对话框定义文件的实现.在定义文件中提出CDST,CODE和DATA等数据结构.CDST是CODE的集合,CODE是一组相关组件的有机结合;每个CDST对应一个对话框.CODE包含若干个DATA.DATA可以理解为一个组件,例如按钮、单选框、复选框和文本框等.定义文件还用到关键词UION,CDDP和REPT等.CDST书写格式为
CDST n1 "description" // n1为CDST的ID.
{ CODE c1 "code description"
{
DATA 1
{ "Option description" }
DATA 2
{ "Button description" }
DATA 3
{ "description 1" v1
"description 2" v2
…
}
DATA 4
{ "String" }
DATA 5
{ "description" "format" "unit"
minv maxv
}
REPT
}
CODE c2 "code description"
{
…
}
… //还可以添加若干CODE
UION { CODE ID list }
CDDP c1
{ {n1 v1 c1 c2 c3 …}
…
}
CDDP cn
{ {n2 v2 c4 …}
…
}
… //可以继续添加CDDP
}
说明:CDST以“CDST n1 "description"”作为开始,其中CDST为关键词,n1为CDST的ID,"description"为CDST的描述.CDST下面的内容使用“{ }”括起来.在定义文件中包含若干个CDST的定义.一个CDST中包含若干CODE,CODE也有ID及描述,是组成CDST的核心部分.每一个CODE里面包含若干个DATA.基本的5种DATA的类型定义见表1,可以根据实际的需要进行扩展.
表 1DATA组件中的数据类型
Tab.1Data types of DATA component名称标志格式说明复选框1DATA1
{ "Option description" }选中为1,不选为0按钮2DATA2
{"Button description" }按下为1,否则为0下拉框3DATA3
{"description 1" v1
"description 2" v2
…
}选中第1项取v1值,选中第2项取v2,依此类推.字符串4DATA4
{ "String" }数值5DATA5
{"description" "format"
"unit"
minv maxv
}描述,数据格式,单位
取值下限和上限
REPT关键词如果在CODE结尾出现,表示该CODE是一个表格类型的CODE,要求CODE中的DATA全部为数值.
UION关键词用来表示CDST对话框的风格.UION以各CODE上下依次排列的形式出现,可以定义另外的对话框风格,例如标签页形式的对话框.
CDDP用来定义在用户改变CODE值时应触发的相应操作.CDDP以关键字CDDP开始,后面紧跟CODE的ID,表明哪个CODE的值发生改变会触发该CDDP.一个CDDP的内容包括至少一个{n1 v1 c1 c2 c3…}的内容,表示当CODE的第n1个值等于v1时,会触发CODE c1 c2 c3…,从而引起相应的操作.CDDP主要用在选中下拉列表框某一项或者某个选择框被选中时以及某个按钮被点击时所引起的响应.
3数据驱动实例
以一个完整的CDST例子演示生成的对话框随数据定义文件的改动而动态改变.
CDST 50000 "冷却计算参数"
{ CODE 50010 "计算几何体影响的方法"
{ DATA 3 //下拉列表框
{ "Ideal" 1
"Parameter" 2
}
}
CODE 50011 "值"
{ DATA 5 //一个数值编辑框
{ "" "%d" "[4:10000]" 4 10000 }
}
CODE 50020 "只是一个演示"
{ DATA 5
{ "模温收敛公差" "%.10Lg" ""
0.00001 0.5
}
DATA 5
{ "最大模温迭代次数" "%d" ""
10 10000
}
REPT //表示是一个2列的表格
}
UION { 50020 50010 }
CDDP 50010
{
{ 1 3 50011 }
}
}
根据CDST 50000生成的对话框见图2.对话框主要由CODE 50020(表格)和CODE 50010(一个下拉框)组成.图2显示选中下拉框第二项的情况.根据CDDP 50010可知,当选中下拉框50010时右边会出现编辑框50011.
图 2根据CDST 50000生成的对话框
Fig.2Dialog box generated by CDST 50000
将该CDST 50000稍加修改,添加一个新的CODE.
CODE 50030
{ DATA 2 //按钮
{ "Set…" }
}
将CDDP 50010修改为:
CDDP 50010
{
{ 1 3 50030 }
}
添加新的CDDP 50030
CDDP 50030
{
{ 1 1 50020
50011 }
}修改后的CDST 50000生成图3所示的对话框.与图2相比,选中下拉框第二项的时候,编辑框变成由CODE 50030定义的按钮,通过定义CDDP 50030,点击该按钮弹出由表格CODE 50020和编辑框CODE 50011组成的一个新对话框,可以进行信息输入.
图 3修改后的CDST 50000生成对话框
Fig.3Dialog box generated by modified CDST 50000
通过演示可以清楚地看到数据驱动对话框的优点:不用修改程序文件,只需要修改定义文件就可以产生各种不同的对话框,从而达到软件重用的目的.
4结束语
为提高软件开发效率、降低开发成本,软件开发者一直在寻求好的开发方法.其中,软件重用技术担负重要作用.本文提出的数据驱动对话框软件重用技术不仅可以提高软件重用程度、减少工作量,而且可以方便地维护和扩充系统,使系统具有很好的可维护性.在开发CAE软件ZMold的实践中已经证明该方法是行之有效的软件可重用开发技术.参考文献:
[1]陈静波, 刘春太, 王利霞, 等. 注射模ZMold软件的开发与应用[J]. 模具工业, 1997, 23(11): 912.
CHEN Jingbo, LIU Chuntai, WANG Lixia, et al. ZMold software development and application of injection mold[J]. Die & Mould Industry, 1997, 23(11): 912.
[2]黄方荣. 未来的Web重要交互模式——对话框[J]. 程序员, 2006(12): 6566.
HUANG Fangrong. Future Web interactive mode: dialog[J]. Programmer, 2006(12): 6566.
[3]BARNES B H, BOLLINGER T B. Making reuse cost effective[J]. IEEE Software, 1991(1): 1324.
[4]侯俊杰. 深入浅出MFC[M].