您的位置:首页 > 其它

软件模型设计基础-行为事物

2004-07-30 14:03 417 查看

1.2行为事物

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)。

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

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



  当然各个状态本身包含如下内容:(括号表示该状态可以没有)

  名称:就是名字,状态的名字。

  进入/退出动作:对象本身的一个操作,比如在电梯里是一个状态的话,哪我们进电梯和出电梯就是状态---在电梯里---的进入/退出动作。
  内部转换:比如我们在去等电梯的时候发现钥匙没带,此时我们不用在等电梯的以后状态是再有事件触发,在准备下班的状态上我们就去拿钥匙了,对于对象本身,前后两次的根本状态不一样,一个是有钥匙,一个是没有钥匙。

  (子状态) :如果我们描述该对象在电梯里说话,抽烟(一般电梯不许)等状态时,该状态就是该对象状态---在电梯里---状态的子状态。

  (延迟事件) :现在不立即产生的事件,该事件是在一段时间以后才产生的事件。

  说了半天,何谓状态机?对象从初态向终态过度的过程中,响应一系列的事件而经历的状态,同时包括对该事件的响应。首先,它不是这个过程,但它描述这个过程,是该对象在这一系列过程中的行为。

  以上描述的就是我们每天下班的所做的事,这不是一个用例,但可以说是一个对象多个用例表示(一个用例可能描述不完如此只多的状态及其响应)。

  若我们说到UML图的关系时大家会豁然开朗,因为我们的目标很明确,就是开发出我们客户需求的软件,我们采用UML来对系统进行建模,UML的最终结果是一个采用各种图的形式来把各个类元间的关系表达出来,通过表达出来的类元关系,我们来编制软件代码。
1. 3分组事物

1.3.1包(package)

  包的定义:用于把元素组织成组的通用机制。

  包在理解上和构件(component)有协同之处,构件是组成事物的元素,我们定义的包是一个构件的抽象化的概念,是把类元按照一定的规则分成组(也可以称为模块)。我原先的最初想法是package =component(s),后发现没有如此简单,package =component(s)+规则,这个规则不是条文,是构架在组件之上的思想抽象,而这个抽象恰恰是我们包的定义。

  包主要是包含其他元素,如类、接口、构件、节点、协作、用例和图,当然也可以包含其他的包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: