> For the complete documentation index, see [llms.txt](https://anjia1.gitbook.io/design/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://anjia1.gitbook.io/design/uml/state-diagram.md).

# 状态图

事件驱动（event-driven）的软件系统，会不断等待某些外部或内部 event 的发生，比如单击鼠标、按下按钮、时间计数或数据包到达。事件驱动（event-driven）系统也称反应式（reactive）系统。一旦事件处理完成，系统就会返回等待下一个事件。

对事件（event）的响应通常取决于事件的类型（type）和系统的内部状态（internal state），也包括导致​​状态转换的状态更改。事件（events）、状态（states）和这些状态之间的状态转换（state transitions）的模式，可以抽象并表示为有限状态机(FSM，Finite-State Machine)。FSM 的概念在[事件驱动编程](https://en.wikipedia.org/wiki/Event-driven_programming)（event-driven programming）中很重要。

状态图用来描述系统的行为。

1. state 状态
2. action 动作
3. transition
4. transition condition

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FRnOBAEngnSO17G3hHDjr%2Fimage.png?alt=media\&token=ea7376d1-d0ff-4902-a5ac-49e10b97033d)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FS84AhZaB144k30blKOfC%2Fimage.png?alt=media\&token=7db8e799-4eff-4242-a532-c0cf1fb4f8bc)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FgLam2aiKpmjDmVlt0kYv%2Fimage.png?alt=media\&token=353f625c-f7bf-410b-91c2-1f744ad0c0b3)

UML 状态机（state machine），又称 UML 状态图（statechart），是数学概念有限自动机（finite automaton）在计算机中的扩展。

UML 状态机是 Harel 状态图基于对象的变体，由 UML 改编和扩展。UML 状态机的目标是克服传统有限状态机的主要局限性，同时保留其主要优势。UML 状态图引入了分层嵌套状态（hierarchically nested states）和正交区域（orthogonal regions）的新概念，同时扩展了动作（actions）的概念。UML 状态机兼有 Mealy 机和 Moore 机的特点，它们支持依赖于系统状态（system state）和触发事件（trigger event）的动作（actions）。

UML 保留了传统状态图的一般形式：有向图，其中节点表示状态，连接线表示状态转换。

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FzW6WfpGa4wjiLuinGvWO%2Fimage.png?alt=media\&token=68f35caa-0452-498e-b464-dda0468c9ed3)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2Fredki8JpgSpjkI4vSHL7%2Fimage.png?alt=media\&token=8c417b70-6219-4fc5-8110-b34834321182)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FEMPzygMHrK3chIXW4iSW%2Fimage.png?alt=media\&token=e351b517-1e58-4564-9cd0-3a621b279598)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FXRCgcGhrJLnt2tjd4uTn%2Fimage.png?alt=media\&token=102a119e-8d20-4cc4-a33c-191c703d9f54)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2F1WgEtg1fCqiJhv31Ivle%2Fimage.png?alt=media\&token=64ecc7ee-acfc-405f-bdd9-091632cfa01e)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FvzpLlcauZMCp68vACbLP%2Fimage.png?alt=media\&token=86836bdc-faa0-4f04-bbb1-fa0a7e331308)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FY2f4lqJcgMkXmBA2P44P%2Fimage.png?alt=media\&token=3fbdbbcf-2e6e-4aef-b53a-f9fa57e83be5)

![](https://1661549646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fv8LKbdX9taVYu96xrCAD%2Fuploads%2FFRp39I05uvG5vyVBT95V%2Fimage.png?alt=media\&token=2cab1507-9eec-4629-9bf7-8610da8b48cd)
