状态机图和流程图之间有哪些区别和相似之处?
到目前为止,我发现状态图显示的是状态的实际变化,而不是流程图中的过程或命令。
在状态图中,节点是状态,箭头对应于触发状态更改的事件。
在流程图中,节点是行动或决策,箭头对应于控制流,即接下来会发生什么。流程图不是UML。最接近的UML图是一个活动图,它允许您用流程图等更精确地显示您可以建模的所有内容(因为箭头也可以表示对象流(。
两者可以是互补的:流程图中的一个动作/决策可能会触发导致状态变化的事件。但这不一定是一对一的:一个动作可能会导致几个状态的变化,而流程图中没有任何证据表明这些变化可能发生。
简单的例子:
- 想象一个
Order
对象。它可以具有状态received
、delivey in preparation
、delivery complete
、invoiced
。这些状态中的每一个都告诉订单接下来会发生什么。这将是状态图的主题 - 想象一个流程图。这些是按顺序发生的不同动作:
Get an order from customer
、Pick items of the orders from the inventory
、Send items to the customer
、Are all items sent?
,如果是,Prepare and send invoice
,如果不是,Find missing items
,然后返回Pick items ...
并从那里继续
正如你所看到的:两者都可以讲述同一个故事,但从不同的角度讲述不同的细节。
正如您所提到的,状态机图专注于显示基于输入的执行从哪个状态到哪个状态。
尽管状态机可以作为流程图/活动图的特殊形式来处理。