1

我想知道如何在通信图中表达如下:

foreach (User user in UsersCatalog) {
    list.add(user.getId());
}

我实际上有以下内容

替代文字 http://img691.imageshack.us/img691/9213/semttuloyc.png

(用户 = 用户)

但是你会注意到它并不能很好地代表我正在做类似循环的事情。

我怎样才能做到这一点?

4

3 回答 3

3

只需getId() : int用星号 (*) 定义:

1.4 *getId()

对于给定的示例。

于 2010-06-06T22:21:18.770 回答
1

为什么不用序列图来补充这个图呢?序列图更好地表达事件之间的时间关系,并具有预定义的符号来表达循环。

于 2010-06-06T22:01:31.820 回答
0

正如 Jordi 所说,对于描述循环,序列图更好。原因是您想描述使用消息传递进行通信的对象之间的交互。为此,UML 定义了不同的交互图,重点关注交互的不同方面。序列图关注对象之间传递的消息序列(生命线),因此在循环中捕获发送消息 - 序列是有意义的。通信图专注于通信对象,它们相互发送某些消息。这些图对循环建模没有用,因为它们只描述了发送的消息类型和顺序。但是,如果您出于良好目的使用通信图并且只想在代码中包含循环,则应遵循 elysiums 的建议,但请记住,该星号表示将有未知数量的消息,因此您应该添加一个表达式(理想情况下是 OCL),它将捕获循环的条件。欲了解更多信息,请咨询: http://www.smartdraw.com/resources/tutorials/uml-collaboration-diagrams/ http://en.wikipedia.org/wiki/Unified_Modeling_Language#Interaction_diagrams

于 2010-06-08T23:03:12.690 回答