7.3.3.4 绑定元素语义

模板绑定暗示了绑定元素具有相同的良构约束和语义,就如同拥有模板模板签名的模板的内容被拷贝到绑定元素,由模板绑定中指定为实际模板参数的可参数化元素来替换相应的公开为形式模板参数的可参数化元素。然而,绑定元素没有显式地包含通过扩展该模板到它所绑定的模型元素所暗示的模型元素。此外,可以定义一个扩展的绑定元素,它通过把绑定元素的模板参数替换实际应用到目标模板来获得。

形式上,具有单个模板绑定而没有其它元素的绑定元素的一个扩展绑定元素可以通过如下方式来构造:

  1. 拷贝与该模板绑定的目标模板签名相关的模板。为此目的,模型元素的拷贝与原始的模型元素一样都是相同元类的一个实例,同时:
    • 所有复合属性(拥有的属性和拥有的关联端)的值都拷贝自原始元素的相应值。
    • 所有非复合属性的值与原始元素相应的值相同,除了对原始元素直接或间接所拥有的元素的引用,此时它们将被替换为对这些元素拷贝(通过如上方法)的引用。
  2. 如果拷贝特化了任何模板元素,那么使用相同的模板绑定为泛化的元素重定向该泛化关系到等同的绑定元素。如果拷贝的是一个操作,且与它关联的方法也是一个模板,那么使用相同的模板绑定来用一个等同的绑定元素替换该方法。 注意:模板操作的方法也可以是一个模板,具有与该操作相应的模板参数。尤其是,操作的模板参数通常用于参数化操作的参数类型,但是操作的方法并不直接引用该操作的参数。而是方法具有自己的ownedParameter列表,这应该与操作相匹配(参见子章节13.2)。因此方法参数的类型需要单独模板化以与操作的模板参数化相匹配。
  3. 对于拷贝所直接或间接拥有的每个元素,使用模板绑定中与该参数相关联的实际元素的引用来替换该拷贝中模板参数的参数化元素的引用。如果实际的元素自身具有一个模板绑定,那么引用等同的绑定元素。
  4. 从拷贝的模板签名删除模板绑定中引用的所有模板参数。如果这将删除模板签名的所有模板参数,那么直接删除整个模板签名。

如果一个绑定元素有多个模板绑定,那么一个特定的扩展绑定元素可以基于每个模板绑定来定义。然后整体的扩展绑定元素可以通过把所有模板绑定特定的扩展绑定元素和原始绑定元素所包含的其它元素进行合并来构造。如前所述,合并如何进行取决于被绑定的模板元素的类型。

在一个模型中包含一个绑定元素并不自动的需要相应的扩展绑定元素也包含在该模型中。然而,如果通过上述方法构造的扩展绑定元素违反了任何良构约束,那么原始的绑定元素也被认为是非良构的。

另一方法,如果绑定元素用于一个命名空间模板,那么它需要能够引用被视为自身命名空间的绑定元素的成员。例如,如果一个绑定元素是一个类模板,它需要引用该类的操作,例如来自一个CallOperaionAction。

注意:从模板中引用操作还不够,因为模板类的每个绑定元素都被认为具有自己有效的该模板的操作拷贝。

为了满足这种情形,允许在模型中除了绑定元素自身外还包含一个用于该绑定元素的扩展绑定元素。此时,该扩展绑定元素必须有一个指向它所扩展的绑定元素的实现依赖(参见子章节7.7)。该扩展绑定元素必须按照上述规则来构造(不管是建模者手工还是通过工具自动化)。从其它模型元素到该扩展绑定元素的可见成员的引用则被认为与到相应的原始绑定元素的隐式成员的有效应用是语义等同的。任意到扩展绑定元素的直接关系都与到原始绑定元素自身的关系是语义等同的。

results matching ""

    No results matching ""