当我通过OMG 2.5(Beta)推广的UML规范阅读以下概念时:
in:表示参数值由。传入 呼叫者。
inout:表示参数值由调用者传入,然后返回给调用者。
out:表示将参数值传递给调用者。
return:表示参数值作为返回值传递回调用者。
这是否意味着“in”是按值调用 和“inout”作为参考电话?
你能不能澄清一下这些概念?答案 0 :(得分:2)
•in - 输入参数(不能修改)。
•out - 输出参数(可以修改以将信息传达给呼叫者)。
•inout - 可以修改的输入参数。
•return - 呼叫的返回值。
答案 1 :(得分:1)
通过引用进行调用是inout
和out
的一种可能实现,是的。
请记住,UML以与语言无关的方式描述行为。它取决于实际语言中给定接口的实现,以确定这意味着什么。
在像Ada这样的语言中,使用语言级in
,out
和in 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模型要求您这样做,则可以按值将指针传递给函数,并删除指针指向的对象。