GB T 28174.3-2011 统一建模语言(UML).第3部分:对象约束语言(OCL).pdf
《GB T 28174.3-2011 统一建模语言(UML).第3部分:对象约束语言(OCL).pdf》由会员分享,可在线阅读,更多相关《GB T 28174.3-2011 统一建模语言(UML).第3部分:对象约束语言(OCL).pdf(144页珍藏版)》请在麦多课文档分享上搜索。
1、回ICS 35.080 L77 gB 中华人民共和国国家标准GB/T 28174.3-2011 统一建模语言(UML)第3部分:对象约束语言(OCL)2011-12-30发布Unified modeling language(UML)一Part 3 :Object constraint language(OCL) 中华人民共和国国家质量监督检验检疫总局中国国家标准化管理委员会2012-06-01实施发布GB/T 28174.3-2011 目次前言.田引言.N I 范围. 2 规范性引用文件13 对象约束语言描述4 抽象句法.235 具体句法456 采用UML描述的语义757 OCL标准库108
2、8 UML模型中OCL表达式的使用1279 OCL、UML与MOF三种元模型的衔接136I GB/T 28174.3-2011 前言GB/T 28174(统一建模语言CUML)分为4个部分:一一第1部分:基础结构;第2部分:上层结构;第3部分:对象约束语言COCL); 第4部分:图交换。本部分为GB/T28174的第3部分。本部分按照GB/T1. 1 2009给出的规则起草。本部分参考面向对象工作组COMG)的统一建模语言:对象约束语言COCL)2.0版。请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。本部分由全国信息技术标准化技术委员会CSAC/TC28)提出并
3、归口。本部分起草单位:广东省广业信息产业集团有限公司、广东万维博通信息技术有限公司、镇江金铁软件有限公司、北京大学、中国电子技术标准化研究所。本部分主要起草人:许立勇、周伟强、唐泽欢、江善东、黄孝和、杨三宝、丁力、吴炯祥、邓海强、胡红林、高健。因GB/T 28174.3一2011百|统一建模语言CUML)是一种可视化规约语言,用于定义和构造计算机信息系统的制品,并将其文档化。它是一种通用建模语言,可以和所有主流的面向对象和面向构件的方法一起使用,并适用于所有的应用领域和实现平台(如:CORBA、J2EE,.NET等)。0.1 统一建模语言不同版本之间的关系由于UML的技术较新,所以该国际标准历
4、经多次的版本演化,下面是UML在OMG的演化过程:1997 U肌1L1.1 1998 UML1. 2 1999 UML1. 3 2001 UML1. 4 2003 UML2.0 GB/T 28174的本部分正文中的UML均指UML2.0统一建模语言和GB/T28174。0.2 关于对读者的建议需要了解语言中的元模型构造物,利用这些构造物进行元模型扩展或者是构造新的建模语言的用户可阅读基础结构部分CGB/T28174.1)。应用系统建模用户和建模工具制造方都需阅读上层结构部分CGB/T28174.2)。但要注意,该部分的内容是交叉引用的,可不按目次顺序阅读。对于要精确地对模型进行约束的应用系统建
5、模用户或要支持对象约束语言的建模工具制造方,需阅读对象约束语言部分CGB/T28174.3)。支持在不同的软件工具间平滑且无缝地交换文档的建模工具制造方,需阅读图交互部分。IV GB/T 28174.3-2011 统一建模语言(UML)第3部分:对象约束语言(OCL)1 范围GB/T28174的本部分规定了用于对各类软件系统进行可视化、详述、构造和文档化的统一建模语言。本语言也可用于对其他领域进行建模。本部分是一种形式语言,它适用于描述UML模型上的表达式。这些表达式以规范的方式,规定了如何描述系统在建模过程中应成立的不变条件以及对模型中对象的查询。2 规范性引用文件下列文件对于本文件的应用是
6、必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注目期的引用文件,其最新版本(包括所有的修改单)适用于本文件。GB/T 28174.1 统一建模语言CUML)第1部分:基础结构GB/T 28174.2 统一建模语言CUML)第2部分:上层结构3 对象约束语言描述3.1 OCL的作用UML图(例如类图)通常不够精细,无法提供与规范有关的一切侧面。这其中就缺少描述模型中关于对象的添加约束。这些约束常常采用自然语言描述。而实践表明,这样做经常造成歧义。为了写出无歧义的约束,已经开发出几种新的所谓形式语言。传统上的形式语言,缺点是仅适合于有相当数学背景的人员,普通业务或系统建模者难
7、以使用。OCL即为填补这一空白而研制出来。它是一种保留了易读易写特点的形式语言。它已在IBM的保险分部作为一种业务建模语言开发出来,根植于Syntropy方法。OCL是一种纯粹的规约语言,因而保证了。CL表达式不带副作用。当对一OCL表达式求值时,只是返回一个值。它不能改动模型中的任何事物。这意味着,系统的状态绝不因OCL表达式的求值而改变,纵然能用OCL表达式去规定一个状态的改变(例如,在后置条件中)。OCL不是编程语言,因此,不可能以OCL写出程序逻辑或流控制。在OCL之内,不能启用进程或激活非查询操作。OCL本是一种建模语言,因此OCL表达式按定义不能直接执行。OCL是一种类型化语言,其
8、中每一OCL表达式都有一类型。OCL表达式要成为良构的,就应符合该语言的类型符合性规则。例如,不能拿Integer与String作比较。UML模型内定义的每一类目C Classifier) ,都代表一种独特的OCL类型。此外,OCL还包含一组补充的预定义类型(这在第7章OCL标准库中描述)。作为一种规约语言,所有实现问题都超出OCL的范围,不能以OCL表达。对OCL表达式的求值是瞬时的。这就是说,模型中各对象的状态,在求值期间不能改变。3. 1. 1 OCL使用OCL能用于若干不同目的:a) 作为一种查询语言;b) 在类模型中规定对类和类型的不变式;c) 规定衍型CStereotype)的类型
9、不变式;GB/T 28174.3-2011 d) 描述对操作COperation)和方法CMethod)的前置条件与后置条件;e) 描述守卫CGuards); f) 规定消息和动作的目标(集hg) 规定对操作的约束;h) 规定对属性的衍生规则;i) 用于UML模型中的任二表达式。3.2 引言3.2.1 图例isMarried: 8QQlean 田nager-一)一-斗e丁丘managedCompanies 2 isUnemployedBpoleart birthDate: Date age: Integer firstName:String lastName:String sex:Sex in
10、come(Date): Integer Marriage pla: String date:Date Job title:String startDate: Date salary:lnteger 图1类图例子3.3 与UML元模型的关系3. 3. 1 Self(自身)GB/T 28174.3-2011 OCL表达式在特定类型实例的语境中写成。在OCL表达式中,保留字self用以引用语境的实例。例如,若语境是Company(公司),则self指Company的一个实例。3.3.2 规定UML语境enoughEmlogees 0 context c: Comparr 3.3.4 前置条件与后置条
11、件OCL表达式可以是PreconditionC前置条件)或Postcondition(后置条件)的部分,对应于与Operation或与其他行为特征关联的Constraint的(precondition)衍型或(postcondition)衍型。因此,语境实例self是一个拥有以操作或方法作为特征的类型的实例。OCL中的语境声明,采用关键字context跟以类型和操作声明。约束的衍型,以把标号pre:和post:置于实际Precondition和postcondi tion之前来表明。context Typename: :operationNameCparaml: Typel ,. ): Ret
12、urnType pre:paraml. . post: res ult =. . . 名称self能用于引用操作对其调用的对象的表达式。保留宇result指代操作的结果(如果有时)。参数(araml)的名称也能用于OCL表达式。在此例图中,能写成:context Person: : income( d: Date) : Integer 3 GB/T 28174.3-2011 post: result= 5000 前置条件或后置条件的名称,可以可选地写在关键宇re或ost之后,以使对此约束能按名引用。在下面例子中,前置条件名是户arameterOK,后置条件名是resultOK。在UML元模型中
13、,这些名称都是从ModelElement中继承来的元类Constraint的属性name的值。context Typename: : operationNameCparaml: Typel ,. . ): ReturnType pre parameterOk: paraml. . . post resultOk:result=. 3.3.5 包语境当Classifier所属的包对环境清楚时,上述语境声明足够准确。为了在包不变式中显式规定前后置条件Constraints的所属,可将这些约束置于package语句与endpackage语句之间。包语句有句法:package Package: : S
14、ubPackage context X inv: . . . some mvanant context X: : opera tionN ame C. . ) pre: . . . some precondi tion . endpackage OCL文件(或流)可包含任意数目的包语句,这使所有的不变式、前置条件和后置条件都能写在并存在于一个文件之内。这一文件可作为单独实体与UML模型共存。3.3.6 操作主体表达式OCL表达式可用于指明查询操作的结果。采用如下句法就能做到这一点:context Typename: : operationNameC paraml : Typel ,. ) :
15、ReturnType body: -some expression 此表达式应与操作的结果类型符合。像在前后置条件中那样,此表达式中可使用参数。在操作语境之后,可把前置条件、后置条件与主体表达式泪在一起。例如:context Person: : getCurrentSpouseC) : Person pre: self. isMarried = true body: self. mariages叩selectCm 1m. ended= false). spouse 3.3.7 初始值与衍生值OCL表达式可用于指明属性或关联端的初始值或衍生值。采用如下句法就能做到这一点:context Type
16、name: : attributeName: Type init:-some expression representing the initial value context Typename: : assocRoleName: Type derive广someexpression representing the derivation rule 此表达式应与属性的结果类型符合。在语境为关联端的情况下,当势域最多1个时,此表达式应与该端的类目符合;当势域可多于1时,应与Set或OrderSet符合。在一个语境之后,初始表达式与衍生表达式可?昆在一起。例如:4 context Person:
17、: income: Integer init: parents. income-sum X 1 %-pocket allowance derive: if under Age then parents. income-sumX l%-pocket allowance else job. salary-income from regular job endif G/T 28174.3-2011 3.3.8 其他表达式类型任何OCL表达式都能用作UML元类Expression或其子类型之一的属性的值。在这种情况下,由语义段描述该表达式的意义。为此,采用一种专用的Expression子类,称为Exp
18、ressionlnOcl0其定义见8.1引言。3.4 基本值与类型在OCL中,有若干基本类型是预定义的,建模者随时可用。这些预定义的值类型都独立于任何对象模型和OCL定义的部件。OCL中的最基本值是基本类型之一的值。OCL的基本类型,以及所对应的值的例子,如表1所示。表1基本类型类型值布尔真,假整数l、5、2、34、26524,实数1.5、3.14,串To be or not to be OCL定义了对预定义类型的若干操作。表2给出对这些预定义类型进行操作的例子。全部操作的一览表见7.4原子类型。表2预定义类型上的操作类型操作整数头、+、一、/、absO实数头、十、一、/、f!oor() 布尔
19、与、或、异或、非、蕴涵、若则否则串contat() ,size() ,substring() Collection (汇集)、SetC集合)、BagC袋)、Sequenc巳(序列)和TupleC元组)也都是基本类型。其规约在下面各条描述。3.4. 1 出自UML模型的类型每一OCL表达式都在UML模型、若干类目(类型与类,)、类目的特征与关联及类目泛化的语境中写成。UML模型中的所有类目,都是附接到该模型的OCL表达式中的类型。3.4.2 枚举类型枚举是UML中的DatatypeC数据类型)井有一名称,正如其他任何Classifier那样。一个枚举定义了若干枚举文字,即该枚举的可能的值。在OC
20、L之内能引用枚举的值。当在举例模型中具有取值男或女的命名为GenderC性别)的Datatype时,能按如下方式使用:context Person inv: gender= Gender: : male 3.4.3 令(Let)表达式有时,子表达式在一个约束中不只一次使用。令表达式允许定义可在该约束中使用的变量。context Person inv: 5 GBjT 28174.3-2011 let income: Integer= self. job. salary-sumOin if isUnemployed then income = 100 endif 令表达式可包括在任何种类的OCL表
21、达式内。它仅在这一特定表达式之内是己知的。3.4.4 通过(definition)表达式定义添加操作与属性令(Let)表达式使变量能用于OCL表达式。为了对多重OCL表达式能重用变量与操作,可采用b) 类型符合性具有传递性:若ty如1与。如2符合,且tye2与ty符合。其效果是,一个类型斗英超类如崎各上层超类都符合。对标准库年的类型,类型符合性规则如表3所列。类型与其符合或是其子类型条件集合(T1)汇集CT2)当T1与T2符合时序列(T1)汇集CT2)当T1与T2符合时袋CTl)汇集CT2)当Tl与T2符合时整数实数各汇集类型之间的符合性关系,只有当它们是互相符合的元素类型的汇集时才成立。对于
22、汇集的符合性规则的完整描述,见3.5.13汇集类型层次与类型符合性规则。表4是有效与无效表达式的举例。6 OCL表达式1十2祷341 + motorcycle 23长假12+ 13.5 3.4.6 重定类型或铸型d) e) 3.4.8 中缀操作符的使用GB/T 28174.3-2011 表4高效与无效表达式是否有效说明是否String类型与Integer类型不符合否Boolean类型与Integer类型不符合是I! OCL中允许使用中缀操作符。+、一、头、j、=都用作中缀操作符。当某一类型定义这些操作符之一并带有正确特征标记时,将用作中缀操作。表达式:a+b 在概念上等于表达式:a+(b) 这
23、是启用对a的+操作,而b作为该操作的参数。对某一类型定义的中缀操作符,应恰有一个参数。对中缀操作符、=、first() (第1个)元素,都会得到未定义值。一般来说,表达式中部件之一未定义时,整个表达式就未定义。不过对这一规则有若干重要例外。首先,有几个逻辑运算符:a) 真与一切为真求或;b) 假与一切为假求井;c) 假蕴涵一切为真。此处对或与井的规则都有效而不论各变元的次序,而且不论其他子表达式是否已知。若(lF)表达式是另一例外。只要选出的转移有效它就有效,而不论其他转移的值。最后,当表达式的值未定义时,有一种用于测试的显式操作。OclIsU ndefined ( )是对OclAny的操作,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GB 28174.3 2011 统一 建模 语言 UML 部分 对象 约束 OCL
