[英]How do you model a Java for each loop on a UML sequence diagram?
for (Item i : collection) {
i.foo();
}
在某些抽象序列图中,您有一个循环组合的片段,其条件类似于[对于每一项] 。
在具有Java实现的序列图上; 您将用什么作为环路防护?
如果所有生命线都必须表示一个对象实例,那么如何显示i:Item不是单个实例,而是在每次迭代中从集合中获取一个不同的对象?
对于问题的第二部分,有一种表示法,可以使用堆叠框在同一生命线中绘制多个实例,例如:
用于figures
变量的堆叠框表示它引用了多个实例,可以将其解释为循环周围的其他实例。 (与UML一样,语义在旁观者的眼中有点)
UML 2.5规范的P.571说明:
生命线头部的形状基于该生命线表示的零件的分类器。 头部通常是包含名称的白色矩形。
单词“经常”可以解释为“满足需要”,因为它不会妨碍使用单个特定形式。
不幸的是,这无法完成。 循环运算符具有guard
条件,并且在minint
和maxint
之间进行多次迭代。 我认为,这不允许“每个循环”的语义。 如果要添加它,则必须使用用户定义的构造型«for each loop»
来完成: 一个示例用法是:
请注意,注释符号不是comment
,而是构造型属性的符号。 它们引用Client1
的属性e
和Interaction Example1
i
(请参见下图)。 i属性由生命线表示,并且在每次出现循环内容时都将引用一个不同的对象。 这是通过我的«for each loop»
的用户定义语义实现的。
或者,您可以添加具有相同内容的无语义comment
。 不建议为此目的使用guard
。
该图还显示了如何随时间引用不同的对象: reply
消息的返回值分配给交互或生命线或Parameter
表示的类的Property
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.