APP下载

STEP中EXPRESS语言到Java语言的映射方法

2022-02-19吴华李湉张世贵李心灵杨滔

机械工程师 2022年2期
关键词:数据类型定义域实例

吴华,李湉,张世贵,李心灵,杨滔

(1.中国航发成都发动机有限公司,成都 610503;2.西南石油大学机电工程学院, 成都 610500)

0 引言

为了实现我国由制造大国向制造强国的转变,云制造、智能制造等先进的制造模式相继被提出[1-3]。它们是面向产品全生命周期的数字化、网络化、智能化制造系统。要实现这些先进的制造模式,实现产品信息建模方法标准化是十分重要的基础性研究之一[4]。

产品模型数据交互规范(Standard for the Exchange of Product Model Data,STEP)是国际标准化组织(ISO)制定的描述整个产品生命周期内产品信息的标准,它提供了一种独立于任何特定系统、能够描述产品数据的中性机制[5]。

EXPRESS语言是产品描述性语言,不是一种实现语言,因此需要通过语言映射来实现对产品信息模型的利用。已有映射研究中,周受钦[4]认为要完成集成CAD系统的信息,EXPRESS与应用开发语言C++/Java之间映射关系是基础,并简述了映射的两个关键点,数据类型的映射和数据关系的映射。赵继政[6]认为EXPRESS语言和Java语言存在描述能力和计算能力的对比差距,但EXPRESS作为一种描述性语言,并不具备计算能力。此外,由于未建立一般的映射方法,部分研究者存在映射不正确、不准确、不完整的情况(例如:EXPRESS的REAL数据类型不需要考虑精度的问题; 未定义表达式及关键操作符如:=:、IN、LIKE等)。这使得在面向大量的EXPRESS描述的产品信息模型,实现映射的通用性、正确性难以保证。大多数CAx系统采用的是C/S模式,研究映射的目标语言多为C++语言。相比EXPRESS语言到C++语言的映射研究[7-10],建立EXPRESS到Java的映射研究较少[11]。要加快STEP的产品信息模型的快速应用,对于采用Java语言用于开发的研究者来说,建立一种通用性强的EXPRESS到Java的映射方法是必要的。

1 EXPRESS到Java的映射的总体框架

EXPRESS语言符合传统设计语言,又在此基础上吸收了面向对象的技术特性,这使其兼具了较强的语言表达力和描述优势。EXPRESS语言对Java语言的映射可实施性较强,总体的映射复杂度相对较小。

本文在总结EXPRESS和Java的特点的基础上,将映射方法分类为一致映射、简易映射、预定义映射、功能改进映射、功能置换映射。依据上述具体情况说明所对应的映射方法,将EXPRESS语言的所有元素依据层级关系建立了到Java映射的总体框架,如图1所示。

图1 EXPRESS到Java映射总体框架

EXPRESS中的SCHEMA与Java中的包package进行简易映射,映射方法和总体框架的关键内容映射在后文做进一步说明。

2 EXPRESS到Java的映射方法

2.1 数据类型的映射

EXPRESS语言的数据类型有简单数据类型、聚合数据类型、命名数据类型、构造数据类型、广义数据类型。大部分简单数据类型和聚合数据类型的定义于与Java语言常见数据类型是一致的,但在相对复杂的数据类型有较大差距,如表1所示。

表1 数据类型的映射表

2.1.1 简单数据类型

简单数据类型有数字型(NUMBER)、实型(REAL)、整型(INTEGER)、字符串型(STRING)、布尔型(BOOLEAN)、逻辑型(LOGICAL)和二进制型(BINARY)。Java中存在双精度浮点数double、整数类型int、字符串类型String、布尔类型boolean、enum(自定义)、二进制数类型byte与之映射。

2.1.2 聚合数据类型

聚合数据类型包括数组(ARRAY)、列表(LIST)、包(BAG)和集合(SET)。除BAG以外,在Java中存在Arrays类、ArrayList类、Set类与之映射。前两者为简易映射,只是声明的关键词不同,后者的SET声明的关键词相同,因此是一致映射。由于Java中不存在与BAG功能相近的类,需要预定义映射。BAG数据结构的特点是:1)允许出现重复的元素;2)元素的集合是一个无序的集合;3)包内的元素数量是可变的。

2.1.3 命名数据类型

命名数据类型是指那些可以在形式化规范中说明的数据类型,是EXPRESS语言最基本、最重要的元素,包括实体数据类型和定义数据类型。

实体数据类型需用户赋值一个实体标识符,通过该标识符实现引用。实体映射的关键点有属性、局部规则、子类和超类和抽象实体数据类型等。

1)属性。属性在EXPRESS语言中是描述实体的本质特征、特点和特性,这与Java中用成员变量描述实例的状态是类似的。属性主要分为显示属性、导出属性和反向属性。尽管ENTITY数据类型的属性与Java类的成员变量有共同之处,但在导出属性和反向属性上仍然需要功能置换映射,其映射到Java属性的处理过程及示例如表2所示。

表2 属性映射表

属性映射过程中,需要注意的是导出属性需定义导出函数,并将该函数放置于构造函数与相关属性的set函数中的尾部。从而达到EXPRESS导出属性的功能。

2)局部规则。局部规则分为唯一性规则和定义域规则。唯一性规则在所给实体数据类型的所有实例之间控制属性值的唯一性。定义域规则对给定实体数据类型的每个实例的属性值或这些值之间的其他约束条件进行描述。

唯一性规则的映射为功能置换映射。主要是约束实体的所有实例的某个属性的值不能相等,在Java中不存在约束成员变量的值唯一性的规则,因此需要功能置换映射。具体实现方法是先定义一个与约束规则对应的类变量的数组,以及监测该数组是否有重复元素的唯一性函数。唯一性函数要求放置于构造函数和相关属性的set函数中的尾部。当数组有重复的值,唯一性函数将会有提示,从而实现唯一性规则。

定义域规则的映射也为功能置换映射,需要定义一个私有变量作为是否满足定义域规则的状态变量,同时需要定义一个定义域函数来判断属性是否属于定义域内,若不在定义域内,则提示。与唯一性规则一样,定义域函数应放置于构造函数和相关属性的set函数中的尾部。

3)其它。子类与超类:EXPRESS的子类与超类与Java是一致的,是简易映射。EXPRESS 通过SUPERTYPE、和SUBTYPE的关键字进行超类和子类的声明,Java则采用extends关键字。EXPRESS的子类和超类声明在ENTITY和ENDENTITY之间,而Java则在类定义的头部。

抽象实体数据类型:EXPRESS允许声明不能直接被实例化而仅可通过其子类实例化的ENTITY数据类型-抽象实体数据类型。这与Java的抽象类的功能是一致的,可以通过抽象类的方法简易映射达到抽象实体数据类型的功能。

定义数据类型的映射:定义数据类型是定义某个数据类型的变量声明操作,可与Java中变量和类实例的初始化映射。

2.2 表达式的映射

表达式由操作符、操作数及函数调用组合而成,并且要对它们进行运算以产生一个结果值。EXPRESS语言对操作符进行了定义并规定了与每一种操作符一起使用的操作数的数据类型,实现操作符的优先级映射和操作符的映射亦是模式映射的主要内容之一。

EXPRESS语言的操作运算符分为组件引用、一元操作符、取幂运算、乘法/除法运算、加法/减法运算、关系运算,共6个优先级。Java语言的操作符分为后缀、一元、乘性、加性、移位、关系、相等、按位与、按位异或、按位或、逻辑与、逻辑或、条件、赋值、逗号,共15个优先级。映射过程中,有以下3个注意点:

1)在Java中取幂、实例比较、成员操作、相似操作符在Java中没有直接操作符与之对应,因此需要一定的处理以完成映射。对于取幂运算,采用Math.pow进行替代,对于实例比较、相似操作、赋值操作符的功能则需自定义映射,在Java中设计全局静态函数实现其功能。

2)在映射过程中,部分操作符的优先级顺序发生改变。例如或运算符及异或运算符的优先级低于了等号运算符和不等号运算符。又如取幂函数Math.pow的优先级上升到最高的0优先级。对于运算优先级上的改变,本文的解决方案是对于映射过程中只要存在运算符是带有下划线的操作符,一律加花括号( ),以保证运算先后顺序的正确性。

3)当操作符是同一优先级别时,就需要考虑操作符的结合性,EXPRESS语言一律采用从左至右,部分操作符与Java操作符不同,这也影响这运算的顺序。为了保证映射正确性,同样采用花括号( )避免映射结合性的秩序问题。

此外,EXPRESS语言操作符中还存在实例比较、成员操作、相似操作三种操作符,需要在Java中预定义映射。实例比较操作符的映射:数字型、逻辑型、字符串型、二进制型及枚举数据类型的实例比较,等价于对应的值比较操作符。因此Java映射对于上述类型采用值比较操作符进行返还结果值。EXPRESS的聚合实例和实体实例的比较操作符,需定义对应功能的全局静态函数实现自定义映射。

成员操作符的映射:成员操作符的功能主要是判断某个元素是否存在于某个聚合数据类型中,为真则返还TRUE,否则返还FALSE。实现方法同实例比较操作符。相似比较符的映射:相似比较符用于两字符串的匹配。如果对应的任何字符不存在,则匹配失败,结果为FALSE,匹配成功返还TRUE。在Java存在Pattern类可以实现这个匹配功能。

3 案例分析

现有一个EXPRESS模式,SCHEMA s。有4个实体数据类型:person、teacher、student、graduate。person实体含有属性身份证ss_no(整型)、出生日期date(日期型)、编号id(String字符串型)。teacher实体继承了person,将person中的id重写为INTEGER整型,同时有定义域约束年龄小于21。student实体继承person,定义域约束年龄大于5,选的课程需为定义的course枚举数据类型的范围中。graduate实体继承student和teacher,定义域约束GRAD LEVEL IN teachers。定义course枚举数据类型。利用上述映射方法,从EXPRESS模式到Java模式的映射结果如图2所示。

图 2 EXPRESS模式到Java模式的映射

4 结语

本文将映射方法总结并归类为一致映射、简易映射、预定义映射、功能改进映射和功能置换映射,构建了从EXPRESS语言到Java语言的总体框架。详细论述了EXPRESS的数据类型、表达式等元素到Java的映射具体实现方法。依据该一般化映射方法实现了对SCHEMA s的EXPRESS模式到Java模式的映射。文中建立的一般化映射方法,适用于STEP标准中EXPRESS语言描述的信息模型的Java映射。大量现有的信息模型标准知识,为基于Java语言开发的CAD、CAPP、STEP-NC等系统提供了可借鉴的标准。

猜你喜欢

数据类型定义域实例
如何求抽象函数的定义域
详谈Java中的基本数据类型与引用数据类型
永远的定义域
如何理解数据结构中的抽象数据类型
抽象函数定义域的四种类型
归纳复合函数定义域的求法
完形填空Ⅱ
完形填空Ⅰ
在.NET环境下进行nashRemoting开发
基于PBBLOB实现的文件操作