在 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 做什么?):在递归实现的情况下,对于代码中易于理解的内容,它会使图表变得非常复杂,而它不会为交互场景带来额外的信息。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...