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