⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umlmapidl005.htm

📁 软件开发文档大全
💻 HTM
字号:
<head><meta NAME="&acute;&iexcl;&atilde;&Iacute;&acirc;&Egrave;&iacute;&frac14;&thorn;&sup1;&iexcl;&egrave;&sup3;&Igrave;" Content="Author:Asia Alien"><title>UML元元模型(中文)</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><link REL="stylesheet" HREF="../../newcss.css" TYPE="text/css"></head><body>    <font size="5"><b><p><img border="0" src="i/umldilver.gif" WIDTH="606" HEIGHT="15"></p>     <p><a name="4"><font face="宋体">4. IDL的生成</font></a><font face="宋体">     <a href="umlmapidl001.htm">返回目录</a></font></p>      </b></font><p><font face="宋体">UML/IDL完全支持CORBA 1.2 IDL的构件:模块、接口、结构、联合、类型定义、常量和异常。以下的各小节描述了怎样用UML/IDL生成这些构件。</font></p>      <font size="5"><b><p><a name="4.1"><font face="宋体">4.1 模块</font></a></p>       </b></font><p><font face="宋体">要生成一个IDL模块, 选择一个UML构件并产生其相应的IDL描述即可。这将生成如下格式的IDL模块:</font></p>       <blockquote>         <blockquote>           <p><font face="宋体">module modulename</font></p>           <p><font face="宋体">{</font></p>           <p><font face="宋体">//...</font></p>           <p><font face="宋体">}</font></p>         </blockquote>       </blockquote>       <p><font face="宋体"><br>       在UML模型中,映射到某一模块上的项,如果其类标记<i><b>IDL Element</b></i>被置为’TRUE’,它就将在该模块定义中生成IDL元素。</font></p>       <font size="5"><b><p><a name="4.2"><font face="宋体">4.2 接口</font></a></p>       </b></font><p><a name="4.2"><font face="宋体">要生成一个基于类(或其它类型)的接口定义,需把类标记<i><b>IDL       Element</b></i>的值置为‘TRUE’,把类标志值 ‘<i><b>IDL Specification Type</b></i>’置为       ‘Interface’。产生的IDL为如下形式:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.2"><font face="宋体">interface <i>classname</i> {...}</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.2"><font face="宋体"><br>       该类的属性和操作将在界面定义中生成IDL的属性和操作,就象下面在‘属性’和       ‘操作’中定义的一样。</font></a></p>       <font size="4"><b><p><a name="4.2.1"><font face="宋体">4.2.1 继承</font></a></p>       </b></font><p><a name="4.2"><font face="宋体">如果一个IDL接口所基于的类是从UML模型中的某个基类导出的,这种继承将在生成的IDL代码中以如下形式反映出来:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.2"><font face="宋体">interface derivedclassname : baseclassname {...}</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.2"><font face="宋体"><br>       多重继承的结果是产生一个以逗号分隔的基类名字的列表。</font></a></p>       <font size="5"><b><p><a name="4.3"><font face="宋体">4.3 类型定义</font></a></p>       </b></font><p><a name="4.3"><font face="宋体">要生成一个基于类的类型定义,置类标志值       ‘<i><b>IDL Element</b></i>’为‘TRUE’并置类标志值‘<i><b>IDL Specification       Type</b></i>’为‘Typedef’。生成的IDL将有如下格式:</font></a></p>      <blockquote>        <blockquote>          <p><a name="4.3"><font face="宋体">typedef <i>type</i> <i>classname</i> {...}</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.3"><font face="宋体"><br>       其中,‘<i>type</i>’的值由类标志‘<i><b>Implementation Type</b></i>’的值确定。</font></a></p>       <font size="5"><b><p><a name="4.4"><font face="宋体">4.4 枚举</font></a></p>       </b></font><p><a name="4.4"><font face="宋体">要生成一个基于类的枚举值的定义,置类的标志值       ‘<i><b>IDL Element</b></i>’为‘TRUE’并把类标志值‘<i><b>IDL Specification       Type</b></i>’置为‘Enumeration’。生成的IDL将有如下形式:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.4"><font face="宋体">enum <i>classname</i> {att1, att2, ...}</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.4"><font face="宋体"><br>       括号里的值是从类中定义的属性的名字生成的文本文字。</font></a></p>       <font size="5"><b><p><a name="4.5"><font face="宋体">4.5 异常</font></a></p>       </b></font><p><a name="4.5"><font face="宋体">要生成一个基于类的异常的定义,置类的标志值       ‘<i><b>IDL Element</b></i>’为‘TRUE’并把类标志值‘<i><b>IDL Specification       Type</b></i>’置为‘Exception’。生成的IDL将有如下形式:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.5"><font face="宋体">exception <i>classname</i> {...}</font></a></p>           <p> </p>        </blockquote>      </blockquote>      <p><a name="4.5"><font face="宋体">该类的属性将在异常定义中生成IDL的属性,就象后面在‘属性’中定义的一样。</font></a></p>      <font size="5"><b><p><a name="4.6"><font face="宋体">4.6 结构</font></a></p>       </b></font><p><a name="4.6"><font face="宋体">要生成一个基于类的结构定义,置类的标志值       ‘<i><b>IDL Element</b></i>’为‘TRUE’并把 类标志值‘<i><b>IDL Specification       Type</b></i>’置为‘Struct’。生成的IDL将有如下形式:</font></a></p>      <blockquote>        <blockquote>          <p><a name="4.6"><font face="宋体">structure <i>classname</i> {...}</font></a></p>           <p> </p>        </blockquote>      </blockquote>      <p><a name="4.6"><font face="宋体">该类的属性将在结构定义中生成相应的IDL属性,就象后面在‘属性’中定义的一样。</font></a></p>      <font size="5"><b><p><a name="4.7"><font face="宋体">4.7 常量</font></a></p>       </b></font><p><a name="4.7"><font face="宋体">要在一个接口定义的外部生成一个常量定义,就必须基于一个类(或其它类型)。把类标志值‘<i><b>IDL       Element </b></i>’和‘<i><b>Is Const</b></i>’都置为‘TRUE’。置类标志值‘<i><b>Const       Value</b></i>’为常量表达式的值。这将生成如下形式的IDL:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.7"><font face="宋体">const type classname = value;</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.7"><font face="宋体"><br>       ‘<i>type</i>’被类标志值‘<i><b>Implementation Type</b></i>’的内容代替而‘<i>value</i>’被类标志值‘<i><b>Const       Value </b></i>’的内容代替。</font></a></p>       <font size="5"><b><p><a name="4.8"><font face="宋体">4.8 联合</font></a></p>       </b></font><p><a name="4.8"><font face="宋体">联合构件的映射目前还没有定义。</font></a></p>       <font size="5"><b><p><a name="4.9"><font face="宋体">4.9 属性</font></a></p>       </b></font><p><a name="4.9"><font face="宋体">生成接口、异常或结构的任何类(或其它类型)的每一个属性都将生成一个IDL       属性定义,只有一个例外(参见后面的 ‘Constant’)。缺省定义如下:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.9"><font face="宋体">&lt;readonly&gt; attribute <i>type attributename</i>;</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.9"><font face="宋体"><br>       另外,生成接口、异常或结构的相关的UML角色也会生成IDL属性定义。       </font></a></p>       <font size="4"><b><p><a name="4.9"><font face="宋体">4.9.1 只读</font></a></p>       </b></font><p><a name="4.9"><font face="宋体">只读参数的生成是由布尔属性标志值‘<i><b>ReadOnly</b></i>’控制的。对需要只读参数的属性,把它置为‘TRUE’。</font></a></p>       <font size="4"><b><p><a name="4.9"><font face="宋体">4.9.2 类型</font></a></p>       </b></font><p><a name="4.9"><font face="宋体">在模型中定义的属性的类型将被作为IDL的属性类型,但‘序列’属性定义的除外。</font></a></p>       <font size="4"><b><p><a name="4.9"><font face="宋体">4.9.3       带有多于一个多重记号的属性</font></a></p>       </b></font><p><a name="4.9"><font face="宋体">对于带有多于一个角色多重记号的UML关联,它们被映射到数组、序列或者潜在的集合容器。</font></a></p>       <b><p><a name="4.9"><font face="宋体">4.9.3.1 数组</font></a></p>       </b><p><a name="4.9"><font face="宋体">要把一个属性定义为数组,为它指定一个有限的多重记号并把它的‘<i><b>BoundedHasRelType</b></i>’       特征值置为 ‘Array’。 这将生成如下的IDL:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.9"><font face="宋体">&lt;readonly&gt; attribute <i>type</i> <i>attributename</i>[#];</font></a></p>         </blockquote>       </blockquote>       <b><p><a name="4.9"><font face="宋体">4.9.3.2 序列</font></a></p>       </b><p><a name="4.9"><font face="宋体">要把一个属性定义为有界序列,为它指定一个有限的多重记号并把它的‘<i><b>BoundedHasRelType</b></i>’特征值置为‘Bounded       Sequence’。 这将生成如下形式的IDL:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.9"><font face="宋体">&lt;readonly&gt; attribute sequence&lt;<i>type</i>,#&gt;           <i>attributename</i>;n</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.9"><font face="宋体"><br>       要把一个属性定义为无界序列,为它指定一个无限的(’N’)多重记号。这将生成如下形式的IDL:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.9"><font face="宋体">&lt;readonly&gt; attribute sequence&lt;<i>type</i>&gt;           <i>attributename</i>;</font></a></p>         </blockquote>       </blockquote>       <font size="4"><b><p><a name="4.9"><font face="宋体">4.9.4 常量</font></a></p>       </b></font><p><a name="4.9"><font face="宋体">要在一个接口定义的内部生成一个常量必须基于一个属性。把该属性的特征值       ‘<i><b>Is Const</b></i>’置为‘TRUE’并且把属性的性质‘<i><b>Const Value</b></i>’置为常量表达式的值。这将生成如下形式的IDL:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.9"><font face="宋体">const type attributename = value;</font></a></p>         </blockquote>       </blockquote>       <p><a name="4.9"><font face="宋体"><br>       ‘<i>value</i>’ 被属性特征值‘<i><b>Const Value</b></i>’的内容代替。</font></a></p>       <font size="5"><b><p><a name="4.10"><font face="宋体">4.10 操作</font></a></p>       </b></font><p><a name="4.10"><font face="宋体">生成接口的任何类的每一个操作都将生成一个IDL操作定义,其形式如下:       </font></a></p>       <blockquote>         <blockquote>           <p><a name="4.10"><font face="宋体">&lt;oneway&gt; <i>type operationname</i> (<i>parameters</i>)           &lt;raises (...)&gt; &lt;context (...)&gt;;</font></a></p>         </blockquote>       </blockquote>       <font size="4"><b><p><a name="4.10"><font face="宋体">4.10.1 单向</font></a></p>       </b></font><p><a name="4.10"><font face="宋体">‘单向’(’Oneway’)参数的生成是由布尔型操作标志值‘<i><b>OperationIsOneWay</b></i>’控制的。其缺省值是’FALSE’,对需要单向参数的操作,把它置为‘TRUE’。</font></a></p>      <p><a name="4.10"><font face="宋体">注: 单向操作的类型必须是‘void’并且没有访问控制为‘out’或者‘inout’的参数。</font></a></p>       <font size="4"><b><p><a name="4.10"><font face="宋体">4.10.2 类型</font></a></p>       </b></font><p><a name="4.10"><font face="宋体">在操作规格说明中定义的返回类型将作为IDL的操作类型。</font></a></p>       <font size="4"><b><p><a name="4.10"><font face="宋体">4.10.3 参数</font></a></p>       </b></font><p><a name="4.10"><font face="宋体">操作规格说明中定义的每个参数产生一个操作的参数定义。如下:</font></a></p>       <blockquote>         <blockquote>           <p><a name="4.10"><font face="宋体">access type parametername</font></a></p>         </blockquote>       </blockquote>       <b><p><a name="4.10"><font face="宋体">4.10.3.1 访问控制</font></a></p>       </b><p><a name="4.10"><font face="宋体">每个参数的访问控制必须是‘in’,‘out’,或者  ‘inout’。 参数的访问控制类型由操作特征值 ‘<i><b>InOutParams</b></i>’指定。此标志的值应当是用逗号(不允许有空格)隔开的文本文字的一个列表。其缺省值是‘in’。列表中的每一个文字都应当是上述三个访问控制值之一。列表中的第一个文字对应于操作的第一个参数,第二个文字对应于第二个参数,等等。有几个参数,就有几个文字。</font></a></p>       <b><p><a name="4.10"><font face="宋体">4.10.3.2 类型</font></a></p>       </b><p><a name="4.10"><font face="宋体">在参数规格说明中定义的类型将被用来作为IDL的参数类型。</font></a></p>       <font size="4"><b><p><a name="4.10"><font face="宋体">4.10.4 引发异常</font></a></p>       </b></font><p><a name="4.10"><font face="宋体">如果一个操作需要‘raises’子句,它的‘<i><b>RaisesExc</b></i>’       特征值应当非空。生成的‘raises (...)’子句的括号之间将用‘<i><b>RaisesExc</b></i>’       特征值的内容填入。</font></a></p>       <font size="4"><b><p><a name="4.10"><font face="宋体">4.10.5 操作上下文</font></a></p>       </b></font><p><a name="4.10"><font face="宋体">如果一个操作需要一个‘context’子句,则它的       ‘<i><b>Context</b></i>’ 特征值应当非空。生成的‘context (...)’子句的括号之间将用‘<i><b>Context</b></i>’       特征值的内容填入。</font></a></p>     </body>    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -