第11章对象约束语言面向对象分析与设计&UML211.1为什么需要OCL•为很好地表达所要建模的对象的一些相关细节,通常需要对模型中的元素增加一些约束。•OCL(objectconstraintlanguage)是一个形式化语言,采用OCL描述不会产生二义性问题。•OCL不像其他形式化语言那样复杂,容易掌握和使用。•在UML1.1中,OCL正式被接受。面向对象分析与设计&UML311.2OCL的特点OCL不是程序设计语言,它是纯说明性的语言。OCL必须遵循的一些原则:•OCL必须是一种语言,可以用来表达一些额外的但又是必需的信息;•OCL必须是精确的、无二义性的语言,同时又是很容易使用的语言;•OCL必须是声明性(declaraive)语言,也就是说OCL是没有副作用的纯表达式语言。对OCL表达式的计算不会改变系统的状态。•OCL是类型化(typed)语言。OCL可以表示一些用图形符号很难表示的细微意义。在UML中,OCL是说明类的不变量、前置条件、后置条件以及其他各种约束条件的标准语言。面向对象分析与设计&UML411.3OCL的构成基本类型及定义在其上的部分操作类型值操作BooleanTrue,Falseand,or,xor,not,implies,if-then-elseInteger1,-10,10001,…*,+,-,/,abs()Real3,14,-2.1*,+,-,/,floor()String‘Tobenornottobe…’toUpper(),concat()面向对象分析与设计&UML511.3OCL的构成OCL中操作符的优先级操作符说明@pre操作开始时刻的值.和->点和箭头Not和-“-”是负号运算*和/+和-“-”是二元的减法运算If–then–else–endif<,>,<=,>==,<>And,or,xorImplies是定义在布尔类型上的操作面向对象分析与设计&UML611.3OCL的构成OCL中的关键字andinvendifpackageelseattrletendpackagepostorcontextnotifpreIndefoperimpliesthenxorOCL中的注释以两个负号开头,如:--Thisisacomment.面向对象分析与设计&UML711.3OCL的构成–集合元素•Set:不包含重复元素,如Set{1,2,5,88},Set{‘apple’,‘orange’,‘strawberry’}•Bag:和Set类似,但Bag中可以有重复的元素,如Bag{1,3,4,3,5}•Sequence:和Bag类似,但Sequence中的元素是有序的,如Sequence{1,3,45,2,3},Sequence{‘ape’,’nut’}•Collection:是抽象数据类型,而Set、Bag、Sequence是Collection的3种具体子类型。•定义在Collection上的操作有:notEmpty,includes(object),union(setofobjects),intersection(setofobjects)面向对象分析与设计&UML811.3OCL的构成–元组•在OCL2.0版本中,增加了Tuple(元组)这种类型。•一个Tuple可以把几个不同类型的值...