围绕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探索(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探索(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探索(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探索(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探索(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探索(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探索(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探索(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探索(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探索(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探索(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探索(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探索(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复杂很多,看来要花费更多的时间在上面了。



"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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值