UML状态图中的依赖关系

3
我基本上有一个类似以下的类:

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

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

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

enter image description here

这个UML状态图是否有效、工业证明且易于理解,适用于这种情况?

你的SM最需要的是一个开始。 - qwerty_so
@qwerty_so 当然可以。这只是一个小的“伪”状态图,用来展示我问题背后的基本思想。例如,起始状态将在Stack SM中,而另一个状态则会进入StackIterator的“empty”状态。有限状态也是如此。 - null1
即使在小例子中,你也应该坚持基本规则。无论如何,看看我的答案... - qwerty_so
2个回答

0
状态机可以是一个操作的行为,但将状态机与类关联起来在UML中非常奇怪和不符合规范,因为类没有行为。
状态机之间的依赖在UML中没有预定义的含义。您想要表示类之间的继承关系,但是由于状态机不必与类关联,所以这种依赖关系并不相关。
[编辑]
对于那些对状态机是否可以作为操作行为存在疑问的人,我鼓励您查看规范:
- 状态机继承自行为(正式2017-12-5版第14.2.2节) - 操作继承自行为特征(第9.6.2节) - 行为特征由行为实现(§ 9.9.2)
请注意,操作的行为也可以由活动支持,而活动也是一种行为。

1
一个状态机可以是一个操作的行为,但并不完全如此,状态之间的转换才是操作的行为。状态机描述了所有状态和它们之间的所有转换。 - SomeWittyUsername
@SomeWittyUsername 我不同意,我鼓励你看一下规范,StateMachine继承自Behavior(正式2017-12-5版第14.2.2节),Operation继承自BehavioralFeature(第9.6.2节),而BehavioralFeature由Behavior实现(实现)(第9.9.2节)。 - bruno
1
如果我理解你的意思正确的话,你在谈论以类图的形式对状态机进行建模。我(以及似乎是原帖作者)是在参考UML状态图中的状态机。 - SomeWittyUsername
@bruno 我们正在讨论使用UML来定义状态机。 - SomeWittyUsername
1
@null1 你不需要通过一种特殊的手法来显示这一点,我的意思是这是你的信号/守卫/... 的一部分,就像当一个转换与外部信号相关联时,你只需指示该信号。一个给定的图表不必展示所有内容,也不能展示所有内容,这就是为什么有几种类型的图表。如果你真的想在你的图表中显示这一点,你可以添加一个注释,但要问问自己是否真的有必要这样做;-) - bruno
显示剩余7条评论

0
为了展示栈的行为,你应该简单地使用一个活动图。填充/空状态是多余的,并且你可以轻松地通过条件[size >=1 ]获得pop的保护。
顺便说一下,没有什么是无尽的。push应该有一个[size < max]或类似的条件。

但是max参数会表明我的堆栈有一个固定的上限,我需要一个“满”状态。毕竟,这对于迭代器来说并不正确。更重要的是,它们都不应该有任何上限。它们都是动态增长的。但是你还是建议添加一个“max”值吗? - null1
这是一个纯粹的技术/实践问题。你完全可以让你的应用程序运行时出现内存溢出。我认为这只是一个糟糕的设计。 - qwerty_so

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