【问题标题】:Dependencies in UML State DiagramUML 状态图中的依赖关系
【发布时间】:2020-04-09 10:27:35
【问题描述】:

我基本上有一个类如下:

class Stack {
  ...
  push()
  pop()
  isEmpty()
  ...

  class StackIterator extends Iterator {
    ...
    hasNext()
    next()
    ...
  }
}

我想为迭代器创建一个 UML 状态图。我的想法是使用依赖箭头和堆栈调用来对迭代器状态进行建模,如下所示:

对于这样的情况,这是否是一个有效的、工业证明和完全可理解的 UML 状态图?

【问题讨论】:

  • 你的 SM 最想念的是一个开始。
  • @qwerty_so 是的,当然。这只是一个小的“伪”状态图,用于显示我的问题背后的基本思想。例如,开始将在 Stack SM 中,然后进入 StackIterator 中的“空”状态。有限状态也是如此。
  • 即使(或特别是)在小例子中,您也应该遵守基本规则。无论如何,看看我的答案......

标签: uml


【解决方案1】:

状态机可以是操作的行为,但是将状态机与类相关联是非常奇怪的,并且不符合 UML,因为类没有行为。

状态机之间的依赖关系在 UML 中没有预定义的含义。您想指示类之间的继承,但状态机不必与依赖不相关的类相关联

[编辑]

对于那些怀疑状态机可能是操作行为的人,我鼓励你看看规范:

  • StateMachine 继承 Behavior(正式 2017-12-5 的第 14.2.2 节)
  • 操作继承 BehavioralFeature (§ 9.6.2)
  • BehavioralFeature 由 Behavior 实现(实现)(第 9.9.2 节))

注意操作的行为也可以支持我的活动也是行为

【讨论】:

  • 状态机可以是操作的行为 - 不完全是,状态之间的转换可以是操作的行为。状态机描述状态和它们之间的所有转换。
  • @SomeWittyUsername 我不同意,我鼓励您查看规范,StateMachine 继承 Behavior(正式 2017-12-5 的第 14.2.2 节),Operation 继承 BehavioralFeature(第 9.6.2 节)和BehavioralFeature 由 Behavior (§ 9.9.2) 实现(实现)
  • 如果我理解正确的话,您说的是根据类图对状态机进行建模。我(以及看起来的 OP)正在引用 UML 状态图范围内的状态机。
  • @SomeWittyUsername "你说的是用类图建模状态机" 一点也不,我觉得你不懂UML的元模型,我鼓励您至少在我指出的章节中参考规范。 “在 UML 状态图范围内引用状态机”这并不是因为状态机是通过状态图表示的,因此状态机不能与操作或未显示的任何其他元素相关联状态图
  • @null1 您不必专门通过技巧来证明这一点,我的意思是这是您的信号/守卫/...的一部分,例如当转换与外部信号相关联时,您只是表示信号。给定的图表不必显示全部,也不能,这就是为什么有几种图表的原因。如果你真的想在你的图表中显示,你可以添加一个注释,但问问自己是否有真正的加值;-)
【解决方案2】:

为了显示堆栈的行为,您应该简单地使用活动图。填充/空状态是多余的,您可以轻松获得带有[size >=1 ] 条件的弹出保护。

顺便说一句。没有什么是无止境的。推送应该有[size < max] 之类的。

【讨论】:

  • 但是 max 参数表明我的堆栈有一个固定的上限,我需要一个“满”状态。毕竟这对于迭代器来说是不正确的。更重要的是,它们中的任何一个都不应该有任何上限。两者都在动态增长。但是您仍然建议添加“最大值”吗?
  • 嗯,这是纯粹的技术/实践方面。你可以让你的应用程序运行到内存溢出中。我会判断这只是一个糟糕的设计。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2020-06-13
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多