`
ww2
  • 浏览: 418262 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

 前索引:围绕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格式不依赖于特定的显示器或打印机,因此可以在不同设备间保持一致性。 4. **颜色和变换支持**:EMF支持RGB、CMYK等颜色空间,以及复杂的变换矩阵,允许进行平移、旋转和缩放操作。 5. **混合...

    微软emf文件格式详解

    ### 微软EMF文件格式详解 #### 一、引言 EMF(Enhanced MetaFile)是一种在Windows操作系统中广泛使用的高级元文件格式。它作为WMF(Windows Metafile)格式的32位增强版,旨在解决WMF在印刷行业中的一些限制。EMF...

    emf教程入门和插件

    EMF(Eclipse Modeling Framework)是Eclipse基金会推出的一个开源框架,主要用于构建基于模型的软件系统。它提供了一种统一的方式来表示、存储和...在实践中不断探索,你将能够自如地运用EMF构建复杂的模型驱动系统。

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

    3. **打印**:EMF文件设计用于打印目的,因为它们可以精确地控制打印质量和细节。将EMF文件发送到打印机涉及将文件中的图形指令翻译成打印机语言,例如PCL或PostScript。这通常通过打印机驱动程序完成,该驱动程序...

    emf eclipse

    3. "使用EMF Query查询EMF模型(2) - 编程入门网" 这部分可能深入介绍了EMF Query(EMF QL),这是一个用于查询和操作EMF模型的强大工具。通过EMF QL,开发者可以方便地检索、分析和修改模型数据。 总结来说,EMF ...

    SVG转EMF的示例代码

    3. 将SVG图形渲染到SVGGraphics2D对象中。 4. 使用转换上下文将SVGGraphics2D对象写入EMF输出流,通常是FileOutputStream。 5. 关闭输入流和输出流。 在实际应用中,你可能需要处理更多的细节,比如错误处理、SVG...

    EMF读取XML

    EMF(Eclipse Modeling Framework)是Eclipse基金会提供的一种强大的模型化框架,它主要用于构建基于模型的应用程序。在处理XML数据时,EMF提供了一种高效且灵活的方式,能够将XML文档转换为可操作的对象模型,进而...

    emf文件和wmf的转换

    3. **坐标系统**:EMF和WMF可能使用不同的坐标系统,转换时需要进行适当的调整。 4. **向后兼容性**:确保转换后的WMF文件能在旧版Windows系统中正常显示。 5. **效率优化**:如果文件较大,转换过程应尽可能高效,...

    EMF 自学笔记5

    ### EMF自学笔记知识点详述 #### 一、EMF框架概述 EMF(Eclipse Modeling Framework)是Eclipse项目中的一个子项目,它提供了一套用于构建模型驱动的开发工具和应用程序的框架。EMF的主要目标是简化元数据驱动应用...

    将EMF图片格式转换成PNG

    3. **运行和测试**:编译并运行这个Java程序,确保它正确地将EMF转换为PNG。你可以在Eclipse中直接运行,或者创建一个批处理脚本来调用Java可执行文件。 转换过程中可能会遇到的问题包括兼容性问题、文件路径问题、...

    emf-runtime-2.7.2

    3. **持久化**:EMF支持模型的持久化,可以将模型数据存储为XML文件或其他格式。 4. **模型转换**:EMF提供了模型转换工具,允许在不同模型之间进行转换,增强了灵活性和互操作性。 5. **图形单元(Graphical User ...

    eclipse的emf插件

    - **plugins**:此目录可能包含了多个Eclipse插件,EMF插件可能就是其中之一,每个插件都是一个独立的JAR文件,用于扩展Eclipse的功能。 - **binary**:可能包含的是编译后的二进制代码,用于EMF插件的运行。 - **...

    emf转bmp代码

    标题中的“emf转bmp代码”表明我们要讨论的是如何将增强型元文件(Enhanced Metafile, EMF)转换为位图(Bitmap, BMP)格式的编程技术。增强型元文件是一种矢量图形格式,广泛用于Windows操作系统中,它可以保存图形...

    eclipse emf&gef

    EMF位于Eclipse平台的核心之上,提供了一个高层次的抽象层,用于处理模型定义和模型实例。它是面向对象的,并且可以与Java代码紧密结合。 **1.1.2 目标** - **简化模型定义**:EMF通过简单的API提供了强大的模型...

    java开发工具EMF插件

    3. **模型操作**:EMF提供了丰富的API,包括创建、修改、查询模型对象,以及保存和加载模型到XML文件。 4. **图形化编辑器**:EMF集成了GEF(Graphical Editor Framework),可以快速构建基于模型的图形化编辑器,...

    EMF模型文件对比/比较(emf.compare)

    EMF(Eclipse Modeling Framework)模型文件对比/比较(emf.compare)是针对基于EMF构建的模型文件进行差异分析的工具。EMF是Eclipse项目中的一个子项目,它提供了一种创建、操作和共享复杂的领域特定语言(DSL)...

    深入理解EMF&graphiti

    EMF(Eclipse Modeling Framework)和Graphiti是两个在Eclipse平台上用于建模和图形化表示的重要工具。本文将深入探讨这两个技术,并结合提供的压缩包文件"emf",为读者提供一个详尽的理解。 首先,EMF是Eclipse...

Global site tag (gtag.js) - Google Analytics