我正在准备考试,以前的考试之一的问题是:
网上很多答案都说状态图和状态机是一回事?如果没有,有人可以解释与这个问题有关的区别。
如果有人可以举出两者的例子,那真的会有所帮助。谢谢
状态图与有限状态机完全不同(我假设这就是“常规”状态机的含义)。状态图指的是 Harel 于 1984 年发明的符号,它被提议作为对传统有限状态机的重要符号扩展。
状态图已被合并到 UML 语言中(尽管他们将其称为行为状态机,并且 UML 还支持另一个称为协议状态机的概念以增加混淆)。
主要的重要区别在于状态图实际上是一种“分层”状态机。状态可以包含嵌套状态机(在任何深度级别)。除此之外,还添加了正交区域的概念来模拟并行运行的不同子状态图,并且历史状态的概念(浅历史或深历史)可用于记住重新进入时要访问的子状态一个复合状态。
所有这些额外的特性使状态图比简单、扁平的状态机更具可扩展性和表现力。状态图还允许添加与事件相关的操作(在状态内部或在状态之间的转换上)。
存在许多不同的(通常是商业的)工具,它们允许从状态图中完全生成可执行代码或模拟模型行为(例如,StateMate、Rhapsody、Stateflow、Yakindu Statechart Tools、visualSTATE 等等)。它们在工业中也经常使用,主要是在嵌入式和反应式系统领域。
这就是为什么状态图可以被认为是可执行建模的成功案例之一。
(也许为时已晚)回答这个问题的一个很好的提示可能是状态图本身的基础工作——David Harel 1984 年发表的论文“STATECHARTS: A VISUAL FORMALISM FOR COMPLEX SYSTEMS”。
即:
一个好的状态/事件方法也应该自然地迎合更通用和灵活的语句,例如
(1) “在所有空降状态下,当拉动黄色手柄时,座椅将被弹射”,
(2)“变速箱状态变化与制动系统无关”,
(3) “当按下选择按钮时进入选择模式”,
(4)“显示方式包括时间显示、日期显示和秒表显示”。
条款 (1) 要求能够将状态聚集成超状态,(2) 引入独立性或正交性,(3) 暗示需要比单个事件标记的箭头更一般的转换,以及 (4) 捕获细化的州。
高温高压
状态机是一种计算的数学模型,其通用性不如图灵机。术语“状态机”的另一个常见用法是实现该模型并在计算机上运行的代码。
相反,状态图是对状态机的描述,通常表示为图表或表格。“图表”这个词在拉丁语中是“纸”的意思,因此它暗示着某种书写或绘制的东西。
状态机有很多种,包括 Mealy、Moore 和 Harel。(我不清楚 Harel 是否定义了一种状态机形式主义或只是一种更好的状态图表示法。)UML 是这些的超集,具有用于底层模型的统一表面表示法。模型和图形符号都描述了可以运行的状态机的设计。表示模型的图形符号可以被视为状态图。
我认为您引用的问题实际上令人困惑和困惑。Harel 1984 年的论文将 Mealy 和 Moore 形式主义称为“传统”,但这个词现在可能也适用于 Harel 的工作。术语“状态图”可能是指 Harel 或 UML,可以映射到 Mealy 或 Moore 状态机。尽管如此,我还是会通过列举差异来回答这个问题。
在https://stackoverflow.com/a/67067188/2183503上查看我的完整答案,但简而言之,状态图是状态转换图,模块化分解和抽象对于单片代码
HTH(它帮助我理解了差异)。