atitit。自己定义uml MOF EMF体系eclipse emf  教程o7t

1. 元对象机制(MOF,Meta-Object Facility)and  结构 1

2. 元模型图、模型图、对象图uml自己定义建模语言 2

3. 3层结构and 结构中的框架连接 3

4. GEF和EMF 4

5. 建立emf项目--建立一个empty   emf proj
4

6. 建立一个ecore模型 4

7. EMF,Ecore 6

8. 建立genmodel的  jet 生成配置文件 7

9. Ecore和Genmodel。 8

10.  8

11. 生成项目 9

12. 执行插件run  as  eclipse app 11

13.  11

14. 新建自己定义模型 11

15. 防止覆盖自己定义改动。

@generated标注 13

16. 定制应用程序的基本方法) 13

17. EMF的问题ati总结 14

18. 參考 14

1. 元对象机制(MOF,Meta-Object Facility)and  结构

起源于统一建模语言(UML)。对象管理机构(Object Management Group|OMG)须要一种元模型结构来定义UML。

MOF被设计为4层次的结构。

位于顶部的是元元模型层。即M3层。

M3模型是MOF建立元模型(被称为M2模型)的语言。M2模型最明显的 样例是UML元模型,该模型描写叙述UML。M2模型描写叙述M1层以及M1层的要素,比如,UML模型。最后一层是M0层或数据层。它描写叙述真实世界的物体。

作者:: 老哇的爪子 Attilax 艾龙。  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2. 元模型图、模型图、对象图uml自己定义建模语言

MOF的四层模型各自是:元元模型层(M3)、元模型层(M2)、模型层(M1)、执行时(M0)。当中元元模型层包括了定义建模语言所需的元素。元模型 层定义了一种建模语言的结构和语法。模型层定义了一个详细的系统的模型;执行时包括了一个模型的对象在执行时的状态等。

本文涉及到的有M2、M1和M0层,以下给出一个样例,首先是M2层。它能够定义一个建模语言的结构和语法,比如:

本文涉及到的有M2、M1和M0层,以下给出一个样例。首先是M2层,它能够定义一个建模语言的结构和语法。比如:

这是一个简要的元模型图,它表示Class由Property和Operation组成,这张图符合UML2.0的概念,可是我们也能够这样画:

这样一来,Class包括三种元素:Attribute、AssociationEnd和Operation,这样我们就创建了一个新的元模型,也能够说创建了一个小的新建模语言。尽管它不符合UML2.0规范。

M1层模型就是我们通常简称的“模型”,它是系统的标准化表示,一般用建模语言来表示一个软件系统,比如以下的汽车和人的系统:

3. 3层结构and 结构中的框架连接

一个应用系统能够被分为典型的3层结构。在《UML模式与应用》[1]一书中分别称为UI层、领域层、数据层。

UI层和领域层的接口通过应用程序和应用框架来连接。领域层和数据层的接口通过持久化框架来连接。

4. GEF和EMF

GEF(Graphical Editor Framework)是一个图形化编辑框架。它同意开发者以图形化的方式展示和编辑模型,从而提升用户体验。使用GEF能够方便的实现XML编辑器、UML类图编辑器等应用程序。

EMF(Eclipse Modelling Framework)是Eclipse MDA(Model Driven Architecture)的重要组成部分,能够将模型转换成高效的,正确的,易于定制的Java代码。

基于GEF和EMF能够非常方便地进行模型驱动开发(Model-Driven Development,MDD)

。GEF是Eclipse提供的图形编辑框架,GEF能够为用户提供图形化编辑模型,提升用户体验。EMF是Eclipse提供的模型驱动应用程序 开发框架,能够产生代码的框架。EMF能够基于XML Schema,UML或经过凝视的Java中指定的模型。创建Java代码。实现图形化的数据编辑、操纵、读取和序列化。

5. 建立emf项目--建立一个empty   emf proj

6. 建立一个ecore模型

默认的仅仅能树形编辑。。

定义ecore模型。我比較喜欢图形化的方式。由于看起来非常直观。所以我使用Omondo公司的EclipseUML插件来画类图,这个插件的免费版本号在 它们站点下载,注意下载适合你的Eclipse的版本号。当然rose也不错并且更加稳定,但它 不是免费的。并且仅仅能在Windows里使用。和Rose不同,EclipseUML对EMF有特别的支 持,安装这个插件后,我就们能够在项目里新建一个“EMF Class Diagram”,这样会同一时候创建一个.ecd文件和一个.ecore文件。EclipseUML编辑的类图信息会保存在这两个文件中。前者主要是图形方 面的内容,而后者是真正的模型信息。注意这两个文件中的不论什么一个都不要搞丢了,最好能常常备份一下。

在EclipseUML里编辑类图非常easy,须要注意的是,两个对象之间假设有关联,要细致考虑关联是否为“包括”关系(一般在UML中以黑色菱形表 示)。假设一个类没有包括在不论什么其他类里,则这个类的实例不会被保存到文件。比如图2中Category包括在Shop中,Product包括在 Category中。这样,全部的对象都直接或间接的被Shop对象包括。换句话说,假设以Shop作为“根”。全部的对象都能够被保存到文件中。

EMF对java基本类型和一些经常使用类做了包装。比如int->EInt。java.lang.Integer->EInteger以 及java.util.List->EList等等,所以在定义类的属性时要使用这些EMF的类型,当然也有办法使用自己定义类型(以后会用到)。

我 们样例里的模型相当简单,一共仅仅有三种业务对象(为了更加直观,我们添加了一个NamedElement接口),如今网上 商店类图的第一个版本号如图2所看到的。

7. EMF。Ecore

项目的最初目标是要实现OMG(Object Management Group)的MOF规范(Meta Object Facility)。在项目的进行中EMF的开发者依据大量的实践经验对MOF规范进行了再加工,提取出了一些核心的元素集(MOF 2.0 中称为EMOF(Essential MOF))。

能够说EMF 是MOF核心子集的java高效实现,在EMF 中MOF核心子集的实现称为Ecore。

图1.Ecore类层次结构:这个图像显示出Ecore元数据完整的类层次。

EMF用于定义和实现结构化数据模型。所谓数据模型就是用来处理应用中须要处理的数据的一组相关类。

使用EMF的优点

1.          代码生成。依据模型的定义生成可用数据模型的全部代码。EMF按照模板文件生成easy阅读的代码,模板文件能够定制。

你能够改动所生成的代码,而且又一次生成类时会保留所做的改动。生成代码须要的是Rational Rose模型文件,批注Java接口或XML schema 定义(开发中)

2.          元数据。你能够用程序查询模型结构。得到比标准的Java BeanInfo或反射很多其它的信息。

EMF还支持訪问和更新模型。

3.          缺省序列化。EMF能够从XMI文件装载模型实例,也能够保存模型实例到XMI文件(XMI文件是一种XML格式的文件)。你也能够保存到不同格式的文件。文件格式XML schema还在开发中。

4.          文件之间的连接。你能够保存和编辑多个文件里的数据

5.          编辑器。EMF还会生成一个模型编辑器,另一个反射编辑器,仅仅用模型的元数据就能够浏览和编辑EMF模型文件。

Eclipse建模框架(EMF)是一个Java开源框架与代码生成工具-用于基于结构化的模型来构建工具和其他应用程序。

在Eclipse平台在用户界面和文件级上提供一个强有力的集成框架的同一时候,EMF加强了这样的能力来实现工具和应用程序之间良好粒度的数据分享。EMF可以高速为你的模型生成简单、正确、有效的相应JAVA代码。假设给定一个模型,那么EMF可以自己主动生成Java源代码-该源代码同意你创建、查询、更新、串行化、反串行化、检验和追踪你的模型实例的变化。

类似于其他的Java绑定框架,比如JAXB或XMLBeans,给定一个模型后,EMF就行生成Java源码-它同意你创建、查询、更新、反串行化以及串行化你的模型的实例。虽然多数Java绑定框架仅支持一个模型类,比如XML模式。而EMF支持从XML模式,UML类图(Rational Rose或UML2)以及被注解的Java接口中生成代码。

除了模型代码。EMF还能生成一个完整的应用程序-它包含一个可定制的编辑器。

  用来描写叙述EMF模型的模型叫作Ecore,本质上是UML类图的子集。它是关于应用的类和数据的简单模型。当建立Ecore后,EMF採用实现与接口相分离的设计。将Ecore中的每一个类(Eclass)自己主动生成1个接口和1个实现类。

  当中的接口都会继承EObject这些EMF中的集接口,如同java.lang.Object在Java中的地位。

EMF还为每一个模型分别生 成一个相应factory和package的接口和实现类。当中。**Factory继承于EFactory,为模型中每一个类的创建提供 create***方法。

在jStudio中,採用EMF实现业务模型对象建立和代码生成,减少开发者的工作量,提高效率,并且生成的代码简洁、高 效。

8. 建立genmodel的  jet 生成配置文件

接下来就要生成代码了。

EMF使用JET利用模板生成代码(前面曾介绍过JET)。所以要把ecore模型转换为能够被JET利用的genmodel模型,详细的操作是按 ctrl+n新建一个EMF Model,在这个向导的第一步指定名称shop.genmodel。第二步选择从ecore模型导入,第三步选择ecore模型文件 (shop.ecore),这样就建立了缺省的genmodel模型。在这个模型的基础上还能够做一些定制工作。比如每一个属性的描写叙述信息等等。

有了genmodel模型,离得到可用的java代码就仅仅有一步之遥了。打开shop.genmodel文件,在根节点上点开右键菜单(见图3),假设仅仅想生 成模型代码选择“Generate Model Code”。假设须要.edit的代码(EMF提供的一些ItemProvider和AdapterFactory。帮助实现编辑器)和可用的编辑器,选 择“Generate All”最方便,这也是样例里选择的方式。

EMF的代码生成器为模型、.edit、编辑器和測试代码各生成一个插件项目 (com.my.shop/shop.edit/shop.editor/shop.tests),前三个是后者依赖前者的关系。这里插上一句。即使没有 用EMF的项目。也建议把模型和界面使用不同的插件项目分开,这样做有非常多优点,主要是灵活性大大提高了。

图3 从菜单里选择生成部分或所有代码

9. Ecore和Genmodel。

10.

EMF是基于两种元模型来构建的,各自是

Ecore:主要用于定义模型结构的相关信息。并对外提供了一个根对象(宛如XML文件的根节点)用来代表要显示的模型,该对象的子节点为 package(包),package的子节点为class(类),class的子节点为attribute(类的属性字段),这样整个树形结构就代表了 所要表示的EMF模型结构。

Genmodel:主要包括有关代码生成的相关信息(如:文件生成路径及文件名称),和一些控制參数用来控制代码如何生成。

11. 生成项目

EMF採用模型驱动开发方法。在无需编码的情况下,我们能够基于模型使用EMF为我们生成下面几样东西。

1。与模型相相应的EMF实体类。

2,基于实体类的各种ItemProvider模型适配器类,通过该适配器类能够非常好的将EMF模型绑定到Jface组件中去,稍后详细介绍。

3。editor-plugin项目。可理解为基于EMF应用的一个插件项目。

4,測试bundle。

1实体类:就像Hibernate ORM为我们生成的实体类一样,EMF也会为我们生成这种实体类。而且这些实体类含有更高级的特性(如:类属性状态发生变化时,实体类具有通知功能)

2适配器类:EMF的模型结构可能很复杂(如可能含有多个实体类,而且类结构各不相 同),这样当视图组件直接使用这些实体类的时候就变得很困难(要推断出是哪一个实体类。针对该实体类如何显示视图等等..),因此EMF针对这些实体类 生成了一些适配器类。通过实现指定的接口。让适配器类来设计实体类的显示,而视图仅仅须要选择合适的适配类便可。

3适配器工厂:上面讲到视图通过适配器类避免了与实体类的直接交互,然而视图又是怎样得到合适的适配器类的呢?那便是通过适配器工厂类。

模型定义例如以下:

从模型定义来看Library便是Ecore所对外提供的用来表示模型的根对象。

首先来看EMF为我们生成的模型实体类(如果这些实体类分布在org.emf.demo这个bundle之中)

EMF会为我们生成3个package,各自是:

org.emf.demo.library:包括实体类的接口;用于创建实体类的工厂(libraryFactory);訪问模型元数据的有用类(LibraryPackage)

org.emf.demo.library.impl:实体类接口的实现类。实体类工厂的实现类(LibraryFactryImpl)。LibraryPackage的实现类(LibraryPackageImpl)

org.emf.demo.library.util:针对该模型的适配器工厂类(LibraryAdapterFactory)

注:libraryFactory和LibraryPackage都是单例模式的,可通过其成员变量eINSTANCE来得到对象的实例。

12. 执行插件run  as  eclipse app

13.

14. 新建自己定义模型

。EMF为我们生成了一个新建向导(New Wizard),利用这个向导能够生成新的Shop实例,注意在第三步要选择以Shop类为根类型。编辑器的执行界面如图4所看到的。它的外观尽管有待改进,但功能已 经足够我们对网上商店里的类别和产品进行编辑了。在以后的帖子里。我们要对网上商店的ecore模型和编辑器的界面做一些改动。

在EMF自己主动生成的editor中,仅仅提供了TreeViewer作为编辑控件,自己主动生成的代码能让TreeViewer处理Redo&Undo操作,

图4 缺省的编辑器界面

15. 防止覆盖自己定义改动。。@generated标注

注:EMF所生成的变量或方法都会含有@generated标注。当运行regenerate操作时EMF仅仅会覆盖含有@generated标注的方法,而自己手工加入的方法不会被覆盖。

16. 定制应用程序的基本方法)

编辑器的作用是编辑模型实例,比方你在模型里定义了商店里有商品。编辑器就能够让你创建这些商品(比如佳能数码相机)。否则这个模型的作用在哪里体现呢。



假设要求不高的话。你生成好编辑器整个应用程序就完毕了,你的项目就能够结束了,由于你已经能够用它来管理你的商店了。



只是大多数情况下我们对生成的应用还是不够惬意的。比方觉得生成的图标不好看。菜单顺序不合理,甚至整个界面都不惬意。等等。所以就须要对生成的应用进行定制。也就是改造。直到全然符合要求为止。

借助EMF的帮助,不用亲自编写一行代码就能够生成一个完整的应用程序,你是不是对EMF有些感兴趣了?只是生成的应用程序看起来都像是从同一个模子里出来的,即 一个多页编辑器,一个大纲视图和属性页,这当然无法满足全部人的需求。不用耽心,仅仅要了解EMF的机制,依照我们的要求改动这个应用程序并非一件非常困难的 事情。

首先大概的看一下EMF为我们生成了哪些东西吧。依照前文的操作,EMF应该一共生成了四个插件项目:com.my.shop、 com.my.shop.edit、com.my.shop.editor和com.my.shop.tests,当中最后一个项目是方便我们编写单元測 试的框架代码。这里我们先无论它,临时把注意力集中在前三个项目上。

第一个项目是模型部分。主要包括你定义的ecore模型里各类型(EClass,在ecore元模型里类型称为EClass,属性称为 EAttribute)相应的java接口和缺省的实现类代码,比如Product.java和ProductImpl.java。它们分别被放置在 com.my.shop和com.my.shop.impl包里。一个工厂类(ShopFactory)使用工厂模式创建新的模型实例。一个 Package类(ShopPackage)维护关于元模型的信息,提供了一堆静态成员变量。此外还生成了ShopAdapterFactory和 ShopSwitch这两个类,它们是可选的,它们俩的作用这里卖个关子临时先不说。

第二个项目是.edit部分。这里面包括了一系列ItemProvider类,用来为在jface的各种查看器(Viewer)里显示这些模型对象 提供便利,以CategoryItemProvider为例,它实现了IStructuredItemContentProvider、 ITreeItemContentProvider和IItemLabelProvider这些接口。注意把这些接口名字中的"Item"去掉就是 jface里须要的Provider,能够把这些带有"Item"字样的Provider想象成对jface对应Provider的包装。有了这些 Provider,在应用程序里使用jface的TreeViewer、TableViewer等查看器就非常方便了。(前面讲GEF的一个帖子里曾利用 EMF构造模型,当时使用的就不过模型部分。由于并未用到jface查看器。所以视你的应用程序而定,能够只生成模型部分来用,.edit部分依赖模型部分,而反之不然。

第三个项目是编辑器。这个部分依赖.edit部分,主要包括了几个UI方面的类。EMF为我们生成的这个编辑器有两个用途:一是让我们能够不用从零開始,而是在这个编辑器的基础上进行改动得到自己的编辑器; 二是通过这些代码展示如何在应用程序里使用前两个项目里的那些类,编辑器包括那么多Tab正是为了演示各种查看器的使用方法。以下来说一下如何定制生成的应用 程序。

17. EMF的问题ati总结

Web好像不适用。。

18. 參考

EMF介绍系列(二、从模型生成应用程序) - 八进制 - 博客园.htm

EMF介绍系列(三、定制应用程序的基本方法) - 八进制 - 博客园.htm

EMF介绍系列(八、模型的验证) - 八进制 - 博客园.htm

脱离Eclipse环境使用EMF - 八进制 - 博客园.htm

构建 Eclipse 插件在 EMF 模型中浏览内容.htm

atitit。自己定义uml MOF EMF体系eclipse emf 教程o7t的更多相关文章

  1. atitit。自定义uml MOF EMF体系eclipse emf 教程o7t

    atitit.自定义uml MOF EMF体系eclipse emf  教程o7t 1. 元对象机制(MOF,Meta-Object Facility)and  结构 1 2. 元模型图.模型图.对象 ...

  2. java 开发基础篇1环境安装--eclipse安装教程

    如何安装java环境 http://jingyan.baidu.com/article/a24b33cd59b58e19fe002bb9.html JDK download http://www.or ...

  3. eclipse 安装教程

    eclipse 安装教程 一:安装包下载: 链接: https://pan.baidu.com/s/1qZtt62o 密码: 4ak2 注:若 下载链接失效,请看本文公告的QQ群,请联系群主. 二:安 ...

  4. Eclipse安装教程

    Eclipse安装教程     (Win7_64bit + Eclipse_64bit + JDK_8u131_64bit + python2.7.8 + PyDev5.7.0插件) 适用操作系统:W ...

  5. 将github上的项目源码导入eclipse详细教程

    将github上的项目源码导入eclipse详细教程 学习了: http://blog.csdn.net/itbiggod/article/details/78462720

  6. 【WPF】右下角弹出自定义通知样式(Notification)——简单教程

    原文:[WPF]右下角弹出自定义通知样式(Notification)--简单教程 1.先看效果 2.实现 1.主界面是MainWindow 上面就只摆放一个Button即可.在Button的点击事件中 ...

  7. org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found

    tomcat7,部署tomcat6下的项目统,报tomcat 7: IllegalArgumentException: taglib definitionnotconsistentwithspecif ...

  8. Genymotion的安装与eclipse配置教程

    第一部分安装Genymotion和VirtualBox虚拟机 1,Genymotion模拟器可以在官网下载,但是下载前需要注册账号,账号注册后登陆,点击Download. 2,选择第一个with Vi ...

  9. Eclipse安装反编译工具JadClipse for Eclipse手把手教程

    今天闲来无事准备弄弄eclipse的反编译工具JadClipse for Eclipse,百度经验里也说的比较清楚只是两个文件下载地址没有明确 net.sf.jadclipse_3.3.0.jar   ...

随机推荐

  1. cocos2d-x anchorPoint

    之前一直没有用过anchorPoint,也感觉用这个东西的地方相对比较少的,都是直接使用世界坐标来定位的. 但是,在现在这个项目中,却有同事使用了这个anchorPoint,使用是使用了,但是,在碰撞 ...

  2. Android Studio使用教程(一)

    今年的Google全球开发者大会虽然没有新的Android系统和设备,但是还是推出了一些不错的产品,Android Studio就是其中之一.这个基于Intellij IDEA开发的Android I ...

  3. Facebook登录 AndroidStudio

    简介 主页:https://www.facebook.com/ Android开发者支持:https://developers.facebook.com/docs/android/  应用管理:htt ...

  4. Java 图片切圆角,消除锯齿

    public static BufferedImage setBorderRadius(BufferedImage srcImage, int radius){ int width = srcImag ...

  5. 解决PL/SQL Dev连接Oracle弹出空白提示框

    第一次安装Oracle,装在虚拟机中,用PL/SQL Dev连接远程数据库的时候老是弹出空白提示框,网上找了很久,解决方法也很多,可是就是没法解决我这种情况的. 没办法,只能自己研究,经过大概一天时间 ...

  6. iOS中你必须了解的多线程

    多线程概念详解 什么是进程? 简单的说进程就是我们电脑上运行的一个个应用程序,每一个程序就是一个进程,并且每个进程之间是独立的,每个进程运行在其专用受保护的内存空间内(window系统可以通过任务管理 ...

  7. USB OTG to PC USB API简介

    本API分为四部分:Linux或Android内核 (主要是gadget驱动).linux端API及其DEMO.Windows 驱动.Windows API及其Demo. 一.linux.Androi ...

  8. jQuery链式操作

    讨论jQuery的文章很多.然而,关于jQuery的链式操作的文章并无多少.好的代码会带来速度的提升.快速渲染和响应意味着更好的用户体验. 下面就来讲讲jQuery的链式操作. 很多时候我们写代码的时 ...

  9. HTML&CSS基础学习笔记1.8-预格式文本

    <pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码 ...

  10. Scala学习文档-访问修饰符

    在scala里,对保护成员的访问比Java严格.Scala中,保护成员只在定义了成员的类的子类中可以访问,而Java中,还允许在同一个包的其他类中访问. package p1 { class FCla ...