27
第 17 第 第第第第第第 17.1 第第第第第第第第 17.2 第第 OCL 第第 17.3 OCL 第第第 17.4 第 OCL 第第第第第第第第

第 17 章 对象约束语言

  • Upload
    trinh

  • View
    153

  • Download
    0

Embed Size (px)

DESCRIPTION

第 17 章 对象约束语言 . 17.1 对象约束语言概述 17.2 标准 OCL 类型 17.3 OCL 表达式 17.4 用 OCL 表达对象性质约束. 17.1 对象约束语言概述. 对象约束语言简称 OCL ( Object Constraint Language ),它是一种用于施加在指定的模型元素上约束的语言。 OCL 表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式、附加在操作和方法上的前置条件和后置条件等。 . OCL 的产生. OCL 的产生是为了解决约束表达的问题。 - PowerPoint PPT Presentation

Citation preview

第 17 章 对象约束语言 17.1 对象约束语言概述17.2 标准 OCL 类型17.3 OCL 表达式17.4 用 OCL 表达对象性质约束

17.1 对象约束语言概述 对象约束语言简称 OCL ( Object Constrai

nt Language ),它是一种用于施加在指定的模型元素上约束的语言。 OCL 表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式、附加在操作和方法上的前置条件和后置条件等。

OCL 的产生 OCL 的产生是为了解决约束表达的问题。 OCL 最初由 IBM 公司设计成功。 OCL 已经为标准化组织 OMG 所接受,成为了 UML 标准的一部分。 OCL 语言虽然是一种形式化语言,但是它既具有形式化语言无二义性的特点,又消除了形式化语言的复杂性。

OCL 的特点① OCL 是一种精确的、无二义性的语言,易于使用和掌握。② OCL 是一种规范说明性语言,所有有关实现的问题都不能用 OCL 来表达。③ OCL 是一种纯表达式语言,它是具有没有任何副作用的声明性语言。对 OCL 表达式的计算将返回一个值,计算不会改变系统的状态。④ OCL 是一种类型化语言,即 OCL 中的每个表达式都是具有类型的。⑤ OCL 不是一种程序设计语言,不能用 OCL 编写程序逻辑和控制流程。

17.2 标准 OCL 类型 OCL 预定义的标准类型定义了一组基本类型和集合类型。 OCL 的基本类型有“ Boolean” 、“ Integ

er” 、“ Real” 和“ String” 等,集合类型包括“ Collection” 、“ Set” 、“ Bag” 和“ Sequence” 等,这些标准类型是 OCL表达式的组成部分。

17.2 标准 OCL 类型 OCL 标准类型的层次结构

17.2 标准 OCL 类型 17.2.1 OclType 类型 17.2.2 OclAny 类型 17.2.3 基本类型 17.2.4 集合类型 17.2.5 OCL 中的关键字

17.2.1 OclType 类型 OclType 类型是 OCL 预定义的和在模型中定义的类型, OclType 允许访问模型的元级别。 OclType 的操作见表 17-1 。

7.2.2 OclAny 类型 OclType 类型是一个模型里所有类型的上级类型。模型里所有的类都继承由 OclAny定义的特性。 OclAny 的操作见表 17-2 。

17.2.3 基本类型 OCL 定义了很多基本类型,它的基本类型和程序设计语言中的数据类型的含义类似。 OCL 还在基本类型上定义了一些操作,这些操作也与程序设计语言中的操作类似。 OCL 的基本类型与操作见表 17-3 。

17.2.4 集合类型 除了基本类型以外, OCL 还定义了一些较为高级的标准 OCL 类型称为集合类型。 集合是成组的对象或元素,可以用来作为表达式计算过程中的结果。 集合类型除了抽象数据类型 Collection 以外,还有 Set (集)、 Bag (袋)和序列( Sequence )等。

17.2.4 集合类型 1. Collection 2. Set 3. Bag 4. Sequence

1. Collection

Collection 是 OCL 中所有集合的抽象的上级类型。 定义在 Collection 上的操作见表 17-5 。

2. Set

Set 是不包括重复元素的对象组, Set 中的元素是无序的。 定义在 Set 上的操作见表 17-6 。

3. Bag

Bag 也是对象组, Bag 和 Set 不同之处在于 Bag 中可以包含重复元素。 定义在 Bag 上的操作见表 17-7 。

4. Sequence

Sequence 和 Bag 相似,也可以包含重复元素,不过 Sequence 中的元素是有序的。 定义在 Sequence 上的操作见表 17-8 。

17.2.5 OCL 中的关键字 与程序设计语言一样, OCL 也定义了一些关键字。 OCL 中的关键字见表 17-9 。

17.3 OCL 表达式 17.3.1 OCL 表达式的语法 17.3.2 操作符的优先级

OCL 表达式的特点① OCL 表达式可以附加在模型元素上。② OCL 表达式可以附加在操作上。③ OCL 表达式可以指定附加在模型元素上的监护条件。④ OCL 表达式的计算原则是从左到右⑤ OCL 表达式既可以使用基本类型又可以使用集合类型。

17.3.1 OCL 表达式的语法 OCL 表达式的语法用扩展的巴斯科范式( EBNF )定义,在 EBNF 中:① “|” 表示选择② “ ?”表示可选项③ “*” 表示零次或多次④ “ +”表示一次或多次

17.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”

17.3.2 操作符的优先级 OCL 中的操作符有优先级顺序。 操作符的优先级从高到低见表 17-10 。 改变操作符的优先顺序可以使用括号。

17.4 用 OCL 表达对象性质约束 所谓对象性质,就是指一个对象的属性、操作等对象有关的特性,在建模中具体是指定义的模型元素的特性。 OCL 表达式可以表达对模型元素性质的约束,常见的使用情况有三种:不变量、前置条件与后置条件和 let 表达式。

17.4 用 OCL 表达对象性质约束 17.4.1 不变量 17.4.2 前置条件和后置条件 17.4.3 let 表达式与约束

17.4.1 不变量 不变量常用于附加在模型元素上,它规定的约束条件通常需要该模型元素的所有实例都满足。

17.4.2 前置条件和后置条件 OCL 表达式附加在操作上可以规定一个前置条件或后置条件。 前置条件指的是操作开始执行前必须为真的条件,后置条件指的是操作成功结束执行后必须为真的条件。 前置条件用保留字“ pre” 标识,后置条件用保留字“ post” 标识。

17.4.3 let 表达式与约束 let 表达式附加在模型元素的属性上,它通常用于定义约束中的一个变量。