第09章 对象约束语言OCL
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类 的属性“订单和” context 订单.求税金( ) --上下文为“订单”
-- 上下文为“订单”类
context 订单.订单和 --上下文为“订单”
类的操作求“税金(16)”
● 表达式的不变量
不变量由inv关键字规定。上下文表示这个表达式所 作用的范围。可以是类,类的属性和操作. context 订单 inv: --”订单”类中的所有对
6
1、OCL的基本类型
OCL的基本类型包括整型,实型,字符串型, 布尔型.
7
2、OCL在基本类型上的部分运算符
8
解释: ⑴整型
i1 + i2 加法,整型 (-,*) i1 / i2 除法,实型 i1.abs 取绝对值, 整型
i1.max(i2) 取最大数, 整型 (mim)
9
解释:
⑵ 实型
i1 + i2 加法,实型 ( -, *, / ) i1.abs 取绝对值,实型
9.1 为什么需要OCL 9.2 OCL的特点 9.3 OCL的构成 9.4 OCL的几个例子
26
11
解释:
⑷ 布尔型
b1 and b2 逻辑与,布尔型( or, xor) not b1 逻辑非, 布尔型 b1 = b2 等于,布尔型
b1 <> b2 不等于,布尔型
b1 implies b2 蕴涵,布尔型 当b1和b2均为真,或b1为假时,表达式为真1
if b1 then <expr1> else <expr2> endif 分支判断
● OCL2.0版本正在征求意见
4
9.2 OCL的原则
● 声明性语言,不会改变模型中的内容。
● 形式化语言语言。
● 无二义规范语言。 ● 类型性语言,每一个表达式都有类型; ● 易学好用。
5
9.3 OCL的构成
OCL语言构成
OCL作为形式化语言,基本语言要素包括: 类型(基本类型,高级类型) 操作 表达式 语句
袋(Bag):允许包含重复元素;
序列(Sequence):元素具有有序性的袋.
21
群的操作(Collection)
OCL定义的群的操作有下表中列wk.baidu.com的操作.
22
5、几个OCL的例子 例1:
context Person inv:
Person.allInstances->forAll(p1,p2|
p1<>p2 implies p1.name <> p2.name)
3
2、OCL的概念
OCL(object constraint language) 对象约束语言。 用来进行约束定义的,形式化的无二义的语言。
● OCL于1995年由Warmer等人,在IBM设计成
功,并开始使用。
● 1997年UML的1.1版本正式采用OCL ● 2003年1月推出OCL1.4版本
例3:
context Company :: hireEmployee(p : Person)
pre: not employee->includes(p)
post: employee->includes(p)
该例中定义了操作的前置条件和后置条件, 表明了操作前后必须满足的条件。
25
● 小结
第9章 OCL
订单和 > 10 --象的”订单和”都应该大于10 context 订单 inv: --”订单”类的”酬金”的求法 酬金= 0.01 * 订单和 也可以: context 订单 inv: --”订单”类的”酬金”的求法
17
self.酬金 = 0.01 * self.订单和
● 表达式的不变量
context 文章.可交付(): Boolean
对类Person的所有对象实例,要求它们的 名字必须唯一.
23
例2:
context Person inv:
let income = self.jobsalary->sum() in
if isUnemployed then
income < 100
else
income >= 100 endif
对类Person的收入是工作薪水求和,但有 限定条件. 24
第 章
9
对象约束语言OCL
9 对象约束语言
9.1 为什么需要OCL 9.2 OCL的特点 9.3 OCL的构成
9.4 OCL的使用实例
2
9.1 为什么需要OCL
1、OCL的必要性
对象约束语言(Object Constraint Language, OCL)作为 图形符号的补充,说明建模元素的有关细节,例如:约束, 前置条件,后置条件等。
r1.round 四舍五入取整, 整型
r1.floor 向下取整, 整型
10
解释:
⑶ 字符串型
s1.concat(s2) 连接,字符串 s1.size 字符串长度,整型 s1.toLower 转换成为小写字母,字符串
s1.toUper 转换成为大写字母, 字符串
s1.substring(i1,i2) 取子串, 字符串 s1 = s2 等于, 布尔型
pre: --
post: result = (可用性 = #inStock)
表示“文章”的操作“可交付”的返回值是属
性
“可用性”的当前值是否等于inStock context 订单.求税金(): Real pre: --
post: result = 订单和 * 0.065
18
● 蕴涵
context 订单 inv
12
(5) 运算符的优先级别
优先级决定了操作顺序; 优先级从上到下,改变顺序用括号 。
13
3、OCL的表达式
⑴ 表达式的含义
OCL的表达式由操作数和运算符按一定规则 构成。表达式和特定的上下文有关,表达式具有 确定的值。
14
15
3、OCL的表达式
● 表达式的上下文
表达式的上下文表示这个表达式所作用的范 围。可以是类,类的属性和操作. context 订单
订单的文章->size = 0 implies 订单和 = 0
“订单的文章”的数量如果等于0,则 “订单”的 “订单和”也必须等于0
● 分支
context 订单 inv 酬金 = if (订单和<100) then 2.00 else (订单和 *0.02) endif 求“订单”的“酬金”,如果订单和<100,酬金为 19 2,否则为订单和的百分之二。
● 导航
OCL可以从初始的上下文导航到与它有关系的 其它类。这些类与初始的类有关联或组合关系.
context 订单 inv
订单客户.age > 18 context 客户 inv
订单->size >= 1
20
4、OCL的高级数据类型
OCL定义的高级数据类型有群,集合,袋和序列. 其中群是抽象数据类型,集合,袋和序列是群的子集. 集合(set):不包含重复元素;
-- 上下文为“订单”类
context 订单.订单和 --上下文为“订单”
类的操作求“税金(16)”
● 表达式的不变量
不变量由inv关键字规定。上下文表示这个表达式所 作用的范围。可以是类,类的属性和操作. context 订单 inv: --”订单”类中的所有对
6
1、OCL的基本类型
OCL的基本类型包括整型,实型,字符串型, 布尔型.
7
2、OCL在基本类型上的部分运算符
8
解释: ⑴整型
i1 + i2 加法,整型 (-,*) i1 / i2 除法,实型 i1.abs 取绝对值, 整型
i1.max(i2) 取最大数, 整型 (mim)
9
解释:
⑵ 实型
i1 + i2 加法,实型 ( -, *, / ) i1.abs 取绝对值,实型
9.1 为什么需要OCL 9.2 OCL的特点 9.3 OCL的构成 9.4 OCL的几个例子
26
11
解释:
⑷ 布尔型
b1 and b2 逻辑与,布尔型( or, xor) not b1 逻辑非, 布尔型 b1 = b2 等于,布尔型
b1 <> b2 不等于,布尔型
b1 implies b2 蕴涵,布尔型 当b1和b2均为真,或b1为假时,表达式为真1
if b1 then <expr1> else <expr2> endif 分支判断
● OCL2.0版本正在征求意见
4
9.2 OCL的原则
● 声明性语言,不会改变模型中的内容。
● 形式化语言语言。
● 无二义规范语言。 ● 类型性语言,每一个表达式都有类型; ● 易学好用。
5
9.3 OCL的构成
OCL语言构成
OCL作为形式化语言,基本语言要素包括: 类型(基本类型,高级类型) 操作 表达式 语句
袋(Bag):允许包含重复元素;
序列(Sequence):元素具有有序性的袋.
21
群的操作(Collection)
OCL定义的群的操作有下表中列wk.baidu.com的操作.
22
5、几个OCL的例子 例1:
context Person inv:
Person.allInstances->forAll(p1,p2|
p1<>p2 implies p1.name <> p2.name)
3
2、OCL的概念
OCL(object constraint language) 对象约束语言。 用来进行约束定义的,形式化的无二义的语言。
● OCL于1995年由Warmer等人,在IBM设计成
功,并开始使用。
● 1997年UML的1.1版本正式采用OCL ● 2003年1月推出OCL1.4版本
例3:
context Company :: hireEmployee(p : Person)
pre: not employee->includes(p)
post: employee->includes(p)
该例中定义了操作的前置条件和后置条件, 表明了操作前后必须满足的条件。
25
● 小结
第9章 OCL
订单和 > 10 --象的”订单和”都应该大于10 context 订单 inv: --”订单”类的”酬金”的求法 酬金= 0.01 * 订单和 也可以: context 订单 inv: --”订单”类的”酬金”的求法
17
self.酬金 = 0.01 * self.订单和
● 表达式的不变量
context 文章.可交付(): Boolean
对类Person的所有对象实例,要求它们的 名字必须唯一.
23
例2:
context Person inv:
let income = self.jobsalary->sum() in
if isUnemployed then
income < 100
else
income >= 100 endif
对类Person的收入是工作薪水求和,但有 限定条件. 24
第 章
9
对象约束语言OCL
9 对象约束语言
9.1 为什么需要OCL 9.2 OCL的特点 9.3 OCL的构成
9.4 OCL的使用实例
2
9.1 为什么需要OCL
1、OCL的必要性
对象约束语言(Object Constraint Language, OCL)作为 图形符号的补充,说明建模元素的有关细节,例如:约束, 前置条件,后置条件等。
r1.round 四舍五入取整, 整型
r1.floor 向下取整, 整型
10
解释:
⑶ 字符串型
s1.concat(s2) 连接,字符串 s1.size 字符串长度,整型 s1.toLower 转换成为小写字母,字符串
s1.toUper 转换成为大写字母, 字符串
s1.substring(i1,i2) 取子串, 字符串 s1 = s2 等于, 布尔型
pre: --
post: result = (可用性 = #inStock)
表示“文章”的操作“可交付”的返回值是属
性
“可用性”的当前值是否等于inStock context 订单.求税金(): Real pre: --
post: result = 订单和 * 0.065
18
● 蕴涵
context 订单 inv
12
(5) 运算符的优先级别
优先级决定了操作顺序; 优先级从上到下,改变顺序用括号 。
13
3、OCL的表达式
⑴ 表达式的含义
OCL的表达式由操作数和运算符按一定规则 构成。表达式和特定的上下文有关,表达式具有 确定的值。
14
15
3、OCL的表达式
● 表达式的上下文
表达式的上下文表示这个表达式所作用的范 围。可以是类,类的属性和操作. context 订单
订单的文章->size = 0 implies 订单和 = 0
“订单的文章”的数量如果等于0,则 “订单”的 “订单和”也必须等于0
● 分支
context 订单 inv 酬金 = if (订单和<100) then 2.00 else (订单和 *0.02) endif 求“订单”的“酬金”,如果订单和<100,酬金为 19 2,否则为订单和的百分之二。
● 导航
OCL可以从初始的上下文导航到与它有关系的 其它类。这些类与初始的类有关联或组合关系.
context 订单 inv
订单客户.age > 18 context 客户 inv
订单->size >= 1
20
4、OCL的高级数据类型
OCL定义的高级数据类型有群,集合,袋和序列. 其中群是抽象数据类型,集合,袋和序列是群的子集. 集合(set):不包含重复元素;