第09章 对象约束语言OCL_第1页
第09章 对象约束语言OCL_第2页
第09章 对象约束语言OCL_第3页
第09章 对象约束语言OCL_第4页
第09章 对象约束语言OCL_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1239.1 为什么需要为什么需要OCL 1、OCL的必要性的必要性 对象约束语言对象约束语言(Object Constraint Language, OCL)作为作为图形符号的补充,说明建模元素的图形符号的补充,说明建模元素的有关细节有关细节,例如:约束,例如:约束,前置条件,后置条件等。前置条件,后置条件等。4 2、OCL的概念的概念 OCL(object constraint language) 对象约束语言。对象约束语言。用来进行约束定义的,用来进行约束定义的,形式化的无二义形式化的无二义的语言。的语言。 OCL于于1995年由年由Warmer等人,在等人,在IBM设计成设计成功,并开

2、始使用。功,并开始使用。 1997年年UML的的1.1版本正式采用版本正式采用OCL 2003年年1月推出月推出OCL1.4版本版本 OCL2.0版本正在征求意见版本正在征求意见5 声明性语言,不会改变模型中的内容。声明性语言,不会改变模型中的内容。 形式化语言语言。形式化语言语言。 无二义规范语言。无二义规范语言。 类型性语言,每一个表达式都有类型;类型性语言,每一个表达式都有类型; 易学好用。易学好用。9.2 OCL的原则的原则 69.3 OCL的构成的构成 OCL语言构成语言构成 OCL作为形式化语言作为形式化语言,基本语言要素包括基本语言要素包括: 类型类型(基本类型,高级类型基本类型

3、,高级类型) 操作操作 表达式表达式 语句语句7 1、OCL的基本类型的基本类型 OCL的基本类型包括整型的基本类型包括整型,实型实型,字符串型字符串型,布尔型布尔型.8 2、OCL在基本类型上的部分运算符在基本类型上的部分运算符 9解释解释: 整型整型 i1 + i2 加法加法,整型整型 (-,*) i1 / i2 除法除法,实型实型 i1.abs 取绝对值取绝对值, 整型整型 i1.max(i2) 取最大数取最大数, 整型整型 (mim) 10解释解释: 实型实型 i1 + i2 加法加法,实型实型 ( -, *, / ) i1.abs 取绝对值取绝对值,实型实型 r1.round 四舍五

4、入取整四舍五入取整, 整型整型 r1.floor 向下取整向下取整, 整型整型 11解释解释: 字符串型字符串型 s1.concat(s2) 连接连接,字符串字符串 s1.size 字符串长度字符串长度,整型整型 s1.toLower 转换成为小写字母转换成为小写字母,字符串字符串 s1.toUper 转换成为大写字母转换成为大写字母, 字符串字符串 s1.substring(i1,i2) 取子串取子串, 字符串字符串 s1 = s2 等于等于, 布尔型布尔型 12解释解释: 布尔型布尔型 b1 and b2 逻辑与逻辑与,布尔型布尔型( or, xor) not b1 逻辑非逻辑非, 布尔型

5、布尔型 b1 = b2 等于等于,布尔型布尔型 b1 b2 不等于不等于,布尔型布尔型 b1 implies b2 蕴涵蕴涵,布尔型布尔型 当当b1和和b2均为真均为真,或或b1为假时为假时,表达式为真表达式为真1 if b1 then else endif 分支判断分支判断 13 (5) 运算符的优先级别运算符的优先级别 14 3、OCL的表达式的表达式 表达式的含义表达式的含义 OCL的表达式由的表达式由操作数和运算符操作数和运算符按一定规则按一定规则构成。表达式和特定的构成。表达式和特定的上下文上下文有关,表达式具有有关,表达式具有确定的确定的值值。 1516 3、OCL的表达式的表达式

6、 表达式的上下文表达式的上下文 表达式的上下文表示这个表达式所表达式的上下文表示这个表达式所作用的范作用的范围围。可以是。可以是类,类的属性和操作类,类的属性和操作. context 订单订单 - 上下文为上下文为“订单订单”类类 context 订单订单.订单和订单和 -上下文为上下文为“订单订单”类类 的属性的属性“订单和订单和” context 订单订单.求税金求税金( ) -上下文为上下文为“订单订单” 类的操作求类的操作求“税金税金( )”17 表达式的不变量表达式的不变量 不变量由不变量由inv关键字规定。上下文表示这个表达式所关键字规定。上下文表示这个表达式所作用的范围。可以是类

7、作用的范围。可以是类,类的属性和操作类的属性和操作. context 订单订单 inv: -”订单订单”类中的所有对类中的所有对 订单和订单和 10 -象的象的”订单和订单和”都应该大于都应该大于10 context 订单订单 inv: -”订单订单”类的类的”酬金酬金”的求法的求法 酬金酬金= 0.01 * 订单和订单和 也可以也可以: context 订单订单 inv: -”订单订单”类的类的”酬金酬金”的求法的求法 self.酬金酬金 = 0.01 * self.订单和订单和18 表达式的不变量表达式的不变量 context 文章文章.可交付可交付(): Boolean pre: - p

8、ost: result = (可用性可用性 = #inStock) 表示表示“文章文章”的操作的操作“可交付可交付”的返回值是属的返回值是属性性 “可用性可用性”的当前值是否等于的当前值是否等于inStock context 订单订单.求税金求税金(): Real pre: - post: result = 订单和订单和 * 0.06519 蕴涵蕴涵 context 订单订单 inv 订单的文章订单的文章-size = 0 implies 订单和订单和 = 0 “订单的文章订单的文章”的数量如果等于的数量如果等于0,则则 “订单订单”的的“订单和订单和”也也必须必须等于等于0 分支分支 con

9、text 订单订单 inv 酬金酬金 = if (订单和订单和100) then 2.00 else (订单和订单和*0.02) endif 求求“订单订单”的的“酬金酬金”,如果订单和如果订单和 18 context 客户客户 inv 订单订单-size = 1 21 4、OCL的高级数据类型的高级数据类型 OCLOCL定义的高级数据类型有定义的高级数据类型有群群, ,集合集合, ,袋和序列袋和序列. .其中群是抽象数据类型其中群是抽象数据类型, ,集合集合, ,袋和序列是群的子集袋和序列是群的子集. . 集合集合(set):不包含重复元素不包含重复元素; 袋袋(Bag):允许包含重复元素允

10、许包含重复元素; 序列序列(Sequence):元素具有有序性的袋元素具有有序性的袋. 22群的操作群的操作(Collection) OCL定义的群的操作有下表中列出的操作定义的群的操作有下表中列出的操作.23 5、几个、几个OCL的例子的例子 例例1: contextcontext Person Person invinv: : Person.allInstances- Person.allInstances-forAllforAll(p1,p2|(p1,p2| p1p2 p1p2 impliesimplies ) ) 对类对类Pe

11、rsonPerson的所有对象实例的所有对象实例, ,要求它们的要求它们的名字必须唯一名字必须唯一. . 24 例例2: contextcontext Person Person invinv: : letlet income = alary-sum() income = alary-sum() inin ifif isUnemployed isUnemployed thenthen income 100 income = 100 income = 100 endifendif 对类对类PersonPerson的收入是工作薪水求和的收入是工作薪水求和, ,但有但有限定条件限定条件. . 25 例例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论