1 状态图定义
- UML2 状态图
状态机图(State Machine Diagram)
- 定义:
显示系统或组件在不同状态之间的转移和事件响应。
UML2 的状态图(StateDiagram)用于描述对象在其生命周期中所经历的各种状态以及状态之间的转换,建模系统或组件的生命周期和状态变化。
- 使用场景:
对象生命周期: 描述单个对象或组件的状态变化。
事件驱动的行为: 描述系统在接收到特定事件时如何从一个状态转换到另一个状态。
控制逻辑: 建模系统内部的控制逻辑和复杂的状态依赖行为。
如描述电梯控制系统的状态,如“上升”、“下降”、“开门”等。
-
SysML 状态图
-
定义:
SysML 的状态图是从 UML2 状态图扩展而来的,显示系统和子系统的状态在不同状态之间的转移和事件响应。专门用于系统工程中更复杂状态建模。
- 使用场景:
系统级行为建模: 描述系统或子系统在其生命周期中的状态变化。
复杂系统行为: 建模具有复杂状态和行为的系统,包括嵌套状态、并行状态等。
系统与环境交互: 更详细地描述系统与外部环境的交互和依赖关系。
2 状态图的关系和表示方法
系统工程中的状态图和UML中状态图有如下关系:
继承关系: SysML 的状态图基于 UML2 的状态图进行了扩展,以便更好地适应系统工程的需求。
元素一致性: 两者使用相似的基本元素,如状态、转换、初始状态、最终状态等。
SysML 可能增加了一些特有元素,以适应更复杂的系统需求。
使用场景重叠: 两者的使用场景很多是重叠的,SysML 状态图可以用于更复杂的系统级行为建模。
而 UML2 状态图更常用于软件工程中的对象行为建模。
- 系统与环境的交互表示方法的区别。
- UML2 状态图:
状态与转换: 通过状态(State)和状态之间的转换(Transition)表示系统的动态行为。
事件和动作: 使用事件(Event)触发状态转换,动作(Action)则是状态转换时执行的操作。
嵌套状态: 支持嵌套状态,用于描述复杂状态的层次关系。
并行状态: 支持并行状态,用于描述系统的并发行为。
- SysML 状态图:
状态与转换: 同样通过状态和转换表示系统的动态行为,但更侧重于系统级别的状态变化。
事件和动作: 类似于 UML2,使用事件(Event)触发状态转换,动作(Action)则是状态转换时执行的操作。但可能包含更多系统工程的细节和扩展。
嵌套状态和并行状态: 和 UML2 状态图类似,但通常用于更复杂的系统行为描述。
输入输出流: 更强调系统与外部环境的输入输出交互,可能使用特定的符号和机制来表示这些交互。
3 行为图:状态机图 stm的例子
定义状态:状态(符号:圆角矩形又名“圆角”)表示对象在生命周期中的一种条件或情况,在此期间它满足某些条件、执行某些活动或等待某些事件。
例子:卫星发射中的状态机图
状态机图(smd):状态机图是一种动态行为图,它显示了对象或交互在其生命周期中为响应事件(又称“触发器”)而经历的状态序列,这可能会导致副作用(操作)。
- 设计目的
状态机图的目的是为时间关键型、任务关键型、安全关键型或财务关键型对象指定动态系统行为。
如果应用得当(请参阅下面的使用说明),状态机图是递归可伸缩和可模拟的。比如下图的子状态机图。
- 最佳实践模式说明
使用活动图和序列图来指定协作动态行为;有选择地将状态机用于时间/安全/任务/财务关键对象。
4 状态图的使用限制
* SMactivity Anti-Pattern = 容易混淆状态机和活动语法和语义。
- 复杂性管理:
问题:在面对复杂系统时,状态图可能变得过于复杂和难以管理,特别是当存在大量状态和转换时。
例子:一个具有多个嵌套状态和并行状态的大型系统,其状态图可能变得难以阅读和维护。
- 静态视图:
问题:状态图主要提供系统的静态视图,而不易表达系统在实际运行时的动态行为和时间依赖关系。
例子:如果需要描述系统在某些时间点的行为或响应时间,状态图并不适合。
- 不适合详细的业务逻辑:
问题:状态图不适合描述详细的业务逻辑和复杂的操作步骤。
例子:对于复杂的业务流程和详细的操作步骤,需要结合使用活动图或序列图来补充。
- 环境交互的细节有限:
问题:虽然状态图可以表示系统与外部事件的交互,但对于复杂的环境交互,细节和表达能力有限。
例子:在一个实时系统中,需要描述系统与多个外部系统的实时交互,状态图可能无法充分表达所有的交互细节。