第17章 对象约束语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
17.2 标准OCL类型
OCL预定义的标准类型定义了一组基本类 型和集合类型。 OCL的基本类型有“Boolean”、 “Integer”、“Real”和“String”等,集 合类型包括“Collection”、“Set”、 “Bag”和“Sequence”等,这些标准类型 是OCL表达式的组成部分。
操作 Iterate(OclExpression) 在Collection上迭代 notEmpty size 当Collection至少有一个元素时,返回真 返回Collection中的元素数 说明
sum
返回Collection中所有元素的和
2. Set
Set是不包括重复元素的对象组,Set中的 元素是无序的。 定义在Set上的操作见表17-6。
当Sequence和参数Sequence包含相同 的元素以及元素次数和顺序相同时,返回 真
当Sequence和参数Sequence不包含相 同的元素或元素次数和顺序不同时,返回 真
<>
17.2.5 OCL中的关键字
与程序设计语言一样,OCL也定义了一些 关键字。 OCL中的关键字见p266表17-9。
-1.2 , 3.4 ,
“My name is “
Implies:逻辑异或运算。 Floor:取小于或等于一个实数的最大整数。
17.2.4 集合类型
除了基本类型以外,OCL还定义了一些较 为高级的标准OCL类型称为集合类型。 集合是成组的对象或元素,可以用来作为 表达式计算过程中的结果。 集合类型除了抽象数据类型Collection以 外,还有Set(集)、Bag(袋)和序列 (Sequence)等。
7.2.2 OclAny类型
OclType类型是一个模型里所有类型的上 级类型。模型里所有的类都继承由OclAny 定义的特性。 OclAny的操作见表17-2。
表17-2 : OclAny的操作
操作 = <> 说明 比较两个OclType对象,如果相等,返回真 比较两个OclType对象,如果不等,返回真
union(Set)
返回Bag中表达式为真的元素组成的Bag
返回Bag和参数Set的联合体,结果是Bag 类型
union(Bag)
= <>
返回Bag和参数Bag的联合体,结果是 Bag类型
当Bag和参数Bag包含相同的元素时,返 回真
当Bag和参数Bag不包含相同的元素时, 返回真
4. Sequence
OCL标准类型的层次结构
17.2.1 17.2.2 17.2.3 17.2.4 17.2.5
OclType类型 OclAny类型 基本类型 集合类型 OCL中的关键字
17.2.1 OclType类型
OclType类型是OCL预定义的和在模型中 定义的类型,OclType允许访问模型的元 级别。 OclType的操作见表17-1。
返回Sequence中指定位置的元素 返回由参数对象加上Sequence中所有元 素组成的Sequence 返回Sequence中表达式为假的元素组成 的Sequence 返回Sequence中表达式为真的元素组成 的Sequence
Iterate(OclExpression)
在Sequence上迭代
表17-3 : 基本类型
基本类型 Boolean Integer 操作 And,or,xor,not,implies,if-then-else +,-,*,/,abs 值 True,false -1 , 1 ,
Real
String
+,-,*,/,floor
toUpper,toLower,concat,substring
返回Sequence中移除重复元素后所有元素 组成的Set
返回对Sequence中每个成员应用此表达式 得到的所有元素组成的Sequence 返回参数对象在Sequence中出现的次数 返回包含在Sequence中除参数对象以外所 有元素的Sequence 返回包含在Sequence中的所有元素,并加 上参数对象作为最后元素的Sequence 返回包含在Sequence中的所有元素,并在 后面加上参数对象的Sequence
OCL的产生
OCL的产生是为了解决约束表达的问题。 OCL最初由IBM公司设计成功。 OCL已经为标准化组织OMG所接受,成为 了UML标准的一部分。 OCL语言虽然是一种形式化语言,但是它 既具有形式化语言无二义性的特点,又消 除了形式化语言的复杂性。
OCL的特点
① OCL是一种精确的、无二义性的语言,易于使 用和掌握。 ② OCL是一种规范说明性语言,所有有关实现的 问题都不能用OCL来表达。 ③ OCL是一种纯表达式语言,它是具有没有任何 副作用的声明性语言。对OCL表达式的计算将 返回一个值,计算不会改变系统的状态。 ④ OCL是一种类型化语言,即OCL中的每个表达 式都是具有类型的。 ⑤ OCL不是一种程序设计语言,不能用OCL编写 程序逻辑和控制流程。
表17-5 : 定义在Collection类型上的操作(1)
操作 Count(OclAny)
Exists(OclExpression) forAll(Expression) Includes(OclAny) IncludeAll(Collection) isEmpty
说明 返回一个对象在Collection中出现的次数
如果表达式对于Collection中至少一个元素的 值为真,则返回真
对于Collection中的每个元素,表达式的值都 为真时,则返回真
当对象是Collection的一个元素时,返回真 当包含参数Collection中的所有元素时,返回 真 当Collection不包含元素时,返回真
表17-5 : 定义在Collection类型上的操作(2)
第17章 对象约束语言
17.1 17.2 17.3 17.4 对象约束语言概述 标准OCL类型 OCL表达式 用OCL表达对象性质约束
17.1 对象约束语言概述
对象约束语言简称OCL(Object Constraint Language),它是一种用于 施加在指定的模型元素上约束的语言。 OCL表达式以附加在模型元素上的条件和 限制来表现对该对象的约束,其中包括附 加在模型元素上的不变量或约束的表达式、 附加在操作和方法上的前置条件和后置条 件等。
表17-6 : 定义在Set类型上的操作(1)
操作 asBag asSequence 说明 返回包含Set中所有元素的Bag 返回以随机顺序包含Set中所有元素的 Sequence
Collect(OclExpression) count(Object) excluding(Object)
Including(Object) Intersection(Set)
17.3 OCL表达式
Sequence和Bag相似,也可以包含重复元 素,不过Sequence中的元素是有序的。 定义在Sequence上的操作见表17-8。
表17-8 : 定义在Sequence类型上的操作(1)
操作 asBag asSet Collect(OclExpression) count(Object) excluding(Object) Including(Object) append(Object) 说明 返回包含所有重复元素在内的所有 Sequence元素组成的Bag
返回对Set中每个成员应用此表达式得到的所 有元素组成的Bag 返回参数对象在Set中出现的次数 返回包含在Set中除参数对象以外所有元素的 Set
返回包含在Set中的所有元素以及参数对象的 Set 返回Set与参数Set的交集
Intersection(Bag)
返回Set与参数Bag的交集
表17-6 : 定义在Set类型上的操作(2)
Collect(OclExpression) count(Object) excluding(Object)
Including(Object) Intersection(Set)
返回对Bag中每个成员应用此表达式得到的 所有元素组成的Bag 返回参数对象在Bag中出现的次数 返回包含在Bag中除参数对象以外所有元素 的Bag
表17-4 : 集合类型
类型 值
Set
Bag Sequence
ห้องสมุดไป่ตู้
{1,5,4,2,3} //特点:不包括重复元素,无序的
{1,2,3,2,4} //特点:可以包括重复元素,无序的 {1,2,2,3,4} //特点:可以包括重复元素,有序的
1. Collection
Collection是OCL中所有集合的抽象的上级 类型。 定义在Collection上的操作见表17-5。
=
<>
3. Bag
Bag也是对象组,Bag和Set不同之处在于 Bag中可以包含重复元素。 定义在Bag上的操作见表17-7。
表17-7 : 定义在Bag类型上的操作(1)
操作 asSet asSequence 说明 返回Bag中移除所有重复元素后组成的Set 返回以随机顺序包含Bag中所有元素的 Sequence
表17-8 : 定义在Sequence类型上的操作(2)
操作 first 说明 返回Sequence中的第一个元素
last
at(Integer) prepend(Object) Reject(OclExpression) Select(OclExpression)
返回Sequence中的最后一个元素
表17-8 : 定义在Sequence类型上的操作(3)
操作 subSequence(Integer, Integer)
union(Sequence) =
说明 返回Sequence中由第一个参数指定的元 素到由第二个参数指定元素的子序列
返回Sequence和参数Sequence的联合 体,结果是Sequence类型
表17-1 : OclType的操作
操作 name attributes associationEnds opperation supertypes allsupertypes allinstances 说明 返回OclType类型的名称 返回OclType类型的属性名称的集合 返回OclType类型的可导航关联端的名称的集合 返回OclType类型的操作名称的集合 返回OclType类型的所有直接上级类型的值 返回OclType类型的所有上级类型的集合 返回OclType类型的实例以及所有子类型的实例的 集合
oclType
oclisKindOf oclisTypeOf oclAsType
返回OclType对象的类型
当指定的类型是OclType对象的子类型时,返回真 当指定的类型是OclType对象类型相同时,返回真 返回指定类型的对象实例
17.2.3 基本类型
OCL定义了很多基本类型,它的基本类型和 程序设计语言中的数据类型的含义类似。 OCL还在基本类型上定义了一些操作,这些 操作也与程序设计语言中的操作类似。 OCL的基本类型与操作见表17-3。
操作 说明
Reject(OclExpression)
Select(OclExpression) symmetricDifference(Set) union(Set) union(Bag)
返回Set中表达式为假的元素组成的Set
返回Set中表达式为真的元素组成的Set 返回包含在Set和参数Set中,但不是同时 包含在这两个Set中的元素组成的Set 返回Set和参数Set的联合体,结果是Set 类型 返回Set和参数Bag的联合体,结果是Bag 类型 当Set和参数Set包含相同的元素时,返回 真 当Set和参数Set不包含相同的元素时,返 回真
返回包含在Bag中的所有元素以及参数对象 的Bag 返回Bag与参数Set的交集
Intersection(Bag)
返回Bag与参数Bag的交集
表17-7 : 定义在Bag类型上的操作(2)
操作 Reject(OclExpression) 说明 返回Bag中表达式为假的元素组成的Bag
Select(OclExpression)