12

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

in:表示参数值是调用者传入的。

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

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

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

这是否意味着“in”是按值调用,而“inout”是按引用调用?

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

4

5 回答 5

3

引用调用是 and 的一种可能实现inoutout是的。

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

在像 Ada 这样的语言中,具有语言级别in、、outin out参数,这可以直接用语言表达,编译器可以决定在哪里引用或复制是更好的实现。在像 Python 这样的语言中,所有参数都通过引用(某种程度)传递,这种 UML 级别的意图表示法不会导致实现级别的任何区别。在像 C 这样的语言中,具有显式指针类型和按值传递的所有参数,这些用 UML 表达的意图变成显式地址引用和指针取消引用。

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

于 2013-02-10T16:01:13.667 回答
3

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

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

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

• return - 调用的返回值。

于 2013-11-29T08:29:23.787 回答
0

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

现在在实践中定义这些特定领域的语义是项目架构师的一项工作,在许多情况下,您提到的那些语义是有效的,但情况并非总是如此。

模型驱动架构 (MDA) 加上平台配置文件=平台特定设计

于 2013-02-11T13:41:06.103 回答
0

在查看官方 UML 规范时,我们发现一个细微的变化:

in:表示参数值是调用者传入的。

inout:表示参数值是由调用者传入的,并且(可能不同的)值传递给调用者。

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

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

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

我找不到有关此 ParameterDirectionKind 枚举的任何进一步定义/说明。

即UML 不想进一步说明这一点。而且最肯定的是,它没有将其中任何一个指定为按引用传递或按值传递。

于 2018-03-25T11:34:06.520 回答
0

“in”既不表示参数是按值传递的,“inout”也不表示参数是按引用传递的。

根据UML 规范的第13.2.3.2 条行为参数

当调用行为时,可以提供与具有方向“in”或“inout”的参数相对应的参数值,这受这些参数的多样性的约束。...参数值可用于影响调用行为执行的过程

条款9.4.3.5 参数说:

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

例如“删除”效果意味着:

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

然后明确指出:

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

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

于 2020-05-29T15:47:30.440 回答