UML
到CORBA IDL的映射
1.0 beta 1版
1997年1月13日
2800 San Tomas Expressway
Santa Clara, CA 95051-0951
版权所有 1997瑞理软件(Rational Software)公司、MCI systemhouse公司以及Unisys公司。
本文档允许被影印、电子发行或被翻译为外语,如果完全复制本文档,请全文引用本提示,并包含下列声明:
通过环球网(WWW)地址 http://www.rational.com 可以得到统一建模语言(UML)的最近更新版本。
目录
本文档是瑞理(Rational)et al 对于OMG的OADTF RFP-1提议的一部分。完整的提议在 http://www.omg.org/member/doclist-97.html 下的文档ad/97-01-01到 ad/97-01-14中,OMG的成员可以从那里得到它。对UML的修改可在http://www.Rational.com/uml下找到。请把对本文档的反馈用电子邮件发送到 [email protected] 。
本文档描述怎样把基于统一建模语言 (UML) v1.0的模型映射到与它相关联的 CORBA 1.2 (或更迟版本) 接口声明语言(IDL)构件上。此处不包括IDL特定厂商的扩展。因此,这个UML-IDL映射适用于任何依从CORBA 1.2(或更迟版本)的ORB。
本文档是向对象管理组的UML提议的一部分。我们假定读者对UML语义1.0版(UML v1.0 Semantics)(此文档包含在提议文档集中)中的概念有基本的理解。
本文档内容与Rational RoseÔ 4.0中所实现的UML/IDL映射不同,后者是在UML1.0标准完成之前开发的。但是,两者的基本原理是一致的。预期在1997年4月中旬之前更新此文档。
UML的原理包括两点:1) 一个精确定义的核心元素的集合,它们对所有语言都统一适用;2) 一个扩展机制的集合,用于添加向具体语言的映射细节。
代码生成的主要的扩展机制是特征值。 在UML中,特征值能附加到任何模型元素, 在UML向IDL的映射中,有些就是用特征值来叙述的。在本文档中,特征值的名字或标记是以粗斜体的形式出现的。
在默认情况下,UML/IDL对每一个IDL元素生成一个名为IDLfilename.idl的源代码单元。这里IDLfilename是一个特征值,指定要生成的源文件的名字。
作为任选项,我们可以通过在UML模型中把IDL元素指定到一个构件来使这些元素的代码生成到目标源文件中。这样可定义一个IDL模块接口的集合,并且把类(和其它类型)映射到这些接口。
每一个IDL源代码单元具有如下格式:
// user defined header
// ...
#ifndef name_idl
#define name_idl
...
#endif name_idl
这里 name 是构件(模块)或类名字。UML/IDL完全支持CORBA 1.2 IDL的构件:模块、接口、结构、联合、类型定义、常量和异常。以下的各小节描述了怎样用UML/IDL生成这些构件。
要生成一个IDL模块, 选择一个UML构件并产生其相应的IDL描述即可。这将生成如下格式的IDL模块:
module modulename
{
//...
}
在UML模型中,映射到某一模块上的项,如果其类标记IDL Element被置为’TRUE’,它就将在该模块定义中生成IDL元素。
如果一个IDL接口所基于的类是从UML模型中的某个基类导出的,这种继承将在生成的IDL代码中以如下形式反映出来:
要生成一个基于类的类型定义,置类标志值 ‘IDL Element’为‘TRUE’并置类标志值‘IDL Specification Type’为‘Typedef’。生成的IDL将有如下格式:
要生成一个基于类的异常的定义,置类的标志值 ‘IDL Element’为‘TRUE’并把类标志值‘IDL Specification Type’置为‘Exception’。生成的IDL将有如下形式:
要生成一个基于类的结构定义,置类的标志值 ‘IDL Element’为‘TRUE’并把 类标志值‘IDL Specification Type’置为‘Struct’。生成的IDL将有如下形式:
‘type’被类标志值‘Implementation Type’的内容代替而‘value’被类标志值‘Const Value ’的内容代替。
生成接口、异常或结构的任何类(或其它类型)的每一个属性都将生成一个IDL 属性定义,只有一个例外(参见后面的 ‘Constant’)。缺省定义如下:
要把一个属性定义为数组,为它指定一个有限的多重记号并把它的‘BoundedHasRelType’ 特征值置为 ‘Array’。 这将生成如下的IDL:
要把一个属性定义为有界序列,为它指定一个有限的多重记号并把它的‘BoundedHasRelType’特征值置为‘Bounded Sequence’。 这将生成如下形式的IDL:
要把一个属性定义为无界序列,为它指定一个无限的(’N’)多重记号。这将生成如下形式的IDL:
要在一个接口定义的内部生成一个常量必须基于一个属性。把该属性的特征值 ‘Is Const’置为‘TRUE’并且把属性的性质‘Const Value’置为常量表达式的值。这将生成如下形式的IDL:
生成接口的任何类的每一个操作都将生成一个IDL操作定义,其形式如下:
<oneway> type operationname (parameters) <raises (...)> <context (...)>;
‘单向’(’Oneway’)参数的生成是由布尔型操作标志值‘OperationIsOneWay’控制的。其缺省值是’FALSE’,对需要单向参数的操作,把它置为‘TRUE’。
如果一个操作需要‘raises’子句,它的‘RaisesExc’ 特征值应当非空。生成的‘raises (...)’子句的括号之间将用‘RaisesExc’ 特征值的内容填入。
如果一个操作需要一个‘context’子句,则它的 ‘Context’ 特征值应当非空。生成的‘context (...)’子句的括号之间将用‘Context’ 特征值的内容填入。
下表总结了从UML元素到IDL构件的映射。中间的一列给出相关的UML性质(即在UML元模型中的一个属性或关系)或标志。