8.3 Expressions

8.3.1 概要

Expressions是从计算指定值的ValueSpecifications。

8.3.2 抽象语法

图8.2 Expressions

8.3.3 语义

Expressions

表达式(Expression)被定义为树结构。这个树结构中的每个节点包含一个symbol和一个可选的operands(操作数)集合。如果没有操作数,该表达式表示一个终端节点。如果有操作数,表达式代表由symbol给定的操作符应用于这些操作数。Expression的计算规则如下:首先计算它的每一个操作数,然后将symbol指定的操作符应用于之前所产生的结果操作数。然而,symbol的实际解释取决于表达式的使用上下文,本规范没有提供任何标准的symbol定义。遵循本规范的工具可以为它所提供的解释定义一些特定的symbols或者简单地把所有的表达式都视为未解释的。

String Expressions

StringExpression通过连接一个子串列表来指定一个字符串值。子串通过一个LiteralString操作数列表或者一个StringExpression subExpressions来给定(但不能两者混合)。StringExpression的字符串值通过按序连接这些子串来获得。

StringExpressions常被用于在模板上下文中指定NamedElements的名字。整个StringExpression或1个或多个它的子表达式被用做模板参数(TemplateParameters)的参数化元素(ParameterableElements),从而允许一个NamedElement的名字在一个模板中被参数化。参见7.4.3中对NamedElements语义的进一步讨论。

Opaque Expressions

OpaqueExpression通过一个UML行为(Behavior)或基于一个非UML的语言的文本声明来指定一组值的计算。

OpaqueExpression可以有一个body,它包括一个文本字符串序列,它们代表了该OpqueExpression值的不同计算方法。可以使用一个相应的language字符串序列来指示每个body字符串采用哪种语言来解释。语言按序与body字符串进行匹配。UML规范没有定义body字符串如何被相关的语言所解释,尽管其它的规范可能定义了用于指示如何解释的language字符串(例如“OCL”按照OCL规范所定义的来对表达式进行解释)。注意,languages不是必须要指定的。如果它们没有被指定,那么对任意body字符串的解释必须能够从bodies的形式或该OpaqueExpression的使用上下文中推断出来。

OpaqueExpression还可以使用一个UML行为(参见13.2)来定义,其中限制其除了一个返回参数外没有其它参数。该OpaqueExpression的值通过调用这个行为和在返回参数上返回值来给定。注意OpaqueExpression的behavior除了返回参数外不能有其它参数,因此不能再调用的时候传递数据。因此,它必须通过行为描述中的元素来访问需要的输入数据。

如果一个OpaqueExpression具有多个body字符串,或者除了多个body字符串外还有一个behavior,那么任意一个bodybehavior都有可能用来计算该OpaqueExpression。UML规范没有定义如何做出该选择。

8.3.4 表示法

Expressions

不带操作数的表达式简单地通过它的symbol(与字符串字面量不同,symbol不包含在括号中)来表示。带有操作数的表达式表示为:symbol,后面跟着圆括号,其中是按顺序排列的操作数,用逗号分隔。然而,在特定的环境下,遵循本规范的工具可以允许特定的表示法,包括中缀操作符。

对于带有NamedElements的字符串表达式的使用表示请参见7.4.4

Opaque Expressions

如果一个OpaqueExpression具有多个body字符串,那么它们被用于在该OpaqueExpression的包含元素中展示它。UML规范没有定义这些字符串的语法,但是,如果对于一个body字符串给定了其相应的language,遵循本规范的工具可以强制其语法要遵循那个语言。遵循本规范的工具还可以限制所允许的语言或者假定一门特定的缺省语言。

如果为OpaqueExpression指定了languages,那么在每门语言所指向的body字符串前显示一对大括号({}),其中是该语言的名称。然而,OpaqueExpression的languages不是必须要被显示的。

如果一门语言的名称由一个规范所定义,那么在OpaqueExpression中使用该语言的名称时应该按照在语言规范中所出现的形式(拼写和大小写)。例如,使用“OCL”,而不是“ocl”。

8.3.5 示例

Expressions

xor

else

plus(x,1)

x+1

Opaque Expressions

a > 0

{OCL} i > j and self.size > i

average hours worked per week

results matching ""

    No results matching ""