【问题标题】:How to show that which class's variables are used in which class's operation(s) using UML diagram?如何使用 UML 图显示哪个类的变量用于哪个类的操作?
【发布时间】:2021-12-09 17:06:06
【问题描述】:

有一个类图包含一个类,这个类有三个操作(Oper1Oper2Oper3)和三个属性(Attr1Attr2Atrr3)。现在假设:

1- Oper1 使用 Attr1Attr2 来读取和写入它们, 2- Oper2 使用 Attr3 读取和写入它, 3- Oper3 使用 Attr1Attr2Attr3 来读取和写入它们。

现在如何在 UML 图中显示类操作中属性的这种依赖关系/使用? 这种关系需要在UML中表现出来吗?

【问题讨论】:

  • 我的问题是:你为什么需要这样做?
  • @qwerty_so 因为可追溯性对我来说非常重要。假设我们有一个 Attr1 满足的软件需求(Req1),Attr1 用在 Oper1 中,Oper1 是 class1 的操作。现在,由于更改了 Req1,我需要知道哪些类、操作和属性会受到此更改的影响。我正在使用 EA,在可追溯性窗口中我可以跟踪更改,所以我需要一个图表。
  • 我认为在这种情况下,您的问题与 stackoverflow.com/questions/69594867/… 重复
  • @qwerty_so 这些问题彼此接近,但谈论的概念不同。该链接讨论了需求的可追溯性,而这个问题讨论了类的属性/操作的关系。当然,通过属性/操作之间的关系,我们也可以回答链接中提到的问题。

标签: class attributes uml relationship class-attributes


【解决方案1】:

这种关系没有记录在 UML 类图中。类图定义了属性和操作,但没有定义它们在特定实现中的关系。

今天可能oper1 使用Attr1Attr2;但也许明天它也会使用其他属性。但是,您可以在注释中记录这一点,或者——也许更好——在 UML 前置条件和后置条件约束中。

【讨论】:

  • 假设系统团队改变了一个需求,这种情况下如果你有这种关系,你很容易发现你的软件的变化。
  • @Anmk 类图仍然不支持它。您是否正在寻找类似 @​​987654321@ 的东西?节点是属性和操作,箭头代表输入和输出;但它不是UML。您可能会滥用活动图,用动作表示操作,用对象流表示输入和输出,并使用central buffers 来模拟属性。但它牵强附会,并不完全符合活动图语义。
  • 我知道类图不支持它。我正在尝试以可以对这些类型的关系建模的方式使用活动图。我很想知道其他人的想法。
  • 为什么类图不支持呢?任何地方都允许依赖。
  • 前置条件会指定什么条件?我看不出这如何用于记录依赖关系。
【解决方案2】:

如果您只想对依赖项建模,当然可以。在类图中:

或者在矩阵中

或者只是在模型中:

您还可以将活动定义为每个操作的方法,该方法使用 ReadStructuralFeatureActions 和 WriteStructuralFeatureActions 访问属性。但是,这只会添加有意义的信息,如果你真的想用这个来完全指定操作。这种努力是否合理?

【讨论】:

  • 有趣。我理解依赖是结构性的。但也许我在这里太狭隘了。也许我的眼睛太老了,但我想知道它是否会像 OP 期望的那样具有可读性和启发性,看看我必须遵循只有 3 个属性和 3 个操作的虚线的困难,你怎么看?此外,您还需要添加一些刻板印象来表达 OP 期望记录的读写操作。
  • 如果没有太多元素,矩阵(是 UML 吗?)是依赖图的一个很好的表示。但是依赖图将是定向的。您的工具能否生成考虑到不同刻板印象的矩阵?
  • @Christophe,我同意,类图伤眼。但是,正如 OP 所述,可追溯性是目的。所以,没有人需要看图表。依赖关系将通过模型查询进行评估,例如找出更改是否影响特定操作。
  • @Christophe,UML 没有定义矩阵,但模型浏览器也没有定义,大多数(如果不是全部)工具都支持。为什么要限制工具显示模型内容的方式。此处使用的工具允许显示(和编辑)矩阵中的任何类型的关系。所以«read»«write» 的不同刻板印象是可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多