UML序列图调用属性

3
在我的应用程序中,我有一个Document类和一个DocumentFact类。 DocumentFact类包含从数据库获取多个文档的方法。这些文档存储在数据表或数据集中。数据表和数据集都是documentfact类的私有成员。它们可以通过属性访问。
现在我的问题是:在序列图中,是否允许像这样调用属性:
Actor      Web interface    DocumentFact          Database
  |          |                 |                      |
  |input     |                 |                      |
  |------->  |  GetDocuments   |                      |
  |          |---------------->|                      |
  |          |                 | ExecuteSelectQuery() |
  |          |                 | -------------------->|
  |          |                 |                      |
  |          |                 |      Bool            |
  |          |                 | <--------------------|
  |          |                 |                      |
  |          |                 |   GetDataSet()       |
  |          |                 | -------------------->|
  |          |                 |                      |
  |          |                 |    DataSet           |
  |          |                 |<---------------------|
  |          |                 |                      |

GetDataSet是一个属性。这个说法正确吗?如果不是,那么正确的方法是什么?

注意:这只是我的序列图的一部分,其余内容并不相关。


我怎样才能看到被编辑的内容? - Martijn
点击“an hour ago”中的单词,即“edited an hour ago”。 - jpalecek
3个回答

5

需要记住的一件重要事情是,UML不是正式符号,所以您可以采用任何您认为能够表达意思的方式。如果有什么不清楚的地方(或者您必须考虑如何表示它),您应该添加一个注释。

在序列图中,我发现将消息(或消息组)编号并具有运行对话框(格式为编号列表)非常有帮助,解释正在发生的事情(...以及为什么要这样做)。您必须记住,图表不能独立存在,而应该整合到更大的文档体系中,因此,如何具体表示属性并不是一个大问题。只需选择一种表示方法,并解释GetDataSet是Database的属性(或其他内容:)。


你的意思是,当我给消息编号并在文档中解释编号6(例如)是一个属性调用时,就可以了吗? - Martijn
是的,而且它几乎肯定比您为属性调用选择的任何表示更清晰。 - Aaron Maenpaa

1

在记录我的设计时,我遇到了类似的问题。我只是在方法调用下面(箭头下面)添加了文本“属性”(我没有找到“正确”的 UML 实现方式)。虽然那不是标准的 UML,据我所知,但确实传达了要点。当然,这种方法可能对你并不适用,如果是这样的话,最好使用标准的 UML。


0
您可以使用构造型来显示属性。例如,如果 DataSet 是属性,并且您正在调用 getter,则使用 <<get>> 构造型。这样看起来就像是:
     DataSet <<get>>
--------------------->

我不确定这是否符合UML规范。但这是根据Scott Ambler在他出色的The Elements of UML 2.0 Style中的建议。

他还建议将构造型保留在名称之后。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接