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

问题描述

所以我在这里一个类图:

Class diagram

这是我的序列图

Sequence diagram

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

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

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

解决方法

这取决于图表的目的

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

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

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

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