EA&UML日拱一卒-活动图::异常

来源:互联网 发布:码农 大数据 编辑:程序博客网 时间:2024/05/18 01:30

UML和很多语言一样,都有异常处理机制。当系统发生不正常的情况时,处理机制会中断正常的处理流程,然后由内向外寻找异常处理器并激活它。


语义


异常表示一种非正常情况的发生阻止了正常的执行过程。它通常是系统底层在应对执行过程中出现的故障时所产生的。这种场景下的异常处理是一种被动的活动;也有另外一种场景,作为错误处理的一种方式,异常由一个动作(RaiseExceptionAction)显式的抛出。


示例


这里仍然以解一元二次方程的流程举例。

内部的活动SolveEquationImpl中故意制造了两个会发生异常的场景:


  1. a!=0,delta <0

  2. a==0,b==0


然后在SolveEquationImpl的处理外面增加了一个异常处理器,并将二者用中断流(闪电形箭头)连接起来。可以看下面的放大图。


这 种连接方式就表示,如果SolveEquationImpl活动中发生了MathException类型的异常,该处理器就会被激活。这里还有一个默 契:Create NullSolution拥有和它所保护SolveEquationImpl活动同样的输出参数(类型,数量),当异常处理结束后,它的输出会替代受保护 的SolveEquationImpl的输出。只有这样后续处理才会像异常根本就没有发生一样继续进行。


需要补充说 明的是如果发生的不是MathException类型(或派生类型)的异常,处理机制会继续在本层次中寻找合适的异常处理器,如果还是没有找到,就会到上 一个运行层次(这里就是SolveEquation的层次)寻找,如果系统的最外层还是没有找到的话,系统可能崩溃。


画法


增加终端流和异常处理器都是通过拖动活动图工具栏上的对应图标到活动图中来实现的。


异常处理器



中断流



最后


比较一下SolveEquationImpl和下面的例子,应该可以发现处理简化了不少。



同时,因为可以选择适当的层次进行异常处理,这也增加了灵活性。

以上就是今天的文章,如果它能给您带来些许收获,欢迎点赞并推荐给您的朋友!
阅读更多更新文章,请扫描下面二维码,关注公众号【面向对象思考】