6.3.3 稳定的和瞬时行为语义

尽管结构语义与特定时间点上的建模事物相关,UML中的结构化建模构造仍具有对特定行为方面进行建模的能力。举个例子,分类符可能具有行为特征,它们可以被调用来请求该分类符的一些行为。一个类可以被建模为主动的(活跃的/active),意味着它的实例有一些自治行为。

结构化建模构造的行为特性做出了对系统行为的高层声明,当系统在某个特定时间点处于稳定状态时,它通常可以得到验证。然而,它们没有定义系统如何从之前的一个状态进入该状态,只是一些行为必须发生来导致这种变化。瞬时(transient)行为的详细定义需要使用行为建模构造。

在许多情况下,UML模型中的结构化元素具有相关的行为元素,后者定义了实现前者所识别的高层行为的详细行为。举个例子,类所拥有的一个操作可以由一个相关的方法,该方法定义了它的详细行为。再有,一个主动类可以有一个分类符行为,它详述了主动类的自治行为。在这些情况下,建模者需要确保使用这些行为建模元素所规定的详细瞬时行为真的会导致相应结构化元素所规定的高层稳定行为。(工具可以辅助建模者来完成,但这对于遵循本规范的UML工具不是必须的。)

下面列举一些UML中重要的语义区分。

  • 操作行为:操作是类的一个行为特征,它可以在类的实例上被直接调用(参见9.6)。操作的定义包括输入输出参数类型,以及操作调用前后的前置和后置条件。该模型的语义是,如果操作在满足前置条件的情况下使用给定类型的输入被调用,那么当操作调用完成后,它会产生给定类型的输出并且满足后置条件。操作还可以有一个方法,它详述所需行为的定义(参见13.2)。建模者需要确保该方法满足操作的前置和后置条件。注意,后者条件需要在行为完成后达到一个稳定点时满足,而不必在该方法行为的瞬时执行中满足。类还可以有不变量条件,它们需要在操作执行前后满足,而在操作方法执行中可以违反。
  • 属性缺省值:属性语义规定,当具有缺省值的属性被实例化时,如果没有给该属性特定的值,那么缺省值作为该属性的初始值(参见9.5)。因此,当实例化一个分类符时,一旦实例化该分类符所需的行为结束,所有具有缺省值的属性都应该被适当的初始化。然而,创建对象的动作规定创建一个对象,它的属性都没有初始值,不管对象的分类符是否为该属性设定了缺省值(参见16.4.3)。因此,当对分类符实例化进行详细行为建模时,一旦对象被创建,建模者要确保为具有缺省值的属性执行适当的初始化行为。(这通常在一个构造函数操作中封装类的实例化行为来实现,参见11.4,此时对属性的初始化称为该构造函数的一个隐式后置条件。)
  • 主动类行为:主动类语义规定,当一个主动类被实例化后,作为对象创建的结果,新对象立即执行它的行为(参见11.4)。然而,创建对象动作只是创建对象而不启动任何相关联的行为的执行(参见16.4.3)。这需要使用一个启动对象行为动作来执行那些行为(参见16.3.3)。因此,当对分类符的实例化行为进行详细建模时,在实例被创建后,建模者要确保所建模的行为正确启动了主动类实例的分类符行为。(该行为也可能被封装在类的构造函数操作中。)

results matching ""

    No results matching ""