zoukankan      html  css  js  c++  java
  • QVT之The Relations Language(Part 二)

    The Relations Language(二)

    3、模式匹配

    用一个例子来讨论与domain相关联的模式匹配,被称为对象模板表达式(object template expressions)。

    c:Class {

    namespace = p:Package {},

    kind='Persistent',

    name=cn

    }

    一个模板表达式匹配导致了候选模型中模型元素到domain中所声明变量的绑定。一个模板表达式匹配可以在一些domain变量已经绑定了模型元素的情况下执行。在这种情况下,模板表达式匹配只为未绑定的domain变量寻找绑定。

    4、Key和用模式创建对象

    前面提到过,模板表达式可以当做模板来创建目标模型中的一个对象。当对于一个给定的源domain模式的有效匹配时,目标domain模式中不存在一个有效的匹配,最后会用目标domain的模板表达式当做模板来创建目标模型中的对象。

    t:Table {

    schema = s:Schema {},

    name = cn,

    column = cl:Column {name=cn+'_tid', type='NUMBER'},

    primaryKey = k:PrimaryKey {name=cn+'_pk', column=cl}

    }

    然而,当创建对象时,我们需要保证要创建的对象已经存在时不能重复创建。引入Key的概念,Key定义了一组属性唯一的标识了一个模型中类的对象实例。一个类也可以由多个Key。

    例如对于前面提到过的关系ClassToTable,我们也许希望在simpleRDBMS模型中一个table被两个属性唯一的标识——它的name以及所属的schema。我们可以这样声明:key Table {schema, name};

    在对象创建时,如果一个对象模板表达式中的属性匹配了相关联类中的一个key,然后用key来定位模型中匹配的对象。仅仅当不存在匹配的对象时才会创建新的对象。

    5、对表达式的限制

    为了保证可执行性(即存在一个受约束的算法朝着一个给定的目标模型执行relation),在relation中出现的表达式需要满足以下条件:

    1)when字句,源domain,where字句中的表达式需要满足以下形式:

    a、<object>.<property> = <variable>

    b、<object>.<property> = <expression>

    c、其他的表达式中不会有自由变量出现(所有出现的变量应该都已限制在前面的表达式中)。

    2、目标domain中的表达式需要满足以下形式:

    a、<object>.<property> = <expression>

    b、其他的表达式中不会有自由变量出现(所有出现的变量应该都已限制在前面的表达式中)。

  • 相关阅读:
    博客园首页CSS模板
    style、currentStyle、getComputedStyle的区别和用法
    createDocumentFragment创建文档碎片节点
    setTimeout里如果有$(this),$(this)指的是谁?
    让ie也兼容placeholder
    eval()函数可以把一个字符串当作一个JavaScript表达式一样去执行它
    遮罩层特效(根据鼠标进入离开方向出现)
    jquery之attr和prop区别
    js封装类简单举例
    自动换行 word-break:break-all和word-wrap:break-word
  • 原文地址:https://www.cnblogs.com/tianzibobo/p/2976338.html
Copyright © 2011-2022 走看看