`
cloudtech
  • 浏览: 4578358 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Eclipse OCL 开发

 
阅读更多

OCL解析器提供了两个类用于解析ocl表达式,分别是OCLHelper和OCL:
OCLHelper接口的设计直接用于解析表达式,而OCL则作为解析的切入点。

OCL的解析首先要为其创建一个环境,如:是基于UML模型的还是基于ECore模型的。
可通过在构造函数中指定相应的EnvironmentFactory来实现,如:
OCL<?, EClassifier, ?, ?, ?, ?, ?, ?, ?, Constraint, EClass, EObject> ocl;
ocl = OCL.newInstance(EcoreEnvironmentFactory.INSTANCE);//ECore环境

在OCL类中声明了两个方法getEnvironment()和getEvaluationEnvironment()分别用于获取模型的根环境和评估环境,这两个环境是由EnvironmentFactory接口创建的。
在根环境中可以嵌套一些子环境用于定义package的命名空间,以此获取package的上下文,先看一段简单的OCL描述:

在OCL描述中,是通过上下文(context)的组织来体现层级结构的,如:
由package可以遍历到classifer的上下文;
由classifer可以遍历到方法或属性的上下文;
通过这种层级结构,由package上下文可以遍历到任何模型元件。
因此,Environment接口中的各种lookup方法主要是通过package context来进行相关的查找操作。

实例化OCL对象以后,可以通过createOCLHelper()方法来获取OCLHelper对象。
OCLHelper对象声明了大量方法用于创建OCL查询、约束。
不同的约束条件需要不同的上下文环境,setContext(),setOperationContext()和setAttributeContext()分别表示了该约束是针对classifer,operation还是attribute的。

如上:createInvariant方法会解析约束表达式,createQuery方法会解析查询表达式,两个方法分别返回Constraint对象和OCLExpression对象。
有了查询和约束对象以后,可以使用Query对象对其评估。

Query API提供了实用的方法,可以简写for循环:
for (Library next : constraintEval.select(libraries)) {
@SuppressWarnings("unchecked")
Set<BookCategory> categories = (Set<BookCategory>) queryEval.evaluate(next);
System.out.printf("%s: %s%n", next.getName(), categories);
}

现实应用中,经常将模型定义和模型约束写入不同的资源文件中以便于模型的管理。
OCL提供了相应的方法来解析约束文件,通过构造OCLInput对象。

constraints.ocl文档内容如下:

通过上面的解析,将约束条件以Map形式存储起来,可通过约束的名字得到约束对象,如:
ocl.check(book, constraintMap.get("unique_title"));//对book对象进行title唯一的约束校验。

分享到:
评论

相关推荐

    OCL_SDK_Light_AMD.exe

    这里我说移植而不是开发,是因为大部分OCL模块的函数都是从已经很成熟的GPU模块移植过来的。于是目前阶段OCL模块所支持的函数接口只是GPU模块的一个子集。在使用AMD AMF开发时,需要配置该sdk。

    OCL Specification v2.4.pdf

    This clause introduces the Object Constraint Language (OCL), a formal language used to describe expressions on UML models. These expressions typically specify invariant conditions that must hold for...

    dresden-ocl-1.1

    ocl翻译工具,可以将ocl语言翻译为java代码

    OCL功率放大器报告.pdf

    OCL功率放大器报告.pdf

    详解OCL功放差分放大电路

    本文主题是图解经典电路之OCL差分功放,通过图文这种分析的方式能够有效减少面对复杂电路时的恐惧感。整个OCL电路可以等效为一个大功率的运放,如何消除大功率三极管的交越失真。又如何通过添加反馈电阻限制Q1Q2的...

    OCL 官方正式文档

    OCL formal 官方 对象约束语言 This clause introduces the Object Constraint Language (OCL), a formal language used to describe expressions on UML models. These expressions typically specify invariant ...

    OCL电路PPT教案.pptx

    OCL电路PPT教案.pptx

    oracle c++ 调用库 ocl 3.3 文档

    oracle c++ 调用库 ocl 3.3 文档

    Object Constraint Language (OCL)规范

    Object Constraint Language (OCL)规范

    OCL功率放大器电路Multisim仿真实例

    OCL功率放大器电路Multisim仿真实例

    OCL_sobel_descriptor

    利用OCV读取数据,并利用OCL进行sobel算子特征提取

    ocl.rar_ocl_oracle_oracle OCL_oracle OCL

    这是一份Oracle数据库的OCL技术文档,通过它的学习,用户可以掌握OCL的Developer技术。

    ocl资源文件dll

    ocl.dll各个版本资源文件,有效解决Navicat is not able to create OCI handles的问题

    ocl功放电路分析与维修技巧

    由于OCL功放电路优越的性能和较高的稳定性和可靠性,长期以来被各生产厂家广泛采用。但在使用中由于种种原因经常出现烧毁攻放管、复合管及电阻等元件的现象。因OCL电路是直接耦合,电路前后相互牵扯,在维修判断故障...

    手把手教你基于Multisim的OCL电路仿真与参数计算

    网上有很多基于Multisim的OCL电路仿真,但大多数没讲解参数的具体计算过程。在本电路里,作者采用三极管分立元件设计,对OCL电路每一个环节(差分输入,恒流源,共射放大、VBE倍增电路以及功放部分)的电压电流进行...

    正泰ACL OCL变频器进、出线电抗器.PDF

    正泰ACL OCL变频器进、出线电抗器PDF,

    ocl功率放大器 课程设计

    第二部分是基于甲乙类功率放大原理采用正负对称电源供电的OCL功率放大电路。由于采用正负对称电源供电故此电路输出端的直流电压等于0V,输出级不需接电容,提高了电路的工作效率,同时也增加了电路的复杂性。此电路...

    OCL功率放大器 课程设计

    设计任务: 采用全部或部分分立元件设计一种OCL音频功率放大器。 设计放大器所需的直流稳压电源。 设计参数: 额定输出功率。 负载阻抗。 失真度

    OTL,OCL,BTL电路的性能特点和差别

    BTL:平衡桥式功放电路,由两个相同的OCL电路组成一个功率更大的功放电路,无论使用单电源还是双电源供电都不需要输出电容,理想输出功率是单个OCL电路的4倍。优点是功率做得更大,且频率特性好,缺点是电路比较复杂...

    全对称OCL功放相关图纸

    OCL功放 全对称驱动电路实现方式 对于做低频功放电路的设计有参考价值

Global site tag (gtag.js) - Google Analytics