8.3.1 表达式核心

图8.2展示了表达式包的核心部分。包中的基本结构包括类OclExpression, CallExpVaribleExp。一个OclExpression总是有一个类型,它通常并不显式地被建模,而是衍生出的。每个CallExp都有一个源,它由OclExpression来指定。在本节我们使用术语‘属性’——特征、关联端的泛化,以及OCL中预定义的集合遍历操作。

FeatureCallExp泛化了所有的属性调用,它们引用UML元模型中的特征。在图8.3中,定义了FeatureCallExp的不同子类。

表达式包的其余大部分内容包含了CallExp不同子类的规约和它们的特定结构。从元模型我们可以推断出OCL表达式总是起始于一个变量或字面量,在此基础上,递归地应用一个属性。

CallExp

CallExp表达式引用一个特征(操作或属性)或集合上的一个预定义跌打器。它的结果值是对相应特征的计算。它是一个抽象元类。

关联 说明
source source表达式的结果值是执行该属性调用的实例

FeatureCallExp

FeatureCallExp表达式引用一个在UML模型中的分类符上定义的特征。它的结果值是相应特征的计算结果。

关联 说明
isPre 布尔值,指示表达式所引用的特征是否是前置条件时刻的值。

IfExp

IfExp在8.3.3 If 表达式中定义,出于完整才包含在图中。

IterateExp

IterateExp表达式为集合中的每个元素执行其body表达式。它的行为类似循环结构,在源集合中遍历每个元素,然后产生一个值。在每个迭代步骤中执行body表达式所产生的值成为result变量的新值,用于后续的迭代步骤。结果可以是任意类型并且由result关联来定义。IterateExp是OCL表达式包中定义的最基本的集合表达式。

关联 说明
result 代表结果变量的变量

IteratorExp

IteratorExp表达式为集合中的每个元素执行其body表达式。它的行为类似循环结构,对集合的每个元素进行遍历并产生一个值。迭代器表达式的类型取决于表达式的名称,而且有时取决于所关联的source表达式的类型。IteratorExp代表了所有其它使用了一个迭代器的预定义集合操作。这包括 select, collect, reject, forAll, exists等等。OCL标准库定义了一些预定义的迭代器表达式。它们的语义在11.7 预定义的迭代器表达式中根据迭代表达式来进行定义。

LiteralExp

LiteralExp是一个没有实参的表达式。通常,其结果值与表达式符号是相同的。这包括像整数 1 或字符串字面量 ‘this is a Literal’。

LoopExp

LoopExp代表了一个集合上的循环结构体表达式。它有一个迭代器变量表示迭代过程中集合的元素。body表达式在集合的每个元素上执行。表达式的结果取决与特定的循环种类和它的名称。

关联 说明
iterator 迭代器变量。在迭代过程中绑定到集合中的每个元素
body 对集合中每个元素都要执行的OclExpression

MessageExp

MessageExp在8.3.4定义,出于完整才包含在图中。

OclExpression

OclExpression是一个可以在给定环境中被执行的表达式。在元模型中,OclExpression是所有其它表达式的抽象超类——除了ExpressionInOcl容器类。它是OCL表达式包的顶层元素。每个OclExpression都有一个类型,可以通过静态分析和它的上下文来获得。表达式的执行产生一个值。具有布尔值的表达式可以用做约束(例如,规定一个类的不变式)。任何类型的表达式都可以用来指定检索、初始属性值、目标集合等。

OclExpression的环境定义了在一个表达式中可以看到和访问哪些元素。在最上层,环境由OCL表达式所附加到的Element所定义,例如如果OCL表达式用做一个不变式的话,那么它就是一个分类符。在低一些的层次,每个迭代器表达式都可以在环境中引入一个或多个迭代器变量。环境没有被建模为一个单独的元类,因为它可以完全通过衍生规则衍生出来。完整的衍生规则在第9章 具体语法。

StateExp

StateExp是一个在表达式中引用类的一个状态的表达式。它用于直接向预定义的操作oclIsInState传递所引用的状态。

关联 说明
referredState 被引用的状态

TypeExp

TypeExp是一个在表达式中引用一个既有类型的表达式。它用于在调用类似oclIsKindOf, oclIsTypeOf和oclAsType等操作时向其传递类型的引用。

关联 说明
referredType 所引用的类型

Variable

Variable是有类型的元素,用于在表达式中传递数据。但需要其在自己的变量声明范围内。该元类代表了变量selfresult,以及使用Let表达式定义的变量。

关联 说明
initExpression 代表该变量初始值的OclExpression。根据该变量声明所起的作用,该表达式可能是必须的。
representedParameter 该变量在当前的操作中所代表的参数。任意对该变量的访问代表了对参数值的访问

VariableExp

VariableExp是一个包含了对一个变量引用的表达式。像对selfresult,或者Let表达式所定义的变量的引用都是这类变量表达式的例子。

关联 说明
referredVariable 该变量表达式所引用的变量

results matching ""

    No results matching ""