GMF:OCL(Object Constraint Language)介绍

    前几周在使用GMF来做TOGAF建模工具时,了解到GMF使用OCL作为其模型的约束语言,于是花了一点时间简单的了解了一下OCL,下面简要的对OCL进行一下介绍,具体如何应用将在后续blog中再介绍,因为我现在还不知道:)

OCL是约束(Constraint)语言和查询(Query)语言

一个约束就是对一个(或部分)面向对象模型或者系统的一个或者一些值的限制。UML类图中的所有值都可以被约束,而表达这些约束的方法就是 OCL。在UML2标准中,OCL不仅用来写约束,还能够用来对UML图中的任何元素写表达式。每个OCL表达式都能指出系统中的一个值或者对象。因为 OCL表达式能够求出一个系统中的任何值或者值的集合,因此它具有了和SQL同样的能力,也就是说OCL也是一种查询语言。

OCL是基于数学的,但没有使用数学符号

OCL的基础是数学中的集合论和谓词逻辑,并且它有一个形式化的数学语义,但是它并没有使用某种数学符号。因为虽然数学符号能够清晰的、无歧义的表达事物,但是只有极少的专家可以看懂。所以数学符号并不适合用于一个广泛应用的标准语言。

自然语言是最易懂的,但是它是含混不清晰的。OCL取了自然语言和数学符号的折中方案,使用普通的ASCII字符来表达数学中同样的概念。如果你不喜欢当前的OCL表达方法,OCL规范还允许你定义自己的OCL符号集,这点是可以理解的,因为OCL有一个清晰的数学语义。

强类型的语言

OCL是一个类型语言,任何表达式的值都是属于一个类型的。这个类型可以是预定义的标准类型例如Boolean或者Integer,也可以是UML图中的元素例如对象。也可以是这些元素组成的集合,例如对象的集合、包、有序集合等等。

声明式(Declarative)的语言

表达式仅仅描述了应该去做"什么",而不是应该"怎样"去做。因为OCL是宣言式语言,所以UML中的表达式被提升到了纯建模的领域,而不必理会实现的细节和实现的语言。

类型和语法

OCL起源于1997年BIM公司为响应OMG的"面向对象分析和设计标准"征求稿所提交的"对象时间限制提议",OCL是该提议的部分内容。 用OCL可以描述四类约束,分别是不变量、前置条件、后置条件和监护条件。

1)不变量是在属性的生命期内一直保持为真的规则。

   2)前置条件是在一个操作被调用时必须为真的约束。它是一个断言,不是可执行语句。

   3)后置条件就是在操作完成时必须为真的约束。它不是可执行语句而是断言,必须为真。

   4)监护规则是在对象能够从一种状态转变为另一种状态前其值必须为真的约束。

---------------------------

模型上下文

每一个OCL表达式都必须赋予一个明确的上下文来定义参考基准。在模型中的任何一个元素都可以定义为一个上下文,例如类、属性、操作和关联。以下是一个简单示例:

context Company inv:
  self.numberOfEmployees > 50

----------------------------

OCL Expressions

    一旦我们定义了上下文,就可以开始定义约束表达式饿。OCL是一种声明式语言,大部分表达式执行后会返回一个布尔值,也有一些表达式会用来选择一个单一值或者一个对象/值的集合。

更多内容参考:OCL – Object Constraint Language(OCL version 2.0).ppt

---------------------

Self

  关键字self 用来表示上下文实例,如果上下文实例是Company,那么self指向的就是一个Company实例

-----------------------

不变量(Invariants)

  不变量这个概念我是在产生式开发第一次听到的概念,它在OCL中是最基本的概念之一,我感觉就是一个可以使用表达式来写的一个业务规则。不变量由关键字inv: 来声明。以下三个是等价的:
context Company inv:
  self.numberOfEmployees > 50

上面的关键字self可以不写,或者定义为另一个变量c:

context c : Company inv:
  c.numberOfEmployees > 50

还可以给这个约束指定一个名称
context c : Company inv enoughEmployees:
  c.numberOfEmployees > 50

---------------------------

前置和后置条件(Pre- and Postconditions)

context Typename::operationName(param1 : Type1, ... ): ReturnType
  pre :  param1 > ...
  post:  result = ...

以下为一个示例,在income函数调用之后,需要确保返回结果为5000

context Person::income(d : Date) : Integer
  post:  result = 5000

-----------------------------

操作表达式(Operation Body Expression)

这个有点我们在模型驱动开发中使用表达式来定义返回值一样,示例如下:

context Person::getCurrentSpouse() : Person
  pre:   self.isMarried = true
  body:  self.mariages->select( m | m.ended = false ).spouse

 

以上只是一些最基本的了解,具体如何应用还需要后续学习。


参考:

http://www.eclipse.org/modeling/mdt/?project=ocl#ocl
 

Implementing Model Integrity in EMF with MDT OCL

http://www.omg.org/spec/OCL/2.2/


推荐:你可能需要的在线电子书

 

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"In this thoroughly revised edition, Jos and Anneke offer a concise, pragmatic, and pedagogic explanation of the Object Constraint Language (OCL) and its different applications. Their discussion of OCL's potential role in Model Driven Architecture (MDA) is timely and offers great insight into the way that UML can be taken to the next level of automated software development practice. I highly recommend this book to anyone who is looking to get the most out of UML" -Shane Sendall, Ph.D.Senior ResearcherSwiss Federal Institute of Technology in Lausanne The release of Unified Modeling Language (UML) 2.0 places renewed emphasis on the Object Constraint Language (OCL). Within UML, OCL is the standard for specifying expressions that add vital information to object-oriented models and other object-modeling artifacts. Model-Driven Architecture (MDA) relies on OCL to add the level of programming detail necessary to enable Platform-Specific Models (PSM) to communicate with Platform-Independent Models (PIM). This book is a practical, accessible guide to OCL for software architects, designers, and developers. Much care has been taken during the redesign of OCL to ensure that the syntax remains readable and writable by the average software modeler. The Object Constraint Language, Second Edition, utilizes a case study to show how to exercise these compact but powerful expressions for maximum effect. This newly updated edition also Explains why OCL is critical to MDA-and why UML alone is not enough Introduces an SQL-like syntax to OCL Defines the new language constructs of OCL 2.0 Demonstrates how OCL can be incorporated into code Using a combination of UML and OCL allows developers to realize the effective, consistent, and coherent models that are critical to working with MDA. The authors' pragmatic approach and illustrative use of examples will help application developers come quickly up to speed with this important object-modeling method--and will serve as a ready reference thereafter. 原创pdf格式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值