10.1 引言
在子章节 8.3 表达式包中,OCL表达式被定义为:“能够在一个给定的环境中被计算的表达式”,在子章节 8.2 类型包中,还说过“表达式的计算产生一个值。”因此,OCL表达式的’含义‘(语义)可以被定义为在给定的环境中被执行所产生的值。
为了规定OCL表达式的语义,我们需要定义两件事:(1) 计算表达式可能产生的值的集合 (2) 计算和它们的环境。可能值的集合称为语义域。计算的集合连同它们来自抽象语法概念的关联代表了从OCL表达式到语义域的值的映射。在本章语义域和带有环境的技术将被称为域。
语义域以UML包的形式来描述,包含UML类图、类、关联和属性。真实的语义域是根据这个类图可以创建的(无限)实例集合。为了在语义域中表示OCL表达式的计算,使用了另一个UML包。在这个包中,定义了一些称为计算的类。每个计算类与一个值(它的结果值)和一个将名称绑定到值的命名空间环境相关联。注意,该UML模型包含的这两个包都位于OMG 4层架构的第一层,而第8章定义的抽象语法位于第二层。
OCL表达式的语义通过关联给出:语义域中定义的每个值与抽象语法中定义的一个类型相关联,每个计算与来自抽象语法的表达式相关联。在一个给定环境中OCL表达式所产生的值的‘含义‘是在一个特定命名空间中它的计算的结果值。注意,这个包链接到4层元模型架构的第一次领域和第二层的抽象语法。AS-Domain-Mapping包自身不能定位于OMG 4层架构中的一层。还要注意这个包只包含关联,没有定义新类。
图10.1 展示了定义的本章的包如何彼此关联,以及与抽象语法包的关联。
图10.1 Overview of Packages in the UML-based Semantics
- Domain包描述了值和计算。它分为两个子包:
- Values包描述了语义域。它展示了OCL表达式可能产生的结果值。
- Evaluation包描述了OCL表达式的计算。它包含决定某一给定表达式结果的规则。
- AS-Domain_Mapping包描述了来自抽象语法的元素和值与计算的关联。它分为两个子包:
- Type-Value包包含语义域实例与抽象语法中的类型的关联。
- Expression-Evaluation包包含计算类和抽象语法中的表达式的关联。