随笔-11  评论-3  文章-53  trackbacks-0

软件模型设计基础(6 

作者不祥 来源不祥 http://www.csai.cn  200512

重要声明:

  对此系列文章,error.cao仅授权www.51CMM.COM.com独家刊登,任何个人或团体不得转载作商业用途。

12行为事物

1.2.1交互(Interaction)

  交互是协作中的一个消息集合,这些消息被类元角色通过关联角色交换。当协作在运行时,受类元角色约束的对象通过受关联角色约束的连接交换消息实例。交互作用可对操作的执行、用例或其他行为实体建模。

  消息是两个对象之间的单路通信,从发送者到接收者的控制流。消息具有用于在对象间传值的参数。

  消息序列从不同方向去理解可得两种图:顺序图(谁先谁后)和协作图(谁和谁交互信息)。

  如上的消息序列表示出来是很重要的,主要由顺序图和协作图来关联编写源码。

  如何理解交互,作为行为事物,交互是一组对象之间为了完成一项任务(如操作)而进行通讯的一系列消息交换的行为。首先交互在一组对象之间进行;其次,交换是为了完成一项任务;最后,交互进行一系列消息交换。

  比如,农场主想计算羊的一年的产崽量,他首先知道找那些人询问;其次,他也知道问什么;最后,他问(一些饲养人员)了一些问题。当这个交互过程结束后,他计算出来羊的数量(可能该计算已经在消息的交互过程中进行了)。

  从生活上理解,交互一个信息来往的过程,而在UML中,交互是这些信息交换过程(行为方面)的集合。

  交互的表示在顺序图、协作图和活动图中。

1.2.2状态机(state machine

  状态机是一个状态和转换的图,描述了类元实例对事件接收的响应。状态机可以附属于某个类元(类或用例),还可以附属于协作和方法,状态机附于的元素被称为状态机的主机。

  状态机的执行:状态机在某个时刻处理某个事件而在处理另外的事件之前必须完成这个事件的结果。

  执行的语义描述(较生涩):在任何时候都存在一个或者多个状态机的活动的状态。如果一个状态是活动的,那么离开这个状态的转换(是转换被激发)可能会激发,引起一个动作的执行,并使得另一个状态或位于初始状态位置的状态激活(下一个状态处于初始状态)。

  状态机的子状态(也生涩):状态机的结构和状态机的转换可以对并发活动的状态施加约束。即如果一个顺序状态,则只有一个直接的互斥子状态必须处于活动;而一个并发组成状态处于活动,则每个直接子状态都必须处于活动。

  关于状态机的语义,我先生涩地说明如下,但其如何理解?

  状态机它是说明它(状态机)的对象在它(对象)的生命期中事件的所经历的状态序列以及它们对那些事件的响应。

解释一下几个名词:

  1.状态(state):是指在对象的生命期中的一个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。

  2.事件(event)是对一个在时间和空间上占有一定位置的有意义的事情的规格说明。在状态机中,一个事件是一次激发的产生,激发可以触发一个状态转换。

  3.转换(transition)是两个状态之间的一种关系,它指明对象在第一个状态中执行的一定的动作,并当特定事件或特定条件满足时进入第二个状态。

  一个活动(activity)是状态机中进行的非原子执行。

  一个动作(action)是一个引起模型状态改变或值的返回的可执行的原子计算。

  下面来说明这几个概念:

  状态机说白了很简单,说一个最常见的例子,我们下班回家这件事,人(假如是我error.cao)就是一个对象,我们来考察一下几个状态:

  1.到下班时间了,收拾东西准备回家(不考虑加班)

  2.开始等电梯。

  3.到了楼下。(发现没带家里钥匙,上楼拿。)

  4.上楼。

  4.去公交等车。

  5.乘公共汽车去菜场。

  6.买菜

  7.回到家

  那么事件呢?

  1.下班时间到了(准备下班)

  2.电梯到(上电梯)

  3.电梯到楼下(下电梯)

  3.发现没有家里钥匙(去拿钥匙)

  4.自己要乘公共汽车到了(上车)

  5.公共汽车到站(下车)

  6.忽然想起家里没菜(去买菜)

  那么何为转换:有个事件(发现没有家里钥匙),状态一(到楼下)转换到状态二(上楼),当然这个转换是对象(error.cao)的行为。此时再提一下初态和终态的概念:初态和终态并不针对转换,而是针对对象,该状态一(到楼下)不是初态,初态是到了下班时间;终态自然也不是状态二(上楼),而是回到家。那么该转换的状态一是什么呢?是该转换的源状态(source state),状态二呢?是该转换目标状态(target state)

  关于非触发转换我不太赞成这个说法,仅仅可以说是它被隐式地被触发了,比如,以上的事件二,我们可以不表述它是个事件,但从状态二(开始等电梯)到状态三(到了楼下)就是个隐式地被触发,它有没有事件,当然有,仅仅是我们没有考虑(这些事件可以忽略)

  在转换中还有个术语,叫监护条件,何谓监护条件?看一下事件一(下班时间到了),我们必须定义一个时间,然后由时钟告诉你(是你拿时钟上的时间和下班时间比较)时间到了,好了,时间到该下班了(事件产生了),事件产生了,对象就发生状态的转换。

 

 

如果想了解更多相关内容请访问:

http://51cmm.csai.cn/OO/No038.htm

posted on 2006-03-14 15:56 it110 阅读(146) 评论(0)  编辑 收藏 引用 所属分类: 面向对象
只有注册用户登录后才能发表评论。