
上QQ阅读APP看书,第一时间看更新
2.7.3 OCL类型与操作
OCL数据类型分为预定义的基本数据类型、集合类型和用户自定义数据类型三种情况。
1.基本数据类型
OCL基本数据类型包括整数(Integer)、布尔(Boolean)、实数(Real)和字符串(String)等数据类型,这些类型独立于任何对象模型,也是对象约束语言的基本组成部分,适用于任何UML模型。
OCL的基本数据类型的相关运算符及取值的例子如表2-2所示。
表2-2 OCL基本类型及其运算符

2.集合类型(Collection)
OCL定义了Set、Bag、Sequence三种具体的集合类型,它们都是抽象集合类型(Collection)的子类型,Collection类型包含了对所有集合都通用的操作。图2-27描述了OCL集合类型之间的关系。

图2-27 OCL集合类型
其中,Collection是抽象的集合类型,用于定义所有集合类型的公共属性和公共操作。Bag是无序集合类型,可以包含重复元素。Set类型表示一个无序集合,但其元素不允许重复。Sequence则表示一个既有序,又可以包含重复元素的集合。
表2-3列出了集合类型的主要操作。
表2-3 集合类型的主要操作

需要注意的是,抽象集合类型的操作对其所有子类型都是适用的;同时,没有哪个操作可以更改集合的内容,如Append操作虽然返回一个添加了某个元素的新集合,但它并不更改原有集合的内容。
在一般情况下,可以将UML类图中的关联视为Set类型的集合,有序关联可以当作是一个Sequence类型的集合。
3.用户自定义数据类型
用户在UML模型中定义的任何一种类型(如用户定义的类等)均可以看成是OCL的用户定义数据类型。UML模型中定义的大多数据类型或符号均出现在OCL表达式中,它们或者作为OCL类型,或者作为OCL变量。