9.6.3 语义

Operations

操作是接口、数据类型,或者类的行为特征。操作可以在它的featuringClassifiers的实例上进行直接调用。操作为这样的调用指定了名称、类型、参数和约束。

如果有返回参数,那么操作的类型就是返回参数的类型,否则操作没有类型。

操作的前置条件(preconditions)定义了操作被调用时应满足的条件。操作的实现可以假定这些前置条件。当一个前置条件不满足时操作的调用行为在UML中时未定义的。

操作的后置条件(postconditions)定义了操作成功完成后应满足的条件。这些后者条件应该被操作的任意实现所满足。

操作的bodyCondition约束了返回值应该是一个通过bodyCondition规约计算出的值。该值应该满足后置条件(如果有的话)。bodyCondition与后置条件不同在于bodyCondition可能在操作被重定义时被重载,而后置条件在重定义时只能增加。

操作可能会在执行过程中抛出一个异常。当异常被抛出时,不应该假设操作的bodyCondition或后置条件得到满足。

操作可能在featuringClassifier的特化中被重定义。重定义可能增加新的前置条件或后置条件,增加新的raisedExceptions,或者相反精化操作的规约。

当操作在一个特化中被重定义时,不同的类型兼容系统采取不同的模式来决定参数和结果的类型如何变化。当类型不变时,称作invariance。当参数类型可能是一个特化类型时,称为covariance。当参数类型可能被泛化时,称为contravariance。在UML中,这些类型兼容规则有意未定义。重定义的参数应该和被重定义的参数具有相容的multiplicity、相同的方向、次序和唯一性。

如果isQuery为真,操作的调用不应该修改模型中本实例或任意其它元素的状态。

操作可以被一个类、数据类型或接口所拥有,它们为可能的重定义提供了上下文。拥有操作的分类符为它提供redefinitionContext。

Template Operations

为了支持模板操作规约和绑定操作,操作特化了TemplateableElement。绑定的操作必须被一个分类符所拥有。如果原始的操作利用了一个行为来定义,那么绑定的元素必须被与该行为向一致的分类符所拥有。这意味着三者之一:(a) 绑定的操作与模板出现在相同的分类符;(b) 绑定的操作出现在模板宿主的一个子类;(c) 模板没有副作用地定义在一个静态类,绑定的操作就可以出现在任何地方。

Operation Template Parameters

操作可能被一个模板通过OperationTemplateParameter暴露为一个形式模板参数。OperationTemplateParameter是一种TemplateParameter,其中的参数化元素是一个操作。在一个模板分类符中,OperationTemplateParameter可以像其他可访问的操作一样被使用。在模板中任何对该OperationTemplateParameter的访问最终都转换为绑定分类符中队实际操作的引用。举个例子,对OperationTemplateParameter的调用将会调用一个实际的操作。

OperationTemplateParameter的缺省值必须是一个与所暴露操作具有相同的参数类型、方向和multiplicites的操作。

results matching ""

    No results matching ""