对UML状态图转移事件的认识

在使用Star UML工具画状态图时,状态之间的转移事件分为4种:SignalEvent、CallEvent、TimeEvent和ChangeEvent。个人对这4种Event的理解如下:

1、SignalEvent

来自于本对象(模块、单元)外部,需要本对象消耗资源去监控是否发生的Event,可作为SignalEvent。

SignalEvent并非本对象产生,而是由本对象以外的其它对象产生。生产SignalEvent的那个对象只是自顾自的干活儿,干完拉到。就好比食堂里做饭的大爷(其它对象),每天只负责做饭,饭做好了往盘子里一倒,爱吃不吃,不会通知你(本对象)去吃。如果你想要吃口热乎的,就要花点精力(消耗资源)时不时跑食堂看看饭有没有做好。此时,“饭做好了”这个就是SignalEvent,可能会导致你从“上班状态”进入“吃饭状态”。

2、CallEvent

来自于本对象(模块、单元)外部,当发生时会主动通知你(Call me, honey!)发生的Event,可称作为CallEvent。

同SignalEvent一样,CallEvent也不是本对象产生的,而是其它对象产生的。区别在于,当其它对象生产CallEvent时会主动通知本对象。好比媳妇儿在家做饭,饭做好了会主动告诉你(Call me)。在这个过程种你(本对象)不需要花费精力(消耗资源)去看饭有没有做好(事件发生),而是享受了VIP待遇。CallEvent可能导致你从“看电视”状态进入“吃饭状态”。当然,你也可以忽略Event(比如此时电视节目很精彩)。

3、TimeEvent

这个就是定时事件,由于比较普遍,所以单独列出来。如果把定时器看作是另外一个对象,那么当定时时间超时,这个定时器对象就会通知(Call)你,因此TimeEvent也是可以通过调用(Call)来发挥作用的。

4、ChangeEvent

我理解的ChangeEvent与上面三个事件不同,上面的Event都不是本对象生产的,而ChangeEvent则是本对象自身生产的事件,并可能导致本对象的状态发生某些变化。在这里,本对象就变成了上文例子中做饭的大爷或媳妇儿。他们本身就是负责做饭的,饭做没做好自己就知道,并有可能导致他们从“做饭状态”进入“吃饭状态”。

以上可知,使用SignalEvent驱动状态机运行的两个对象之间耦合较少,有利于设计上的解耦,但需要系统消耗一定资源对SignalEvent进行监视,而CallEvent要求两个对象之间互相知道对方的存在,设计上耦合较大,但使用方便,不需要消耗额外的系统资源监视Event是否发生,在实际使用过程中应综合考虑。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值