|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
1 包定义 1.1 UML方法: a) 定义: i. 图: ii. 生成代码: publicinterface StPackage extends EPackage { String eNAME = "st"; String eNS_URI = "http://st"; String eNS_PREFIX = "st"; … } 1.2 Java方法: a) 定义: i. 代码: public interface stPackage { public String eName = "st"; public String eNS_URI = "http://st"; public String eNS_PREFIX = "st"; } 说明:interface声明中不能带“@model”标记,接口名称要以“Package”结尾。接 口可以声明以下三个字段eName,eNS_URI,eNS_PREFIX。 1.3 XML方法 a) 定义: i. 代码: <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema targetNamespace=http://st xmlns:st="http://st"> </xsd:schema> 说明:nsURI的值由targeNamespace指定。nsPrefix的值由targetNamespace导出。 name是targetNamespace的最后一段。 2 类定义 2.1 UML方法 a) 定义: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { … } b) 接口: i. 说明:假如把类的stereotype设置为<<interface>>,则EMF将使生成的EClass的interface字段设为true,但在EMF 2.1.0的测试版中,EMF并不能识别出这个<<interface>>类型。 c) 抽象类: i. 图: ii. 生成代码: public abstract class TeacherImplextends EObjectImpl implements Teacher { … } d) 单继续: i. 图: ii. 生成代码: public class JavaTeacherImpl extendsTeacherImpl implements JavaTeacher { … } e) 多继续 i. 图: ii. 生成代码: public interface JavaTeacher extendsTeacher, Nothing, Java { } public class JavaTeacherImpl extendsTeacherImpl implements JavaTeacher { … } 2.2 Java方法: a) 定义: i. 代码: /** * @model */ public interfaceStudent{} 说明:需要使用“@model”标记。 b) 接口: i. 代码: /** * @model interface="true" * */ public interface Teacher{} 说明:通过声明interface属性,在生成代码当中将不会有TeacherImpl类生成。 c) 抽象类: i. 代码: /** * @model abstract="true" * */ public interface Teacher{} 说明:通过声明abstract属性,在生成代码中TeacherImpl将成为一抽象类。 d) 单继续: i. 代码: /** * @model * */ public interface JavaTeacher extendsTeacher{} e) 多继续: i. 代码: /** * @model * */ public interface JavaTeacher extends Teacher,Java{} 说明:在多继续时,接口的实现类将会扩展排在extends中第一个位置的接口的实现类。上例中,生成代码中的JavaTeacherImpl将会extends TeacherImpl。 2.3 XML方法: a) 定义: i. 代码: <xsd:complexType name="Teacher"/> 说明:类名由complexType中的name属性指定。 b) 接口: i. 说明:XML没有提供用于定义接口的机制。 c) 抽象类: i. 代码: <xsd:complexTypename="Teacher" abstract="true"/> d) 单继续: i. 代码: <xsd:complexTypename="Teacher"/> <xsd:complexTypename="JavaTacher"> <xsd:complexContent> <xsd:extension base="st:Teacher"/> </xsd:complexContent> </xsd:complexType> 说明:通过ComplexType的扩展机制来实现单继续。 e) 多继续: i. 说明:还没找到合适的多继续机制。 3 属性定义 3.1 UML方法: a) 单值属性: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedstatic final String NAME_EDEFAULT = null; protectedString name = NAME_EDEFAULT; publicString getName() {…} publicvoid setName(String newName) {…} … } b) 多值属性: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedEList students = null; publicEList getStudents() {…} … } c) 修改属性的Ecore属性值: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedstatic final String UNCHANGEABLE_EDEFAULT = null; protectedString unchangeable = UNCHANGEABLE_EDEFAULT; protectedstatic final String VOLATILE_EDEFAULT = null; protectedstatic final String UNSETTABLE_EDEFAULT = null; protectedString unsettable = UNSETTABLE_EDEFAULT; protectedboolean unsettableESet = false; publicString getUnchangeable() {…} publicString getVolatile() { thrownew UnsupportedOperationException(); } publicvoid setVolatile(String newVolatile) { thrownew UnsupportedOperationException(); } publicString getUnsettable() {…} publicvoid setUnsettable(String newUnsettable) {… } publicvoid unsetUnsettable() {…} publicboolean isSetUnsettable() {…} … } 说明:对于unchangeable属性,我把他的changeable属性修改为false,于是在生成的代码当中,他将不包含有set方式。对于volatile属性,我把他的isVolatile属性设为true,于是在生成的代码当中对英语volatile的get()/set()方式都实现为空方式体,且抛出一个非常。对于unsettable属性,我把他的isUnsettable属性设为ture,于是在生成的代码当中除了有unsettable属性以外,还有一个用于标记该属性是否已设置的boolean量unsettableESet。 d) 枚举类型: i. 图: ii. 生成代码: public final class Score extendsAbstractEnumerator { publicstatic final int GOOD = 0; publicstatic final int BAD = 1; … } 3.2 Java方法: a) 单值属性: i. 代码: /** * @model */ public interface Teacher{ /** * @model * */ public String getName(); } 说明:定义属性时,必须带有“@model”标记,且方式名必须符合getXyz(),或者 isXyz()的形式。 b) 多值属性: i. 代码: /** * @model */ public interface Teacher{ /** * @model type="String" * */ publicList getStudents(); } c) 修改属性的Ecore值: i. 代码: public interface Teacher extendsEObject{ /** * @modelchangeable="false" */ publicString getUnchangeable(); /** * @modelvolatile="true" */ publicString getVolatile(); /** * @modelunsettable="true" */ publicString getUnsettable(); } d) 枚举类型: i. 代码: /** * @model */ public finalclass Score { /** * @model */ publicstatic final int GOOD = 0; /** * @model */ publicstatic final int BAD = 1; } 说明:枚举类型需要定义为final class类型,枚举值由类内部的static final int指定。 3.3 XML方法: a) 单值属性: i. 代码: <xsd:complexTypename="Teacher"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> </xsd:sequence> </xsd:complexType> b) 多值属性: i. 代码: <xsd:complexTypename="Teacher"> <xsd:sequence> <xsd:elementname="name" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> c) 修改属性的Ecore值: i. 说明:Schema没有提供修改Ecore值的方式。 d) 枚举类型: i. 代码: <xsd:simpleType name="Score"> <xsd:restriction base="xsd:NCName"> <xsd:enumeration value="GOOD"/> <xsd:enumeration value="BAD"/> </xsd:restriction> </xsd:simpleType> 4 引用定义 4.1 UML方法: a) 单向引用: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedStudent student = null; publicStudent getStudent() {…} publicvoid setStudent(Student newStudent) {…} … } b) 双向引用: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedStudent student = null; publicStudent getStudent() {…} publicvoid setStudent(Student newStudent) {…} … } public class StudentImpl extendsEObjectImpl implements Student { protectedTeacher teacher = null; publicTeacher getTeacher() {…} publicvoid setTeacher(Teacher newTeacher) {…} … } c) 多值引用: i. 图: ii. 生成代码: public class TeacherImpl extends EObjectImplimplements Teacher { protectedEList student = null; publicEList getStudent() {…} … } d) 包含引用: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedEList student = null; publicEList getStudent() {…} } 说明:当使用包含引用时,由于被引用的对象和引用的对象会被保存在同一个资源内部,因此可以不使用Proxy的方法,因此Teacher内部会使用EObjectContainmentEList来保存对Student的引用。假如是普通引用,则考虑会使用EObjectResolvingEList。 e) 修改引用的Ecore值: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedNonProxy nonProxy = null; protectedNonChange nonChange = null; protectedUnset unset = null; protectedboolean unsetESet = false; publicNonProxy getNonProxy() { returnnonProxy; } publicvoid setNonProxy(NonProxy newNonProxy) {…} publicVolatile getVolatile() {…} publicvoid setVolatile(Volatile newVolatile) { thrownew UnsupportedOperationException(); } publicNonChange getNonChange() {…} publicUnset getUnset() {…} publicvoid setUnset(Unset newUnset) {…} publicvoid unsetUnset() {…} publicboolean isSetUnset() {…} … } 说明:当引用的resolveProxy值设定为false时,生成的get方式将进行代理的解释步骤,而只简朴的返回引用值。当引用的unchangeable值设定为true时,生成代码中将不包含set方式。当引用的volatile值设定为true时,生成的代码中将只包含空方式体。当引用的unsettable设定为true时,除了生成引用值以外,还生成用于判定引用是否已经设置的boolean量。 f) Map引用: i. 图: 说明:StudentTable的stereotype必须为MapEntry,她必须包含一个key的属性,且必须有一个名称为value的引用。 ii. 生成代码: public class TableImpl extendsEObjectImpl implements BasicEMap.Entry { protectedstatic final int KEY_EDEFAULT = 0; protectedint key = KEY_EDEFAULT; protectedStudent value = null; publicObject getKey() {…} publicvoid setKey(Object key) {…} publicObject getValue() {…} publicObject setValue(Object value) {…} … } public class TeacherImpl extendsEObjectImpl implements Teacher { protectedEMap table = null; publicEMap getTable() {…} … } 说明: Ecore中的EMap并不是从java.util.Map中继续而来,她继续的是EList,所以,她只有一列而不是两列值。对于EMap中的每个值,都是继续自java.util.Map$Entry的一个EClass,且该EClass包含了key和value属性。由于EMap的这个结构,因此我们不能用单值引用Table,而必须用多值,这等价于: /** * @model type="Table" */ EList getTable(); ?SHAPE?/* MERGEFORMAT key:value key:value key:value key:value … key value key key … key value value … value java.util.Map EMap 4.2 Java方法: a) 单向引用: i. 代码: /** * @model */ public interface Teacher { /** * @model */ publicStudent getStudent(); } /** * @model */ public interface Student {} b) 双向引用: i. 代码: /** * @model */ public interface Teacher { /** * @model */ publicStudent getStudent(); } /** * @model */ public interface Student { /** * @model * */ publicTeacher getTeacher(); } c) 多值引用: i. 代码: /** * @model */ public interface Teacher { /** * @modeltype="Student" */ publicList getStudent(); } d) 包含引用: i. 代码: /** * @model */ public interface Teacher extendsEObject { /** * @model type="Student" containment="true" */ publicEList getStudent(); } e) 修改引用的Ecore值: i. 代码: /** * @model */ public interface Teacher extendsEObject{ /** * @model resolveProxies="false" */ publicNonProxy getNonProxy(); /** * @model volatile="true" */ publicVolatile getVolitile(); /** * @model changeable="false" */ publicNonChange getNonChange(); /** * @model unsettable="true" */ publicUnset getUnset(); } f) Map引用: i. 代码: /** * @model */ public interface Teacher extendsEObject { /** * @model keyType="int"valueType="Student" * */ publicEMap getTable(); } 4.3 XML方法: a) 单向引用: i. 代码: <xsd:complexTypename="Teacher"> <xsd:sequence> <xsd:elementname="student" type="st:Student"/> </xsd:sequence> </xsd:complexType> <xsd:complexTypename="Student"> </xsd:complexType> b) 双向引用: i. 代码: <xsd:complexTypename="Teacher"> <xsd:sequence> <xsd:elementname="student" type="st:Student"/> </xsd:sequence> </xsd:complexType> <xsd:complexTypename="Student"> <xsd:sequence> <xsd:elementname="teacher" type="st:Teacher"/> </xsd:sequence> </xsd:complexType> c) 多值引用: i. 代码: <xsd:complexTypename="Teacher"> <xsd:sequence> <xsd:elementname="student" type="st:Student" minOccurs="0"maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> d) 包含引用: i. 说明:通过complexType定义的,除了元素的类型为anyURI,QName,IDREF,IDREFS以外,containment的值都为true。 e) 修改引用的Ecore值: i. 说明:Schema没有提供修改引用的Ecore值的机制。 f) Map引用: i. 说明:Schema没有提供用于定义Map引用的机制。 5 数据类型定义 5.1 UML方法: a) 定义: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { protectedstatic final Date BORN_EDEFAULT = null; protectedDate born = BORN_EDEFAULT; publicDate getBorn() {…} publicvoid setBorn(Date newBorn) {… } … } 5.2 Java方法: a) 定义: i. 代码: public interface StPackage { /** * @model instanceClass="java.util.Date" * */ EDataType getNewDate(); } /** * @model */ public interface Teacher extendsEObject { /** * @model */ publicNewDate getBorn(); } 说明:使用Java方法声明新的类型时,需要在Package的声明中增加类型定义。 5.3 XML方法: a) 定义: i. 代码: <xsd:simpleTypename="NewDate"> <xsd:restriction base="xsd:date"/> </xsd:simpleType> <xsd:complexTypename="Teacher"> <xsd:sequence> <xsd:elementname="born" type="st:NewDate"/> </xsd:sequence> </xsd:complexType> 6 方式定义 6.1 UML方法: a) 定义: i. 图: ii. 生成代码: public class TeacherImpl extendsEObjectImpl implements Teacher { publicvoid doSomething(String par) { throw new UnsupportedOperationException(); } } 6.2 Java方法: a) 定义: i. 代码: /** * @model */ public interface Teacher { /** * @model */ publicvoid doSomething(String par); } 6.3 XML方法: a) 定义: i. 说明:Schema不能定义操作。 返回类别: 教程 上一教程: Java入门笔记9_Socket 下一教程: JavaBean实现多文件上传的两种方式 您可以阅读与"EMF-Ecore模型创建"相关的教程: · EMF-Ecore模型概述 · 虚拟机概论(五)??IBM虚拟机模型 · JBUILDER2005实战JSP之创建数据库表 · 创建JSP站点 · 电子商务模型的JSP、JAVABEAN实现 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |