UML 对象约束语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UML图(例如类图)通常不够精细,无法提供与 规范有关的所有相关部分。这其中就缺少描述模 型中关于对象的附加约束。这些约束常常用自然 语言描述。而实践表明,这样做经常造成歧义。 为了写出无歧义的约束,已经开发出几种所谓的 “形式语言”。传统上的形式语言,缺点是仅适 合于有相当数学背景的人员,而普通商务或系统 建模者则难以使用。 OCL的出现解决了这一问题,它是一种保留了易 读易写特点的形式语言。OCL不仅用来写约束, 还能够用来对UML图中的任何元素写表达式。 每个OCL表达式都能指出系统中的一个值或者对 象。OCL表达式能够求出一个系统中的任何值或 者值的集合,因此它具有了和SQL同样的能力, 由此也可得知OCL既是约束语言,同时也是查询 语言。
2 标准OCL类型
OCL预定义的标准类型定义了一组基本类 型和集合类型。 OCL的基本类型有“Boolean”、 “Integer”、“Real”和“String”等,集 合类型包括“Collection”、“Set”、“Bag” 和“Sequence”等,这些标准类型是OCL表 达式的组成部分。
2.3 基本类型
OCL定义了很多基本类型,它的基本类型和 程序设计语言中的数据类型的含义类似。 OCL还在基本类型上定义了一些操作,这些 操作也与程序设计语言中的操作类似。 OCL的基本类型与操作见表3。
2.4 集合类型
除了基本类型以外,OCL还定义了一些较 为高级的标准OCL类型称为集合类型。
2.5 OCL中的关键字
与程序设计语言一样,OCL也定义了一些 关键字。 OCL中的关键字见表9。
3 OCL表达式
3.1 OCL表达式的语法 3.2 操作符的优先级
OCL表达式的特点
① OCL表达式可以附加在模型元素上。 ② OCL表达式可以附加在操作上。 ③ OCL表达式可以指定附加在模型元素上的 监护条件。 ④ OCL表达式的计算原则是从左到右 ⑤ OCL表达式既可以使用基本类型又可以使 用集合类型。
2 标准OCL类型
OCL标准类型的层次结构
2 标准OCL类型
2.1 2.2 2.3 2.4 2.5 OclType类型 OclAny类型 基本类型 集合类型 OCL中的关键字
2.1 OclType类型
OclType类型是OCL预定义的和在模型中 定义的类型,OclType允许访问模型的元 级别。 OclType的操作见表1。
ห้องสมุดไป่ตู้
5 示例
对于这个模型,提问
在某个时间间隔内,某个信用卡账户发生了哪
些交易? 去年这个机构处理的交易数量? 去年那些客户用各种信用卡资助了某商家? 某客户现在有多少个信用卡账户?
对于所有的帐户,客户最大借款额的总和是多
少?
UML合并了一门可以表达类似这些问题的 语言—对象约束语言(OCL)【Wamer99】
对象约束语言
1 2 3 4 对象约束语言概述 标准OCL类型 OCL表达式 用OCL表达对象性质约束
1 对象约束语言概述
对象约束语言(Object Constraint Language),简称OCL,是一种指示用户 建模系统中的限制方式。它是UML可选的 附加内容,可以用来更好地定义对象的行 为,并为任何类元指定约束。
2.2 OclAny类型
OclType类型是一个模型里所有类型的上 级类型。模型里所有的类都继承由OclAny 定义的特性。 OclAny的操作见表2。
OclVoid类型是与所有其他类型相一致的一种类型,它只 有一个叫OclUndefined的实例,应用于未定义类型的任 何特性调用,除了oclIsUndefined()返回“真”,其他都 会产生OclUndefined。 colIsUndefined(): Boolean 如果对象与OclUndefined 相同,那么oclIsUndefined()的计算结果为“真”。 OclAny类型是一个UML模型里所有类型和OCL标准库的 父类,它包括了诸多子类例如Real、Boolean、Sring、 OclState和Integer等,如图13-3所示。模型里所有的子 类都继承由OclAny定义的特性。下面是对所有OclAny中 操作的描述。 =(object:OclAny):Boolean 如果self与object是同一对 象,则返回值为“真”。 post:result = (self = object) <>(object:OclAny):Boolean 如果self是一个与object不 同的对象,则返回值为“真”。 pre:result = (self <> object)
前置条件指的是操作开始执行前必须为真 的条件,后置条件指的是操作成功结束执 行后必须为真的条件。 前置条件用保留字“pre”标识,后置条件 用保留字“post”标识。
4.3 let表达式与约束
let表达式附加在模型元素的属性上,它通 常用于定义约束中的一个变量。
5 示例-管理信用卡账户
7.使用消息
OCL支持对已有操作的访问,也就是说OCL可以 操作信号和调用信号,来发送消息。针对信号的 操作,OCL提供了三种机制: 第一种机制“^” “^”为hasBeenSent已经发送的 消息。该符号表示指定对象已经发送了指定的消 息。 第二种机制OclMessage OclMessage是一种容 器,用于容纳消息和提供对其特征的访问。 第三种机制“^^” 它是已发送符号“^”的增强形 式,允许访问已经发送消息的集合,所有的消息 被容纳在OclMessage中。
5.1 遍历类模型的OCL制品(I)
OCL可以在类模型中遍历制品
属性:语法是源对象加圆点加属性名。
aCreditCardAccount.maximunCredit 操作:源对象或对象集合加圆点加操作。即使没有参 数,操作后面必须跟着括号。以避免与属性发生混淆。 OCL中有一些特殊操作,可以作用于整个集合。集合 操作的语法是源对象集合加“->”加操作
集合是成组的对象或元素,可以用来作为 表达式计算过程中的结果。 集合类型除了抽象数据类型Collection以外, 还有Set(集)、Bag(袋)、 OrderedSet(有续集)和序列 (Sequence)等。
2.4 集合类型
1. 2. 3. 4. 5. Collection Set OrderedSet Bag Sequence
3.1 OCL表达式的语法
① ② ③ ④
OCL表达式的语法用扩展的巴斯科范式 (EBNF)定义,在EBNF中: “|”表示选择 “?”表示可选项 “*”表示零次或多次 “+”表示一次或多次
3.1 OCL表达式的语法
OCL基本表达式的语法用EBNF定义如下:
PrimaryExpression:=literalCollection | literal | pathName time Expression ? FeatureCallparameters? | “(“ expression ”)” | ifExpression Literal:=<string> | <number> | “#” <name> timeExpression:=”@”<name> featrueCallParameters:=”(”(declarator)?(actualParameterList)?”)” ifExpression :=”if” expression “then” expression “else” expression “endif”
1. Collection
Collection是OCL中所有集合的抽象的上级类 型。 定义在Collection上的操作见表5。
2. Set
Set是不包括重复元素的对象组,Set中的 元素是无序的。 定义在Set上的操作见表6。
3. OrderedSet
OrderedSet是不包括重复元素的对象组, OrderedSet中的元素是有序的。
在对象约束语言中,对象代表了系统的组 件,它定义了完善的项目,约束代表限制, 而语言并非是指一种正式的计算机语言。
1 对象约束语言概述
OCL是一种形式语言,可以应用于任何实 现方式的非正规语言。对象约束语言对 UML中图形或其他组件都没有控制权,它 只是在使用时返回值。OCL并不能修改对 象的状态,而是用来指示对状态的修改何 时发生。 OCL表达式以附加在模型元素上的条件和 限制来表现对该对象的约束,其中包括附 加在模型元素上的不变量或约束的表达式、 附加在操作和方法上的前置条件和后置条 件等。
3.2 操作符的优先级
OCL中的操作符有优先级顺序。 改变操作符的优先顺序可以使用括号。
4 用OCL表达对象性质约束
所谓对象性质,就是指一个对象的属性、 操作等对象有关的特性,在建模中具体是 指定义的模型元素的特性。 OCL表达式可以表达对模型元素性质的约 束,常见的使用情况有三种:不变量、前 置条件与后置条件和let表达式。
8. 元组(Tuple)
元组是对一组数据元素,如文件中的一个记录或 数据库中的一行等内容的定义,每个元素被赋予 名称和类型。元组可以使用字符或基于表达式的 赋值来创建。在OCL中,元组是使用被花括号包 围的一系列“名称-类型”对和可选值来定义的, 其定义形式如下所示: Tuple{name:String= 'Jim',age:Integer=23} 元组只是将一组值集合在一起的一种途径,然后 元组必须被赋予一个变量。以下表达式使用def 表达式来创建一个代理类元上下文内叫sales的新 属性。
为了便于操作集合,OCL加定义了一些操作,这里只给出 一些常用且重要的操作来示例,更多具体的操作会在OCL 的标准库中介绍。操作如下所示: select 按照一定的规则选择选取符合规则的项,组成一 个新的集合。 reject 从集合中选择不满足规则的项,组成一个新的集 合。 forAll 指定一个应用于集合中每个元素的约束。 exists 确定某个值是否存在于集合中的至少一个或多个 成员中。 isEmpty 操作判断集合中是否有元素。 count 判断集合中等于count参数的元素个数,并返回该 数值。 iterate 访问集合中的每个成员,对每个元素进行查询和 计算。
OCL的产生
OCL的产生是为了解决约束表达的问题。 OCL最初由IBM公司设计成功。 OCL已经为标准化组织OMG所接受,成为 了UML标准的一部分。 OCL语言虽然是一种形式化语言,但是它 既具有形式化语言无二义性的特点,又消 除了形式化语言的复杂性。
OCL的特点
① OCL是一种精确的、无二义性的语言,易于使 用和掌握。 ② OCL是一种规范说明性语言,所有有关实现的 问题都不能用OCL来表达。 ③ OCL是一种纯表达式语言,它是具有没有任何 副作用的声明性语言。对OCL表达式的计算将 返回一个值,计算不会改变系统的状态。 ④ OCL是一种类型化语言,即OCL中的每个表达式 都是具有类型的。 ⑤ OCL不是一种程序设计语言,不能用OCL编写程 序逻辑和控制流程。
4 用OCL表达对象性质约束
4.1 不变量 4.2 前置条件和后置条件 4.3 let表达式与约束
4.1 不变量
不变量常用于附加在模型元素上,它规定 的约束条件通常需要该模型元素的所有实 例都满足。
4.2 前置条件和后置条件
OCL表达式附加在操作上可以规定一个前 置条件或后置条件。
4. Bag
Bag也是对象组,Bag和Set不同之处在于 Bag中可以包含重复元素。 定义在Bag上的操作见表7。
5. Sequence
Sequence和Bag相似,也可以包含重复元 素,不过Sequence中的元素是有序的。 定义在Sequence上的操作见表8。
6. Collection上的操作