EA&UML日拱一卒-活动图::StartClassifierBehavior和StartObjectBehavior

来源:互联网 发布:知乎企业认证 编辑:程序博客网 时间:2024/06/11 02:11

关于调用,还有两个不容易区分的动作:StartClassifierBehaviorAction和StartObjectBehaviorAction。光看描述的话不好理解。所以这次的策略是先说明相关知识,再说明这两个动作。到那时就水到渠成了。


Behaviored Classifiers(行为化类目)


行 为化类目是可以拥有ownedBehaviors的类目,其中最多有一个行为可以被认为定义了行为化类目本身。相反地,一个行为化类目的被称为 ownedBehavior的行为把该行为化类目作为自己的(执行时的)上下文。这样一个行为的定义可以使用上下文行为化类目的功能,也可以参照对于上下 文行为化类目可见的其他元素。


然 而有些行为虽然不是行为化类目直接的ownedBehavior,也可以拥有上下文。为了找到一个不是直接ownedBehavior的行为的上下文,可 以沿着从该行为开始的物主关系链进行寻找,第一个遇到的行为化类目,就是我们的目标了。除非它自己就是一个有着非空上下文的行为。但即使是这样,它也可以 看作原始行为的上下文。例如一个行为化类目拥有的状态机的入口行为的上下文是拥有状态机的类目而不是状态机。


如 果一个行为有上下文,那么这个行为的执行总是有一个关联的上下文对象,它是上下文行为化类目的实例(只要这个行为化类目是可以实例化的)。一个没有上下文 行为类目的行为可以作为独立行为被调用。在这种情况下,行为执行充当自己的上下文对象。还有另外一种情况,当上下文行为化类目不可以被实例化时,行为执行 也要充当自己的上下文对象。当它是一个isIndirectlyInstantiated属性值为true的组件或者是一个协作时就是如此。也就是说,行 为执行总是拥有一个上下文,无论它是否拥有一个明确的,可实例化的上下文行为化类目。


行 为化类目可以拥有高级的ownedBehavior,被称做classifierBehavior。classiferBehavior描述的是一个类目 的实例在它的生命周期中可能经历的过程。一个行为化类目的实例被创建可以认为行为化类目的classifierBehavior被调用了;作为结果的执行 拥有这个新实例作为它的上下文对象。如果这个对象被销毁则执行被终止。


classifierBehavior 的精确语义依赖于拥有它的行为化类目的种类。例如一个协作的classifierBehavior表现的是所有组成部分的(emergent)行为,然而 一个类的classifierBehavior只是实例(整体)的行为,这个行为区别于实例的某些部分的行为。(However)一个被动类不应该拥有 classiferBehavior。


简而言之:


  1. 拥有了从属于它的行为的类目,就叫行为化类目

  2. 被一个行为化类目所拥有,定义了该类目整体特性的行为就是ownedBehaivor

  3. 如果ownerBehaivor的执行和的行为化类目的实例的生命周期等价的就是classifierBehavior

  4. 启动ownedBehavior的动作就是StartObjectBehaviorAction

  5. 启动classifierBehavior的动作就是StartClassifierBehaviorAction。


举例说明的话,


秒表类可以有一个描述秒表整体行为的状态机,这里秒表类就是行为化类目,状态机就是ownedBehavior;


线程类可以设计成创建实例开始执行,删除实例终止执行。这里线程类就是行为化类目,线程的内容就是classifierBehavior;


另外补充一点,在UML2.5中推荐使用StartObjectBehaviorAction,而StartClassifierBehaviorAction是为了保持和老版本的兼容性而保留的。


参考资料:

蓝字部分译自《OMG Unified Modeling Language TM (OMG UML) Version 2.5》, 译文中小括号中的中文是作者加上的,英文是没译出来的。供参考。


以上就是今天的文章,欢迎推荐给您的朋友!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】!


阅读全文
1 0
原创粉丝点击