为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

UML-OCL对象约束语言

2020-04-06 41页 ppt 222KB 2阅读

用户头像 个人认证

一线信息技术教师,具有丰富教学经验和管理经验,多次被评为地级优秀教师

举报
UML-OCL对象约束语言对象约束语言1对象约束语言概述2标准OCL类型3OCL表达式4用OCL表达对象性质约束1对象约束语言概述对象约束语言(ObjectConstraintLanguage),简称OCL,是一种指示用户建模系统中的限制方式。它是UML可选的附加内容,可以用来更好地定义对象的行为,并为任何类元指定约束。在对象约束语言中,对象代表了系统的组件,它定义了完善的项目,约束代表限制,而语言并非是指一种正式的计算机语言。1对象约束语言概述OCL是一种形式语言,可以应用于任何实现方式的非正规语言。对象约束语言对UML中图形或其他组件都没有控制权,...
UML-OCL对象约束语言
对象约束语言1对象约束语言概述2OCL类型3OCL表达式4用OCL表达对象性质约束1对象约束语言概述对象约束语言(ObjectConstraintLanguage),简称OCL,是一种指示用户建模系统中的限制方式。它是UML可选的附加内容,可以用来更好地定义对象的行为,并为任何类元指定约束。在对象约束语言中,对象代表了系统的组件,它定义了完善的项目,约束代表限制,而语言并非是指一种正式的计算机语言。1对象约束语言概述OCL是一种形式语言,可以应用于任何实现方式的非正规语言。对象约束语言对UML中图形或其他组件都没有控制权,它只是在使用时返回值。OCL并不能修改对象的状态,而是用来指示对状态的修改何时发生。OCL表达式以附加在模型元素上的条件和限制来表现对该对象的约束,其中包括附加在模型元素上的不变量或约束的表达式、附加在操作和方法上的前置条件和后置条件等。OCL的产生OCL的产生是为了解决约束表达的问题。OCL最初由IBM公司设计成功。OCL已经为标准化组织OMG所接受,成为了UML标准的一部分。OCL语言虽然是一种形式化语言,但是它既具有形式化语言无二义性的特点,又消除了形式化语言的复杂性。OCL的特点OCL是一种精确的、无二义性的语言,易于使用和掌握。OCL是一种说明性语言,所有有关实现的问题都不能用OCL来表达。OCL是一种纯表达式语言,它是具有没有任何副作用的声明性语言。对OCL表达式的计算将返回一个值,计算不会改变系统的状态。OCL是一种类型化语言,即OCL中的每个表达式都是具有类型的。OCL不是一种程序设计语言,不能用OCL编写程序逻辑和控制。UML图(例如类图)通常不够精细,无法提供与规范有关的所有相关部分。这其中就缺少描述模型中关于对象的附加约束。这些约束常常用自然语言描述。而实践表明,这样做经常造成歧义。为了写出无歧义的约束,已经开发出几种所谓的“形式语言”。传统上的形式语言,缺点是仅适合于有相当数学背景的人员,而普通商务或系统建模者则难以使用。OCL的出现解决了这一问题,它是一种保留了易读易写特点的形式语言。OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对象。OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,由此也可得知OCL既是约束语言,同时也是查询语言。2标准OCL类型OCL预定义的标准类型定义了一组基本类型和集合类型。OCL的基本类型有“Boolean”、“Integer”、“Real”和“String”等,集合类型包括“Collection”、“Set”、“Bag”和“Sequence”等,这些标准类型是OCL表达式的组成部分。2标准OCL类型OCL标准类型的层次结构2标准OCL类型2.1OclType类型2.2OclAny类型2.3基本类型2.4集合类型2.5OCL中的关键字2.1OclType类型OclType类型是OCL预定义的和在模型中定义的类型,OclType允许访问模型的元级别。OclType的操作见表1。2.2OclAny类型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)2.3基本类型OCL定义了很多基本类型,它的基本类型和程序设计语言中的数据类型的含义类似。OCL还在基本类型上定义了一些操作,这些操作也与程序设计语言中的操作类似。OCL的基本类型与操作见表3。2.4集合类型除了基本类型以外,OCL还定义了一些较为高级的标准OCL类型称为集合类型。集合是成组的对象或元素,可以用来作为表达式计算过程中的结果。集合类型除了抽象数据类型Collection以外,还有Set(集)、Bag(袋)、OrderedSet(有续集)和序列(Sequence)等。2.4集合类型1.Collection2.Set3.OrderedSet4.Bag5.Sequence1.CollectionCollection是OCL中所有集合的抽象的上级类型。定义在Collection上的操作见表5。2.SetSet是不包括重复元素的对象组,Set中的元素是无序的。定义在Set上的操作见表6。3.OrderedSetOrderedSet是不包括重复元素的对象组,OrderedSet中的元素是有序的。4.BagBag也是对象组,Bag和Set不同之处在于Bag中可以包含重复元素。定义在Bag上的操作见表7。5.SequenceSequence和Bag相似,也可以包含重复元素,不过Sequence中的元素是有序的。定义在Sequence上的操作见表8。6.Collection上的操作为了便于操作集合,OCL加定义了一些操作,这里只给出一些常用且重要的操作来示例,更多具体的操作会在OCL的标准库中介绍。操作如下所示:select按照一定的规则选择选取符合规则的项,组成一个新的集合。reject从集合中选择不满足规则的项,组成一个新的集合。forAll指定一个应用于集合中每个元素的约束。exists确定某个值是否存在于集合中的至少一个或多个成员中。isEmpty操作判断集合中是否有元素。count判断集合中等于count参数的元素个数,并返回该数值。iterate访问集合中的每个成员,对每个元素进行查询和计算。7.使用消息OCL支持对已有操作的访问,也就是说OCL可以操作信号和调用信号,来发送消息。针对信号的操作,OCL提供了三种机制:第一种机制“^”“^”为hasBeenSent已经发送的消息。该符号表示指定对象已经发送了指定的消息。第二种机制OclMessageOclMessage是一种容器,用于容纳消息和提供对其特征的访问。第三种机制“^^”它是已发送符号“^”的增强形式,允许访问已经发送消息的集合,所有的消息被容纳在OclMessage中。8.元组(Tuple)元组是对一组数据元素,如文件中的一个或数据库中的一行等内容的定义,每个元素被赋予名称和类型。元组可以使用字符或基于表达式的赋值来创建。在OCL中,元组是使用被花括号包围的一系列“名称-类型”对和可选值来定义的,其定义形式如下所示:Tuple{name:String='Jim',age:Integer=23}元组只是将一组值集合在一起的一种途径,然后元组必须被赋予一个变量。以下表达式使用def表达式来创建一个代理类元上下文内叫sales的新属性。2.5OCL中的关键字与程序设计语言一样,OCL也定义了一些关键字。OCL中的关键字见表9。3OCL表达式3.1OCL表达式的语法3.2操作符的优先级OCL表达式的特点OCL表达式可以附加在模型元素上。OCL表达式可以附加在操作上。OCL表达式可以指定附加在模型元素上的监护条件。OCL表达式的计算原则是从左到右OCL表达式既可以使用基本类型又可以使用集合类型。3.1OCL表达式的语法OCL表达式的语法用扩展的巴斯科范式(EBNF)定义,在EBNF中:“|”表示选择“?”表示可选项“*”表示零次或多次“+”表示一次或多次3.1OCL表达式的语法OCL基本表达式的语法用EBNF定义如下:PrimaryExpression:=literalCollection|literal|pathNametimeExpression?FeatureCallparameters?|“(“expression”)”|ifExpressionLiteral:=<string>|<number>|“#”<name>timeExpression:=”@”<name>featrueCallParameters:=”(”(declarator)?(actualParameterList)?”)”ifExpression:=”if”expression“then”expression“else”expression“endif”3.2操作符的优先级OCL中的操作符有优先级顺序。改变操作符的优先顺序可以使用括号。4用OCL表达对象性质约束所谓对象性质,就是指一个对象的属性、操作等对象有关的特性,在建模中具体是指定义的模型元素的特性。OCL表达式可以表达对模型元素性质的约束,常见的使用情况有三种:不变量、前置条件与后置条件和let表达式。4用OCL表达对象性质约束4.1不变量4.2前置条件和后置条件4.3let表达式与约束4.1不变量不变量常用于附加在模型元素上,它的约束条件通常需要该模型元素的所有实例都满足。4.2前置条件和后置条件OCL表达式附加在操作上可以规定一个前置条件或后置条件。前置条件指的是操作开始执行前必须为真的条件,后置条件指的是操作成功结束执行后必须为真的条件。前置条件用保留字“pre”标识,后置条件用保留字“post”标识。4.3let表达式与约束let表达式附加在模型元素的属性上,它通常用于定义约束中的一个变量。5示例-管理信用卡账户5示例对于这个模型,提问在某个时间间隔内,某个信用卡账户发生了哪些交易?去年这个机构处理的交易数量?去年那些客户用各种信用卡资助了某商家?某客户现在有多少个信用卡账户?对于所有的帐户,客户最大借款额的总和是多少?UML合并了一门可以表达类似这些问题的语言—对象约束语言(OCL)【Wamer-99】5.1遍历类模型的OCL制品(I)OCL可以在类模型中遍历制品属性:语法是源对象加圆点加属性名。aCreditCardAccount.maximunCredit操作:源对象或对象集合加圆点加操作。即使没有参数,操作后面必须跟着括号。以避免与属性发生混淆。OCL中有一些特殊操作,可以作用于整个集合。集合操作的语法是源对象集合加“->”加操作简单关联。点标记的第三种用法是遍历到目标端的关联。目标端可以由关联终端名指定,或无歧义地由类名指定。aCustomer.MailingAddress生成一套地址;aCreditCardAccount.MailingAddress生成单个地址。5.1遍历类模型的OCL制品(II)限定关联:限定符可以更为准确的遍历。语法是将限定符取值围在方括号内。例如aCreditCardAccount.Statement[30Nov1999]关联类:给定关联类的一个链接,就可以找到组成的对象。作为选择,给定一个组成对象,就可以找到关联类的多个链接。泛化:对于OCL来说,遍历泛化层次结构是隐含的。过滤器:经常需要过滤集合内的对象。OCL有好几类过滤器,其中最常用的是select操作。5.2构建OCL表达式OCL真正的威力来自于将原始制品组合成表达式。使用OCL,遍历对象到单个关联,这样的遍历会生成单件或集合(或包)。5.3OCL表达式示例(I)对于这个模型,提问在某个时间间隔内,某个信用卡账户发生了哪些交易?aCreditCardAccount.Statement.Transaction->select(aStartDate<=transactionDateandtransactionDate<=anEndDate)去年这个机构处理的交易数量?anInstitution.CreditCardAccount.Statement.Transaction->select(aStartDate<=transactionDateandtransactionDate<=anEndDate).amount->sum()5.3OCL表达式示例(II)去年哪些客户用各种信用卡资助了某商家?aMerchant.Purchase->select(aSsartDate<=transactionDateandtransactionDate<=anEndDate).Statement.CreditCardAccount.MailingAddress.Customer->asSet()某客户现在有多少个信用卡账户?aCustomer.MailingAddress.CreditCardAccount->size()对于所有的帐户,客户最大借款额的总和是多少?aCustomer.MailingAddress.CreditCardAccount.maximumCredit->sum()
/
本文档为【UML-OCL对象约束语言】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索