在 UML 序列图上的对象内调用私有方法

Invoking a private method, within the object on a UML sequence diagram

所以我这里有一个 class 图:

这是我的时序图

我在 Newton class 的对象中调用一个方法,在这个方法中我必须调用一个私有方法 fact(),returns 我是给定数字的阶乘。 这是 newton() 方法的主体

float Newton::newton(int n, int k) {
    return fact(n)/(fact(k) * fact(n-k));
}

如您所见,fact() 被调用了三次。所以我的问题是:我是否必须承认(在我的序列图中), fact() 在这里被使用了三次,如果是的话 - 如何?或者我的时序图是正确的?

这取决于图表的目的

  • 是否要记录具体的实现?在这种情况下,您可以显示对 fact().

    的调用

    准确性是必要的:序列图中的箭头不是依赖项(即“我将在 newton() 内需要此功能”)而是一条消息(即“我将此功能称为一那些论点的时间”)。因此,正如评论中提到的 Bruno,您应该显示三个不同的调用(即 3 次调用,如您的 message 5)。

  • 是要记录您的设计吗?在这种情况下,重点更多地放在对象之间的交互上。您不需要像 fact() 那样显示私有实现细节,除非私有方法对于理解设计至关重要。外界不需要知道。

如果您是第一种情况,请注意 fact() 可以递归或迭代实现。又是一个实现细节。在这两种情况下,I'd not show what's behind(这是您尝试用 message 6 做的吗?):在递归实现的情况下,对于代码中易于理解的内容,它会使图表变得非常复杂,而它不会为交互场景带来额外的信息。