简介
编辑UML状态机,也被称为UML状态图,是计算机科学应用中有限自动机数学概念的延伸,用统一建模语言(UML)符号表示。
它背后的概念是组织一个设备、计算机程序或其他(通常是技术)过程的工作方式,使一个实体或它的每个子实体总是处于一些可能的状态中的一个,并且在这些状态之间有明确定义的条件转换。
UML状态机是Harel状态图的一个基于对象的变体,由UML调整和扩展。UML状态机的目标是克服传统有限状态机的主要限制,同时保留其主要优点。UML状态图引入了分层嵌套状态和正交区域的新概念,同时扩展了动作的概念。
UML状态机同时具有Mealy机和Moore机的特征。它们支持取决于系统状态和触发事件的动作,如Mealy机,以及与状态相关的进入和退出动作,而不是与Moore机的转换相关。
UML状态机这个术语可以指两种状态机:行为状态机和协议状态机。
行为状态机可以用来为单个实体(例如,类实例)、一个子系统、一个包,甚至整个系统的行为建模。
协议状态机用于表达使用协议,可以用来指定分类器、接口和端口的合法使用场景。
基本状态机概念
编辑许多软件系统是事件驱动的,这意味着它们不断等待一些外部或内部事件的发生,如鼠标点击、按钮按下、时间刻度或数据包的到来。
在识别出事件后,这类系统通过执行适当的计算做出反应,其中可能包括操纵硬件或产生"软"事件以触发其他内部软件组件。(这就是为什么事件驱动系统被称为反应式系统的原因)。一旦事件处理完成,系统就会继续等待下一个事件。对一个事件的反应通常取决于事件的类型和系统的内部状态,并可能包括导致状态转换的状态变化。
事件、状态和这些状态之间的状态转换模式可以被抽象为有限状态机(FSM)并加以表示。FSM的概念在事件驱动编程中很重要,因为它使事件处理明确地依赖于事件类型和系统的状态。
如果使用得当,状态机可以极大地减少代码的执行路径,简化每个分支点的测试条件,并简化不同执行模式之间的切换。
相反,在没有底层FSM模型的情况下使用事件驱动编程会导致程序员产生容易出错、难以扩展和过于复杂的应用代码。
基本UML状态图
编辑UML保留了传统状态图的一般形式。UML状态图是有向图,其中节点表示状态,连接器表示状态转换。例如,图1显示了一个对应于计算机键盘状态机的UML状态图。在UML中,状态被表示为圆形的矩形,并标有状态名称。
转变,用箭头表示,标有触发事件,然后是执行的动作列表。初始过渡源于实心圆,指定了系统刚开始时的默认状态。每个状态图都应该有这样一个过渡,它不应该被标记,因为它不是由一个事件触发的。初始过渡可以有相关的动作。
UML状态机的事件
编辑一个事件是发生的、影响系统的东西。严格地说,在UML规范中,事件一词是指发生的类型,而不是指该发生的任何具体实例。
例如,Keystroke是键盘的一个事件,但每个按键不是一个事件,而是Keystroke事件的一个具体实例。对键盘来说,另一个感兴趣的事件可能是Power-on,但明天10:05:36打开电源将只是Power-on事件的一个实例。
一个事件可以有相关的参数,允许事件实例不仅传达一些有趣事件的发生,而且还传达有关该事件的定量信息。例如,按电脑键盘上的一个键所产生的击键事件有相关的参数,传达字符扫描码以及Shift、Ctrl和Alt键的状态。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/164391/