欢迎来到天天文库
浏览记录
ID:52888153
大小:491.50 KB
页数:24页
时间:2020-04-14
《对象约束语言.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1第13章对象约束语言对象约束语言(ObjectConstraintLanguage),简称OCL,是一种指示用户建模系统中的限制方式。它是UML可选的附加内容,可以用来更好地定义对象的行为,并为任何类元指定约束。在对象约束语言中,对象代表了系统的组件,它定义了完善的项目,约束代表限制,而语言并非是指一种正式的计算机语言。OCL是一种形式语言,可以应用于任何实现方式的非正规语言。对象约束语言对UML中图形或其他组件都没有控制权,它只是在使用时返回值。OCL并不能修改对象的状态,而是用来指示对状态的修改何时发生。2本章学习要点:了解OCL的概念理解OCL的结构掌握OCL语法掌握三种
2、固化类型掌握OCL数据类型和运算符掌握let和def的功能和作用理解集合类型掌握并应用对集合操作熟悉OCL标准库313.1OCL概述UML图(例如类图)通常不够精细,无法提供与规范有关的所有相关部分。这其中就缺少描述模型中关于对象的附加约束。这些约束常常用自然语言描述。而实践表明,这样做经常造成歧义。为了写出无歧义的约束,已经开发出几种所谓的“形式语言”。传统上的形式语言,缺点是仅适合于有相当数学背景的人员,而普通商务或系统建模者则难以使用。OCL的出现解决了这一问题,它是一种保留了易读易写特点的形式语言。OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL
3、表达式都能指出系统中的一个值或者对象。OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,由此也可得知OCL既是约束语言,同时也是查询语言。413.2OCL结构OCL在两个层次上共同定义对象约束语言,一个是抽象语法(元模型),另一个是具体语法。元模型定义OCL概念和应用该概念的规则,具体语法则真正用于在UML模型中指定约束和进行查询。13.2.1抽象语法抽象语法指的是OCL语言定义的概念层,在该层中抽象语法解释了类、操作等内容的元模型。例如,类被定义为“具有相同的特征、约束和语义说明的一组对象”,并在该层将类解释为可与任何数目的特性(或属性)、操作
4、、关系甚至嵌入类相关联。抽象语法只是定义了相类似的元模型,并没有创建一个具体的模型或对象。OCL要求清楚地区分OCL抽象语法和其他自抽象语法派生的所有具体语法。抽象语法还支持其他约束语言的发展。正如基于MOF(MetaObjectFacility,元对象设施标准)的UML基础结构元模型支持各种专业领域的建模,例如软件建模的UML语言,数据仓库领域建模的CWM语言等。513.2.2具体语法与面向规则的语法相反,具体语法(即模型层语法)描述代表现实世界中一些实体的类,它应用抽象语法的规则来创建可以在运行时段计算的表达式。OCL表达式与类元相关联,应用于该类元自身或者某个属性、操作或参
5、数。不论哪种情况,约束都是根据其位移(replacement)、上下文类元(contextualclassifier)和OCL表达式的自身实例(selfinstance)来定义。位移表示UML模型中使用OCL表达式所处的位置,即作为依附于某个类元的不变式、依附于某个操作的前置条件或依附于某个参数的默认值。上下文类元定义在其中计算表达式的名字空间。如,前置条件的上下文类元是在其中定义该前置条件的操作所归属的那个类。也就是说该类中所有模型元素(属性、关联和操作)都可以在OCL表达式中被引用。自身实例自身实例是对计算该表达式对象的引用,它总是上下文类元的一个实例。也就是说,OCL表达式
6、对该上下文类元每个实例的计算结果可能不同。因此,OCL可以用于计算测试数据。使用如下所示的方法为表定义主键。613.3OCL表达式OCL表达式用于一个OCL类型的求值,它的语法用扩展的巴斯科范式(EBNF)定义。在EBNF中,“
7、”表示选择,“?”表示可选项,“*”表示零次或多次,“+”表示一次或多次。OCL基本表达式的语法用EBNF定义如下:PrimaryExpression:=literalCollection
8、literal
9、pathNametimeExpression?FeatureCallparameters?
10、"("expression")"
11、ifExpression
12、Literal:=
13、
14、"#"timeExpression:="@"featureCallparameters:="("(declarator)?(actualParameterList)?")"ifExpression:="if"expression"then"expression"else"expression"endif"713.4OCL语法OCL指定了每一个约束都必须有一个上下文。上下文(context)指定了哪一个项
此文档下载收益归作者所有