对象约束语言精品PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1wk.baidu.com
本章学习要点:
• 了解OCL的概念 • 理解OCL的结构 • 掌握OCL语法 • 掌握三种固化类型 • 掌握OCL数据类型和运算符 • 掌握let和def的功能和作用 • 理解集合类型 • 掌握并应用对集合操作 • 熟悉OCL标准库
2
13.1 OCL概述
•
UML图(例如类图)通常不够精细,无法提供与规范有
• OCL要求清楚地区分OCL抽象语法和其他自抽象语 法派生的所有具体语法。抽象语法还支持其他约束 语言的发展。正如基于MOF(Meta Object Facility ,元对象设施标准)的UML基础结构元模型支持各 种专业领域的建模,例如软件建模的UML语言,数 据仓库领域建模的CWM语言等。
5
13.2.2 具体语法
关的所有相关部分。这其中就缺少描述模型中关于对象的附
加约束。这些约束常常用自然语言描述。而实践表明,这样
做经常造成歧义。为了写出无歧义的约束,已经开发出几种
所谓的“形式语言”。传统上的形式语言,缺点是仅适合于
有相当数学背景的人员,而普通商务或系统建模者则难以使
用。
•
OCL的出现解决了这一问题,它是一种保留了易读易写
第13章 对象约束语言
对象约束语言(Object Constraint Language ),简称OCL,是一种指示用户建模系统中的限制 方式。它是UML可选的附加内容,可以用来更好地 定义对象的行为,并为任何类元指定约束。
在对象约束语言中,对象代表了系统的组件, 它定义了完善的项目,约束代表限制,而语言并非 是指一种正式的计算机语言。OCL是一种形式语言 ,可以应用于任何实现方式的非正规语言。对象约 束语言对UML中图形或其他组件都没有控制权,它 只是在使用时返回值。OCL并不能修改对象的状态 ,而是用来指示对状态的修改何时发生。
st)?")" • ifExpression:="if" expression "then" expression "else"
expression "endif"
7
13.4 OCL语法
OCL指定了每一个约束都必须有 一个上下文。上下文(context)指定了 哪一个项目被约束。OCL是一个类型化 的语言,因此数据类型扮演了重要角色 ,如高级语言C++、Java一样,也有多 种数据类型。
• pre-condition
• post-condition
9
13.3.2 数据类型、运算符和操作
• 对象约束语言是类型化语言,具有四种数据类型分别是: • 整数(Integer) 可以是任何不带小数部分的值,如0,-1
,1等。 • 实数(Real) 可以是任何数字,可以带有小数。如,3.0
• 与面向规则的语法相反,具体语法(即模型层语法)描述代表现实 世界中一些实体的类,它应用抽象语法的规则来创建可以在运行时 段计算的表达式。OCL表达式与类元相关联,应用于该类元自身或 者某个属性、操作或参数。不论哪种情况,约束都是根据其位移( replacement)、上下文类元(contextual classifier)和OCL表达式 的自身实例(self instance)来定义。
4
13.2.1 抽象语法
• 抽象语法指的是OCL语言定义的概念层,在该层中 抽象语法解释了类、操作等内容的元模型。例如, 类被定义为“具有相同的特征、约束和语义说明的 一组对象”,并在该层将类解释为可与任何数目的 特性(或属性)、操作、关系甚至嵌入类相关联。 抽象语法只是定义了相类似的元模型,并没有创建 一个具体的模型或对象。
特点的形式语言。OCL不仅用来写约束,还能够用来对UML
图中的任何元素写表达式。每个OCL表达式都能指出系统中
的一个值或者对象。OCL表达式能够求出一个系统中的任何
值或者值的集合,因此它具有了和SQL同样的能力,由此也
可得知OCL既是约束语言,同时也是查询语言。
3
13.2 OCL结构
• OCL在两个层次上共同定义对象 约束语言,一个是抽象语法(元模型 ),另一个是具体语法。元模型定义 OCL概念和应用该概念的规则,具体 语法则真正用于在UML模型中指定约 束和进行查询。
8
13.3.1 固化类型
• 一个约束就是对一个(或部分)面向对象 模型或者系统的一个或者一些值的限制。 UML类图中的所有值都可以使用OCL来约 束。约束的应用类似于表达式,在OCL中 编写的约束上下文可以是一个类或一个操 作。其中需要指定约束的固化类型,而约 束的固化类型可以由以下三项组成:
• invariant
• PrimaryExpression:=literalCollection | literal • | pathName time Expression ? FeatureCallparameters? • |"("expression")" | ifExpression • Literal:=<string>|<number>|"#"<name> • timeExpression:="@"<name> • featureCallparameters:="("(declarator)?(actualParameterLi
• 自身实例 自身实例是对计算该表达式对象的引用,它总是上下文类 元的一个实例。也就是说,OCL表达式对该上下文类元每个实例的 计算结果可能不同。因此,OCL可以用于计算测试数据。使用如下所示
的方法为表定义主键。
6
13.3 OCL表达式
• OCL表达式用于一个OCL类型的求值,它的语法用扩展的巴 斯科范式(EBNF)定义。在EBNF中,“|”表示选择,“? ”表示可选项,“*”表示零次或多次,“+”表示一次或多 次。OCL基本表达式的语法用EBNF定义如下:
• 位移 表示UML模型中使用OCL表达式所处的位置,即作为依附于某 个类元的不变式、依附于某个操作的前置条件或依附于某个参数的 默认值。
• 上下文类元 定义在其中计算表达式的名字空间。如,前置条件的上 下文类元是在其中定义该前置条件的操作所归属的那个类。也就是 说该类中所有模型元素(属性、关联和操作)都可以在OCL表达式 中被引用。
本章学习要点:
• 了解OCL的概念 • 理解OCL的结构 • 掌握OCL语法 • 掌握三种固化类型 • 掌握OCL数据类型和运算符 • 掌握let和def的功能和作用 • 理解集合类型 • 掌握并应用对集合操作 • 熟悉OCL标准库
2
13.1 OCL概述
•
UML图(例如类图)通常不够精细,无法提供与规范有
• OCL要求清楚地区分OCL抽象语法和其他自抽象语 法派生的所有具体语法。抽象语法还支持其他约束 语言的发展。正如基于MOF(Meta Object Facility ,元对象设施标准)的UML基础结构元模型支持各 种专业领域的建模,例如软件建模的UML语言,数 据仓库领域建模的CWM语言等。
5
13.2.2 具体语法
关的所有相关部分。这其中就缺少描述模型中关于对象的附
加约束。这些约束常常用自然语言描述。而实践表明,这样
做经常造成歧义。为了写出无歧义的约束,已经开发出几种
所谓的“形式语言”。传统上的形式语言,缺点是仅适合于
有相当数学背景的人员,而普通商务或系统建模者则难以使
用。
•
OCL的出现解决了这一问题,它是一种保留了易读易写
第13章 对象约束语言
对象约束语言(Object Constraint Language ),简称OCL,是一种指示用户建模系统中的限制 方式。它是UML可选的附加内容,可以用来更好地 定义对象的行为,并为任何类元指定约束。
在对象约束语言中,对象代表了系统的组件, 它定义了完善的项目,约束代表限制,而语言并非 是指一种正式的计算机语言。OCL是一种形式语言 ,可以应用于任何实现方式的非正规语言。对象约 束语言对UML中图形或其他组件都没有控制权,它 只是在使用时返回值。OCL并不能修改对象的状态 ,而是用来指示对状态的修改何时发生。
st)?")" • ifExpression:="if" expression "then" expression "else"
expression "endif"
7
13.4 OCL语法
OCL指定了每一个约束都必须有 一个上下文。上下文(context)指定了 哪一个项目被约束。OCL是一个类型化 的语言,因此数据类型扮演了重要角色 ,如高级语言C++、Java一样,也有多 种数据类型。
• pre-condition
• post-condition
9
13.3.2 数据类型、运算符和操作
• 对象约束语言是类型化语言,具有四种数据类型分别是: • 整数(Integer) 可以是任何不带小数部分的值,如0,-1
,1等。 • 实数(Real) 可以是任何数字,可以带有小数。如,3.0
• 与面向规则的语法相反,具体语法(即模型层语法)描述代表现实 世界中一些实体的类,它应用抽象语法的规则来创建可以在运行时 段计算的表达式。OCL表达式与类元相关联,应用于该类元自身或 者某个属性、操作或参数。不论哪种情况,约束都是根据其位移( replacement)、上下文类元(contextual classifier)和OCL表达式 的自身实例(self instance)来定义。
4
13.2.1 抽象语法
• 抽象语法指的是OCL语言定义的概念层,在该层中 抽象语法解释了类、操作等内容的元模型。例如, 类被定义为“具有相同的特征、约束和语义说明的 一组对象”,并在该层将类解释为可与任何数目的 特性(或属性)、操作、关系甚至嵌入类相关联。 抽象语法只是定义了相类似的元模型,并没有创建 一个具体的模型或对象。
特点的形式语言。OCL不仅用来写约束,还能够用来对UML
图中的任何元素写表达式。每个OCL表达式都能指出系统中
的一个值或者对象。OCL表达式能够求出一个系统中的任何
值或者值的集合,因此它具有了和SQL同样的能力,由此也
可得知OCL既是约束语言,同时也是查询语言。
3
13.2 OCL结构
• OCL在两个层次上共同定义对象 约束语言,一个是抽象语法(元模型 ),另一个是具体语法。元模型定义 OCL概念和应用该概念的规则,具体 语法则真正用于在UML模型中指定约 束和进行查询。
8
13.3.1 固化类型
• 一个约束就是对一个(或部分)面向对象 模型或者系统的一个或者一些值的限制。 UML类图中的所有值都可以使用OCL来约 束。约束的应用类似于表达式,在OCL中 编写的约束上下文可以是一个类或一个操 作。其中需要指定约束的固化类型,而约 束的固化类型可以由以下三项组成:
• invariant
• PrimaryExpression:=literalCollection | literal • | pathName time Expression ? FeatureCallparameters? • |"("expression")" | ifExpression • Literal:=<string>|<number>|"#"<name> • timeExpression:="@"<name> • featureCallparameters:="("(declarator)?(actualParameterLi
• 自身实例 自身实例是对计算该表达式对象的引用,它总是上下文类 元的一个实例。也就是说,OCL表达式对该上下文类元每个实例的 计算结果可能不同。因此,OCL可以用于计算测试数据。使用如下所示
的方法为表定义主键。
6
13.3 OCL表达式
• OCL表达式用于一个OCL类型的求值,它的语法用扩展的巴 斯科范式(EBNF)定义。在EBNF中,“|”表示选择,“? ”表示可选项,“*”表示零次或多次,“+”表示一次或多 次。OCL基本表达式的语法用EBNF定义如下:
• 位移 表示UML模型中使用OCL表达式所处的位置,即作为依附于某 个类元的不变式、依附于某个操作的前置条件或依附于某个参数的 默认值。
• 上下文类元 定义在其中计算表达式的名字空间。如,前置条件的上 下文类元是在其中定义该前置条件的操作所归属的那个类。也就是 说该类中所有模型元素(属性、关联和操作)都可以在OCL表达式 中被引用。