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

时间:2017-03-05 18:54:42

标签: java uml sequence-diagram

pro guard-rules.pro

在一些抽象的序列图中,你有一个 loop 组合片段,其条件沿着例如 [对于每个项目]

在具有Java实现的序列图上;你会用什么作为一个环卫?

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

3 个答案:

答案 0 :(得分:6)

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

enter image description here

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

只有在循环期间要显示不同的行为时,才会显示不同的Item实例。

答案 1 :(得分:4)

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

UML sequence diagram loop with multiple instances

来自A Quick Introduction to UML Sequence Diagrams

用于figures变量的堆栈框表示它引用了多个实例,这些实例可以被解释为循环周围的不同实例。 (和UML一样,语义在旁观者眼中有点)

P上。 UML 2.5规范中的571条规定:

  

生命线头部的形状基于该生命线所代表的部分的分类器。通常头是一个   包含名称的白色矩形。

“经常”这个词可以解释为“采取所需要的东西”,因为它不会妨碍使用单一的特定形式。

答案 2 :(得分:0)

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

请注意,注释符号不是comment,而是构造型属性的符号。他们引用了e的属性Client1和交互i的{​​{1}}的属性(请参见下图)。 i属性由生命线表示,并且在每次出现循环内容时都将引用一个不同的对象。这是通过Example1的用户定义语义来实现的。 Class diagram

作为替代方案,您可以添加具有相同内容的无语义«for each loop»。不建议将comment用于此目的。

如果要使用类似Java的迭代器,则该图应如下所示: solution with iterator

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