`

围绕EMF探索(3)之初探OCL

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

前索引:围绕EMF探索(1)之存储和查询
前索引:围绕EMF探索(2)之再探查询组件

围绕EMF探索(3)之初探OCL

围绕EMF模型,有个很重要的基础性组件叫EMF OCL,这是一个实现了OCL2.0标准的组件,提供了对OCL Expression的解析、校验。OCL全称是Object Constraint Language。
对OCL之前接触不是很多。两年前,在MDAChina还存在的时候,见到一些朋友谈论它。但对当时的技术和应用来说,OCL还是过于“理想化”。事实上,直到今天,OCL在国内的应用也是很稀少的。
如果不是因为探索EMF OCL这个组件的原因,我想我也很难去主动钻研OCL的那有些晦涩的Expression。虽然在UML2中,其已经成为一个用于准确描述模型的关键特性。
其实,使用EMF OCL非常简单,使用QueryFactory构造一个Query对象,设置表达式(Express),以及表达式所依赖的Context(在EMF OCL中,一般是Classifier)。然后对给定eObject对象进行检查和计算。——就这么简单。
Query query = QueryFactory.eINSTANCE.createQuery(
"Book.allInstances()->select(b : Book | b self and b.title = self.title)",
LibraryPackage.eINSTANCE.getBook());
query.setExtentMap(extents);
Collection result = query.evaluate(myBook);
当然,想很熟练的应用EMF OCL,那么就必须会构造正确的Expression。
所以,不得不花费点时间学习OCL。
OCL的概念和作用就不用在这里啰嗦了,以前的MDAChina那帮爱好者们写了很多有关这方面的文章(可惜mdachina已经不存在),比较典型的就是“MDA之路”那个兄弟写的几篇blog 文章,
对于更精细的了解OCL,可以读读OCL之父Addison Wesley的著作《Object Constraint Language, The: Getting Your Models Ready for MDA》第二版,可以从下面的地址获取电子书:
另外,建议大家再看看《UML2.0参考手册》附录B部分的,这部分内容也是讲OCL的,而且讲了OCL的Basic Type和Syntax。
粗略的把这两本书中一些相关的章节翻了翻,还是很有收获的。当然限于时间问题,只是翻翻而已,留个大概映像,以后慢慢再研究查阅了。
针对OCL,这里简单提几个重点性内容:
OCL是一种语言,而且是一个Query-Only语言,利用OCL所塑造的Expression为模型中的类与类、类方法、类属性做了一层约束。既然是一种语言,那么就具有最基本的两个特性:类型和语法。
OCL具有最基本的built-in类型,同时,会将Meta-Model中的所有自定义classifier都认为是类型。针对built-in类型,会有相应的很多逻辑操作相关联,比如“and, or, xor, not”或者“*, +, -, /”等等。这方面可以参考,里面有专门的一章节介绍OCL的类型和逻辑操作。
针对Classifier之类的类型,则存在三个纬度:作用于Classifier的约束;作用于操作(方法)的约束;作用于属性的约束。这三个层面的约束,有不同的语法表达。
Contraints on Classifiers
context Student
inv: self.GPA > 2.0
Contraints on Operators
context Course::registerStudent(s : Student) : boolean
pre: s.tuitionPaid = true
Contraints on Attributes
context School::tuition : float
init: 2500.00
另外,提醒一下。从Eclipse CVS中抓下的ocl plugin project,需要依赖eclipse orbit包中的lpgjavaruntime组件,可以去http://download.eclipse.org/tools/orbit/downloads/下载,其实就是net.sourceforge.lpg.lpgjavaruntime 包。
先讲讲OCL的小知识吧,今天只顾钻研OCL的基础知识和语法了,还没有来得及研究EMF OCL的源码和结构。简单的扫了几眼,着实比EMF Query复杂很多,看来要花费更多的时间在上面了。



分享到:
评论

相关推荐

    围绕EMF探索

    火龙果软件工程技术中心 围绕EMF探索(1)之存储 EMF(EclipseModelingFramework)的应用会越来越多,而围绕EMF的query,validate,transaction,persistency等等讲逐渐被大家使用,以及EMFeCore也有非常大的参考价值。...

    emf文件格式详解

    包含3个文件: 微软emf文件格式详解.pdf emf.hlp (Enhanced Metafiles in Win32) emfexplorer_src.zip

    EMF读取XML

    EMF读取XML

    EMF 自学笔记5

    EMF 自学笔记

    SVG转EMF的示例代码

    矢量格式转换程序,基于JAVA实现的SVG转EMF的的示例代码,下载后导入到eclipse即可运行。

    EMF文件提取文本,预览,打印

    emf文件是windows的一种打印格式,该资源可以对emf文件进行文本提取和推送打印机打印以及转换成图像

    emf转bmp代码

    emf转bmpemf

    emf2svg-FreeHEP

    This is the API specification of the FreeHEP VectorGraphics package for converting emf to svg.

    EMF图片转为JPG/PNG

    EMF图片转为JPG/PNG 需安装GraphicsMagick 提供实例代码

    EMF for Eclipse 4.4插件

    基于Eclipse的模型框架 它是Eclipse MDA(Model Driven Architecture)的一个重要组成部分 是Eclipse中许多项目的基础 e g GEF EMF可以将模型转换成高效的 正确的 和易于定制的Java代码

    将EMF图片格式转换成PNG

    使用freehep将EMF转换为png,项目下载导入eclipse即可运行。

    微软emf文件格式详解

    文件格式 EMF (Enhanced MetaFile) ——是在印刷工业中应用与Windows操作系统的文件格式。实际上EMF是原始WMF(Windows metafile)格式的32位版本。EMF格式的产生是为了解决WMF在印刷行业中的不足。EMF是设备独立性...

    emf文件和wmf的转换

    emf和wmf文件的互转,有源码,供大家学习,交流!

    EMF和BMP文件格式的相互转换

    EMF和BMP文件格式的相互转换:BOOL CConvertEMFToBMP::ConvertBMPToEMF(const char*pszBMPFile,const char* pszEMFFile)

    eclipse插件开发EMF api 文档

    eclipse插件, EMF api 文档,eclipse插件, EMF api 文档

    MS-EMF spec

    微软的EMF specification,研究EMF文件格式必读。

    emf-runtime-2.7.2

    \EMF,用于eclipse实现可视化 的插件

    Emf2Png.zip

    EMF图片转PNG图片

    遍历emf文件位图

    遍历emf 文件里面的位图,并进行抗锯齿处理

Global site tag (gtag.js) - Google Analytics