




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第13章对象约束语言,对象约束语言(ObjectConstraintLanguage),简称OCL,是一种指示用户建模系统中的限制方式。它是UML可选的附加内容,可以用来更好地定义对象的行为,并为任何类元指定约束。在对象约束语言中,对象代表了系统的组件,它定义了完善的项目,约束代表限制,而语言并非是指一种正式的计算机语言。OCL是一种形式语言,可以应用于任何实现方式的非正规语言。对象约束语言对UML中图形或其他组件都没有控制权,它只是在使用时返回值。OCL并不能修改对象的状态,而是用来指示对状态的修改何时发生。,2,本章学习要点:,了解OCL的概念理解OCL的结构掌握OCL语法掌握三种固化类型掌握OCL数据类型和运算符掌握let和def的功能和作用理解集合类型掌握并应用对集合操作熟悉OCL标准库,3,13.1OCL概述,UML图(例如类图)通常不够精细,无法提供与规范有关的所有相关部分。这其中就缺少描述模型中关于对象的附加约束。这些约束常常用自然语言描述。而实践表明,这样做经常造成歧义。为了写出无歧义的约束,已经开发出几种所谓的“形式语言”。传统上的形式语言,缺点是仅适合于有相当数学背景的人员,而普通商务或系统建模者则难以使用。OCL的出现解决了这一问题,它是一种保留了易读易写特点的形式语言。OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对象。OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,由此也可得知OCL既是约束语言,同时也是查询语言。,4,13.2OCL结构,OCL在两个层次上共同定义对象约束语言,一个是抽象语法(元模型),另一个是具体语法。元模型定义OCL概念和应用该概念的规则,具体语法则真正用于在UML模型中指定约束和进行查询。,5,13.2.1抽象语法,抽象语法指的是OCL语言定义的概念层,在该层中抽象语法解释了类、操作等内容的元模型。例如,类被定义为“具有相同的特征、约束和语义说明的一组对象”,并在该层将类解释为可与任何数目的特性(或属性)、操作、关系甚至嵌入类相关联。抽象语法只是定义了相类似的元模型,并没有创建一个具体的模型或对象。OCL要求清楚地区分OCL抽象语法和其他自抽象语法派生的所有具体语法。抽象语法还支持其他约束语言的发展。正如基于MOF(MetaObjectFacility,元对象设施标准)的UML基础结构元模型支持各种专业领域的建模,例如软件建模的UML语言,数据仓库领域建模的CWM语言等。,6,13.2.2具体语法,与面向规则的语法相反,具体语法(即模型层语法)描述代表现实世界中一些实体的类,它应用抽象语法的规则来创建可以在运行时段计算的表达式。OCL表达式与类元相关联,应用于该类元自身或者某个属性、操作或参数。不论哪种情况,约束都是根据其位移(replacement)、上下文类元(contextualclassifier)和OCL表达式的自身实例(selfinstance)来定义。位移表示UML模型中使用OCL表达式所处的位置,即作为依附于某个类元的不变式、依附于某个操作的前置条件或依附于某个参数的默认值。上下文类元定义在其中计算表达式的名字空间。如,前置条件的上下文类元是在其中定义该前置条件的操作所归属的那个类。也就是说该类中所有模型元素(属性、关联和操作)都可以在OCL表达式中被引用。自身实例自身实例是对计算该表达式对象的引用,它总是上下文类元的一个实例。也就是说,OCL表达式对该上下文类元每个实例的计算结果可能不同。因此,OCL可以用于计算测试数据。使用如下所示的方法为表定义主键。,7,13.3OCL表达式,OCL表达式用于一个OCL类型的求值,它的语法用扩展的巴斯科范式(EBNF)定义。在EBNF中,“|”表示选择,“?”表示可选项,“*”表示零次或多次,“+”表示一次或多次。OCL基本表达式的语法用EBNF定义如下:PrimaryExpression:=literalCollection|literal|pathNametimeExpression?FeatureCallparameters?|(expression)|ifExpressionLiteral:=|#timeExpression:=featureCallparameters:=(declarator)?(actualParameterList)?)ifExpression:=ifexpressionthenexpressionelseexpressionendif,8,13.4OCL语法,OCL指定了每一个约束都必须有一个上下文。上下文(context)指定了哪一个项目被约束。OCL是一个类型化的语言,因此数据类型扮演了重要角色,如高级语言C+、Java一样,也有多种数据类型。,9,13.3.1固化类型,一个约束就是对一个(或部分)面向对象模型或者系统的一个或者一些值的限制。UML类图中的所有值都可以使用OCL来约束。约束的应用类似于表达式,在OCL中编写的约束上下文可以是一个类或一个操作。其中需要指定约束的固化类型,而约束的固化类型可以由以下三项组成:invariantpre-conditionpost-condition,10,13.3.2数据类型、运算符和操作,对象约束语言是类型化语言,具有四种数据类型分别是:整数(Integer)可以是任何不带小数部分的值,如0,-1,1等。实数(Real)可以是任何数字,可以带有小数。如,3.0,7.5,-3.0等。字符串(String)可以包含任何数量的字符或文本。布尔(Boolean)布尔型值只有两个True和False,11,13.5深入固化类型,前面曾经简单要介绍固化类型的基本语法知识。本节将进一步讲解有关三种固化类型invariant、pre-condition和post-condition约束的更多知识。,12,13.5.1属性约束建模,以属性的约束表示为不变量,不变量表达式是通过引用模型的元素,并使用逻辑运算符和算术运算符来构造,表达式内创建的引用可以在let和def语句中再次使用。在计算OCL表达式时,必须引入仅在表达式中使用的中间值。使用let表达式可以定义变量,通过冒号赋予数据类型,甚至可以使用通过等号运算符赋予初始值。一旦该变量被定义,就可以在表达式的其他地方使用。当表达式完成时,该变量不再可使用。也就是说表达式规定了该变量的使用范围,变量只在对其进行定义的表达式内可用。以下实例中,legthOfEmployment仅在contextEmployee不变式中可用。,13,13.5.2对操作约束建模,前面介绍了使用前置条件和后置条件对操作进行约束建模。前置条件表示为当操作被激发时输入参数和模型状态的可接受值;后置条件表示操作完成时必须满足的条件,它表示为操作完成时检测该操作的结果值和模型的状态。使用前置条件和后置条件一般形式如下所示:contextoperateName(parameters):returnpre:constraintpost:constraint,14,13.6使用集合,在OCL表达式的许多结果包含不止一个值,允许存在多个值被OCL称为Collection的一个对象列表。OCL中共定义了四种类型的对象列表,分别是:Collection(集合)、Set(集)、Bag(袋子)和Sequence(序列)。,15,13.6.1创建集合,集合可以通过字符显式地创建,创建集合时只需要写出创建集合的类型名称,后跟以列表值,各值项使用逗号隔开,并被花括号包括。创建集合如下所示:Set1,5,6,99SetJim,Tim,xySequence1,3,94,0,1,3SequenceJim,Tim,JimBag1,2,4,5,4BagJim,Tim,Tim,16,13.6.2操作集合,为了便于操作集合,OCL加定义了一些操作,这里只给出一些常用且重要的操作来示例,更多具体的操作会在OCL的标准库中介绍。操作如下所示:select按照一定的规则选择选取符合规则的项,组成一个新的集合。reject从集合中选择不满足规则的项,组成一个新的集合。forAll指定一个应用于集合中每个元素的约束。exists确定某个值是否存在于集合中的至少一个或多个成员中。isEmpty操作判断集合中是否有元素。count判断集合中等于count参数的元素个数,并返回该数值。iterate访问集合中的每个成员,对每个元素进行查询和计算。,17,13.7使用消息,OCL支持对已有操作的访问,也就是说OCL可以操作信号和调用信号,来发送消息。针对信号的操作,OCL提供了三种机制:第一种机制“”“”为hasBeenSent已经发送的消息。该符号表示指定对象已经发送了指定的消息。第二种机制OclMessageOclMessage是一种容器,用于容纳消息和提供对其特征的访问。第三种机制“”它是已发送符号“”的增强形式,允许访问已经发送消息的集合,所有的消息被容纳在OclMessage中。,18,13.8元组,元组是对一组数据元素,如文件中的一个记录或数据库中的一行等内容的定义,每个元素被赋予名称和类型。元组可以使用字符或基于表达式的赋值来创建。在OCL中,元组是使用被花括号包围的一系列“名称-类型”对和可选值来定义的,其定义形式如下所示:Tuplename:String=Jim,age:Integer=23元组只是将一组值集合在一起的一种途径,然后元组必须被赋予一个变量。以下表达式使用def表达式来创建一个代理类元上下文内叫sales的新属性。,19,13.9OCL标准库,OCL标准库(StandardLibrary)定义用于开成OCL表达式的所有可用的OCL类型,每种类型都有一组可用于该类型对象的操作,有时还会有属性。OCL中预定义的标准类型包括基本类型和集合类型,OCL的标准类型分布呈现一种层次结构。,20,13.9.1OclVoid和OclAny类型,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=(selfobject),21,13.9.2OclMessage类型,OclMessage是一个模板类,不能被直接初始化,而可以通过参数来初始化。每个OCL消息类型实际上是带一个参数的模板类型,创建OCL消息实例时将参数替换为一个操作或信号来实现。每个OclMessage类型完全由作为参数的操作或信号确定,并且每种OclMessage类型都将操作或信号的名称以及该操作的所有形式参数或该信号的所有属性作为OclMessage类型的属性。,22,13.9.3集合类型,前面也对集合类型有过概述,集合(Collection)是OCL标准库中所有集合类型的父类。所有子类包括Set、Bag和Sequence。每种类型都是带有一个参数的模板类型,具体集合类型是通过将该参数替换为某种类型来创建。,23,13.9.4模型元素类型,模型元素类型是一种枚举类型,它们允许建模人员引用在UML模型中定义的元素。模型元素类型中某些特性可被用于在使用对象之前计算该对象。使用这些特性的标准操作提供
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025云南昭通永善县工业园区管理委员会公益性岗位招聘1人备考练习试题及答案解析
- 2025中国平煤神马集团数据科技中心招聘50人备考练习题库及答案解析
- 2025安徽滁州市明光市人民医院招聘工作人员23人备考考试题库附答案解析
- 2025江西中寰投资集团及其下属公司招聘7人备考考试题库附答案解析
- 工厂安全培训照片漫画课件
- 2025甘肃省林业和草原局所属事业单位招聘事业编制189人备考考试题库附答案解析
- 2025四川产业振兴基金投资集团有限公司应届毕业生招聘9人备考考试题库附答案解析
- 建筑系列讲座方案设计模板
- 2025陕西榆林镁业(集团)有限公司招聘(9人)备考考试题库附答案解析
- 掌握化学方程式
- 信息系统工程造价指导书
- 正确解读细菌药敏报告,合理使用抗菌药物
- LS 8010-2014植物油库设计规范
- FZ/T 73001-2016袜子
- 发展心肺耐力与改善身体成分 课件 【新教材同步备课精研】高中体育与健康人教版必修第一册
- 组织行为学核心主题全系列(MBA研修班学生版4日)课件
- 桥梁基础工程施工
- 始祖鸟新员工基础知识考试(NEW)试题含答案
- 渣浆泵基础知识课件
- 布赫液压样本
- 防错验证报告
评论
0/150
提交评论