in,out,inout,返回UML中的参数方向

时间:2013-02-10 15:44:33

标签: parameters call uml specifications

当我通过OMG 2.5(Beta)推广的UML规范阅读以下概念时:

  

in:表示参数值由。传入   呼叫者。

     

inout:表示参数值由调用者传入,然后返回给调用者。

     

out:表示将参数值传递给调用者。

     

return:表示参数值作为返回值传递回调用者。

这是否意味着“in”是按值调用 和“inout”作为参考电话?

你能不能澄清一下这些概念?

5 个答案:

答案 0 :(得分:2)

•in - 输入参数(不能修改)。

•out - 输出参数(可以修改以将信息传达给呼叫者)。

•inout - 可以修改的输入参数。

•return - 呼叫的返回值。

答案 1 :(得分:1)

通过引用进行调用是inoutout的一种可能实现,是的。

请记住,UML以与语言无关的方式描述行为。它取决于实际语言中给定接口的实现,以确定这意味着什么。

在像Ada这样的语言中,使用语言级inoutin out参数,这可以直接用语言表达,编译器可以决定引用的位置或者复制是一个更好的实现。在像Python这样的语言中,所有参数都通过引用传递(排序),UML级别的 intent 符号在实现级别上不会产生任何区别。在像C这样的语言中,具有显式指针类型和通过值传递的所有参数,这些以UML表示的意图转变为显式地址引用和指针解引用。

换句话说,简短的回答是“是的,这大致是的意思,但它可能不是做的”。

答案 2 :(得分:0)

要记住关于UML的关键是它被设计为通用,它旨在独立于实现平台。具体来说,它是PIM,一种独立于平台的模型。因此,使用特定于平台的实现语义(例如“按值”和“按引用”)是一种误称。

现在在实践中定义那些特定于域的语义是Project Architect的一项工作,在很多情况下,你提到的那些语义是有效的,但情况并非总是如此。

Model Driven Architecture (MDA)Platform Profile = Platform Specific Design

答案 3 :(得分:0)

查看official UML specification时,我们发现了一些细微的变化:

  

in:表示参数值由。传入   呼叫者。

     

inout:表示参数值由调用者传入,(可能不同)值传递出去   给来电者。

     

out:表示将参数值传递给调用者。

     

return:表示参数值作为返回值传递回调用者。

它包含一个注释:不能将多个参数标记为返回参数。

我在这个ParameterDirectionKind枚举中找不到任何进一步的定义/说明。

即。 UML不希望进一步指定它。而且大多数情况下,它并没有将它们中的任何一个指定为通过引用传递或通过值传递。

答案 4 :(得分:0)

“ in”不表示参数通过值传递,“ inout”不表示参数通过引用传递。

根据UML Specification的条款 13.2.3.2行为参数

当调用行为时,可以根据方向的“ in”或“ inout”来提供参数值,这些参数值受这些参数的多重性约束。 ...参数值可用于影响所调用的行为执行的过程

条款 9.4.3.5参数说:

effect属性可用于指定传入或传出参数的对象发生什么情况。

例如“删除”效果表示:

行为执行完成后,不存在作为参数值的对象。

然后明确指出:

仅in和inout参数可能具有“删除”效果

按值传递或按引用传递是实现方法,并且都可以用于实现in,inout和out参数。在C语言中,如果UML模型要求您这样做,则可以按值将指针传递给函数,并删除指针指向的对象。