繁体   English   中英

如何在UML序列图上为每个循环建模Java?

[英]How do you model a Java for each loop on a UML sequence diagram?

for (Item i : collection) {
i.foo();
} 

在某些抽象序列图中,您有一个循环组合的片段,其条件类似于[对于每一项]

在具有Java实现的序列图上; 您将用什么作为环路防护?

如果所有生命线都必须表示一个对象实例,那么如何显示i:Item不是单个实例,而是在每次迭代中从集合中获取一个不同的对象?

您不会在SD中显示每一位,而只是显示一个概述:这是一个抽象。

在此处输入图片说明

这很清楚地表明了循环的意图。

仅当您想要在循环中显示不同的行为时,才显示不同的Item实例。

对于问题的第二部分,有一种表示法,可以使用堆叠框在同一生命线中绘制多个实例,例如:

具有多个实例的UML序列图循环

UML序列图快速入门

用于figures变量的堆叠框表示它引用了多个实例,可以将其解释为循环周围的其他实例。 (与UML一样,语义在旁观者的眼中有点)

UML 2.5规范的P.571说明:

生命线头部的形状基于该生命线表示的零件的分类器。 头部通常是包含名称的白色矩形。

单词“经常”可以解释为“满足需要”,因为它不会妨碍使用单个特定形式。

不幸的是,这无法完成。 循环运算符具有guard条件,并且在minintmaxint之间进行多次迭代。 我认为,这不允许“每个循环”的语义。 如果要添加它,则必须使用用户定义的构造型«for each loop»来完成: 每个循环<code>的构造型</ code> 一个示例用法是: 用法示例

请注意,注释符号不是comment ,而是构造型属性的符号。 它们引用Client1的属性e和Interaction Example1 i (请参见下图)。 i属性由生命线表示,并且在每次出现循环内容时都将引用一个不同的对象。 这是通过我的«for each loop»的用户定义语义实现的。 类图

或者,您可以添加具有相同内容的无语义comment 不建议为此目的使用guard

如果要使用类似迭代器的Java,则该图可能如下所示: 迭代器解决方案

该图还显示了如何随时间引用不同的对象: reply消息的返回值分配给交互或生命线或Parameter表示的类的Property

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM