包合并的一般性规则

如果被合并元素和接收元素满足在它们的元类型上定义的匹配规则,那么这两个元素就是匹配的。

约束:

  1. «merge»有向图中不能有环。
  2. 包不能合并它(直接或间接,通过owningPackage)所属的包。
  3. 包不能合并它所(直接或间接,通过packagedElement)包含的包。
  4. 如果被合并元素的元类型不是包、类、数据类型、属性、关联、操作、约束、枚举或枚举字面量,那么它不能有一个同名且同元类型的接收元素,除非接收元素是被合并元素的一个拷贝(即它们是相同的)。
  5. 包合并是有效的当前仅当执行合并所需的所有(本节)约束都被满足。
  6. 匹配的类型元素(例如属性、参数)必须有兼容的类型。对于类或数据类型的类型,兼容类型是相同的类型或者是一个公共的超类。对于其它情况,兼容意味着它们的类型必须相同。
  7. 接收元素不能对任意的被合并元素有显式地引用。
  8. 与匹配的RedefinableElements关联的任意重定义不能冲突。

转换:

  1. (缺省规则)没有匹配元素的被合并或接收元素被深度拷贝到结果包中。
  2. 两个名称和元类型匹配的元素,如果它们是彼此的拷贝,那么合并的结果是接收元素。
  3. 匹配元素按照它们的元类型上规定的转换规则来进行合并,结果被包含在结果包中。
  4. 对最终在结果包中的类型元素的所有类型应用都被转换为响应结果的类型元素的引用(即不是它们各自的递进)。
  5. 对于所有的匹配元素:如果两者都是private可见性,那么结果元素就是private可见性;否则,结果元素是public可见性。
  6. 对于所有匹配的分类符元素:如果两者都是isAbstract=true,那么结果元素的isAbstract=true;否则,结果元素的isAbstract=false
  7. 对于所有匹配的分类符元素:如果两者的isFinalSpecification=true,那么结果元素的isFinalSpecification=true;否则,结果元素的isFinalSpecification=false
  8. 对于所有匹配元素:如果两者都不是衍生的,那么结果元素也不是衍生的;否则,结果元素是衍生的。
  9. 对于所有匹配的MultiplicityElements:结果元素的下限是匹配元素中下限的较小者。
  10. 对于所有匹配的MultiplicityElements:结果元素的上限是匹配元素中上限的较大者。
  11. 在被合并或接收元素中应用的任意stereotypes都被应用到结果元素上。
  12. 对于匹配的RedefinableElements:匹配RedefinableElements的不同重定义都应用到结果元素上。
  13. 对于匹配的RedefinableElements:如果两者的isLeaf=true,那么结果元素的isLeaf=true;否则,结果元素的isLeaf=false

results matching ""

    No results matching ""