行为特征和方法

有两种类型的行为特征:操作(参见9.6)和Receptions(参见10.3)。在UML中的不同种类的行为分类符中,只有类可以有行为特征并且只有活跃(active)类可以有Receptions(参见11.4)。在类的对象上调用一个操作或发送一个信号实例是请求它执行一个已识别的行为特征。操作调用鉴别了要被调用的一个特定操作。另一方面,对信号实例的接受被认为是请求与之匹配的Reception。

类的一个行为特征可能被一个或多个方法method)行为所实现。这样的一个行为特征规定了所属类的实例将会通过调用一个实现了该特征的方法来对该行为特征的请求作出响应。一个行为不能作为多个(多于一个)行为特征的方法,该行为特征称为它的规约。行为的规约应该是行为所属类的一个自有或继承的成员。可能有多个方法与一个单一的行为特征相关联,但对于每个特定的类(行为的宿主)和行为特征(行为的规约)的二元组,至多只能有一个行为。这意味着一个单一的行为特征可以在它的宿主类和任意子类中都有方法,但每个类中不能超过一个方法

对于任意的被调用的方法执行,接收对象成为其上下文对象。

注意. Reception的方法总是被异步调用,而操作的方法可能是异步的,也可能是同步的,取决于该操作是如何被调用的。

方法的解析过程应该基于所请求的行为对象、接收对象,以及请求中的任意数据值(例如,操作的输入参数或信号属性值)。然而,UML规范没有强制规定遵循它的工具应该支持任意特定的解析过程。通常,解析过程可能很复杂,要包括类似before-after方法、代理等等之类的机制。其中的一些方法中,多个行为可能作为一个单一调用的结果来执行。如果解析过程没有找到一个方法,那么对于将会发生什么没有定义。

下面是用于CallEvent的一个简单的面相对象的解析过程,它总是会产生至多一个方法:

  • 如果接收对象的类拥有用于CallEvent中所鉴别出的操作的方法,那么这个方法就是解析结果。否则,接收对象的类的超类检查用于该操作的方法,这样持续直到找到一个方法或者到达泛化层级的根。如果一个类有多个超类,那么它们所有都检查该方法。如果没有找到一个方法或者一个方法延不同的路径在多个祖先类中被找到,那么该模型对于解析过程就是错误的,并且它不产生方法

操作的方法应该具有与操作的参数相对应的参数。类似的,Reception的方法应用具有与Reception所引用的信号属性相对应的参数。与请求关联的数据值——操作的输入参数值或信号属性值——通过方法的参数被传递到请求引发的被调用方法中。对于一个同步方法调用,来自方法执行的输出参数值通过相应的操作输出参数传回操作的调用者。

然而,没有定义用于方法的参数和行为特征的参数进行匹配的特定方法。可能的方法包括完全匹配(即相应参数的类型、次序必须相同)、covariant匹配(方法的一个参数的类型可能是行为特征相对应参数类型的子类)、contravarint匹配(方法的一个参数类型可能是行为特征的相对应参数类型的超类),或者它们的一个组合。

results matching ""

    No results matching ""