状态图:限制状态执行的次数

Statecharts: Limit the number of time a state gets executed

如何在状态图中以图形方式表示某个状态的执行次数永远不会超过一定次数?这样它就不会以无限循环结束。像

assert enterPIN(int p) <= 3

如果条件被违反,然后分支到另一个状态。我应该以某种方式将它包含在守卫中吗?还是在国家活动?

编辑:

(CheckPIN)--[invalid]-->(counter| + inc.)--[counter>3]-->(retainCard)
    ^                      |
    |-----[counter<=3]-----|

这方面的东西?

Legend: (StateName | (+-)activity), Transition: -->, [Guard]

给出图形答案:

这就是我的建模方式。

通常不需要 counter 对象,因为它是一个简单的计数器,而且很明显 rest/increment 将引用一个公共计数器。该计数器也没有真正的 <<flow>> 。非刻板的依赖也足够了。

我认为你的问题太过深奥了。虽然您可以对无限小的细节进行建模,但您的目标应该是创建一个更耐用的模型,不需要随着时间的推移进行太多更改。

H. S. Lahman 在他的书 Model-Based Development: Applications 中为使用摩尔状态机提供了一个很好的案例。摩尔状态机是在进入状态时发生动作的地方,而不是在状态之间转换时发生动作的地方。他使用摩尔状态机的最令人信服的理由是,转换不会退化为一系列函数调用,而是宣布已完成的事情。

以下是如何避免所有细节并创建更耐用模型的示例:

您会注意到如何事情发生是完全封装的。例如,挑战用户可能涉及 PIN 码、视网膜扫描或皮下芯片。每种身份验证模式允许的最大失败次数可能完全不同。该政策可以在其他地方体现。