eUML2是一款基于Eclipse应用程序的UML建模工具。开发者可以在UML开发过程中将模型转化为Java代码:确保软件质量和减少开发时间。
eUML2分为两种版本: eUML2免费版集合了Java开发者所需要的所有基本特性:
类/包图编辑器
序列图编辑器
Ecore图编辑器
实时代码/模型同步
模型导入/导出 包括OMG XMI格式
支持PNG, JPG, 和SVG格式导出图表
视图
颜色参数
模型助手
可以免费使用(甚至可以用于商业目的)。
eUML2商业版是免费版的扩展,增加一些新的和改进的特性。
eUML2可以通过下载安装或通过下面的url直接在Eclipse里更新安装:
http://www.soyatec.com/update
目前只是支持UML Class Diagram 和 UML Sequence Diagram.
以下是我做的一个Sample Of UML Class Diagram:
1.Policy_UML.ucd(UML文件)
<?xml version="1.0" encoding="UTF-8"?>
<editmodel:ClassDiagramEditModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:editmodel="editmodel.xmi" xmlns:options="options.xmi" name="Policy_Uml" size="977,916" id="com.euml2.uml" metadata="uml2-1.0" initialized="true" tag="1000" key="32303037303533312D3130303020546573745F50726F6A6563742F4A616D736F6E204875616E67">
<children xsi:type="editmodel:ClassEditModel" targetConnections="//@children.1/@sourceConnections.0" name="ContractMstBean" location="120,180" size="150,189" id="com.euml2.Bean/ContractMstBean" runTimeClassModel="getPolicyStatus(),setInsertTime(Ljava.util.Date;),UserId,setUserId(Ljava.lang.String;),PolicyStatus,getInsertTime(),getPolicyCode(),InsertTime,PolicyId,getContractPrdBean(),ContractMstBean(),setPolicyCode(Ljava.lang.String;),getPolicyId(),getPolicyInfo(Ljava.lang.String;Ljava.lang.String;),setPolicyStatus(I),setContractPrdBean(Ljava.util.List;),getUserId(),PolicyCode,setPolicyId(J)">
<children xsi:type="editmodel:CompartmentEditModel" size="106,90">
<children xsi:type="editmodel:AttributeEditModel" name="InsertTime" id="com.euml2.Bean/ContractMstBean#InsertTime"/>
<children xsi:type="editmodel:AttributeEditModel" name="PolicyCode" id="com.euml2.Bean/ContractMstBean#PolicyCode"/>
<children xsi:type="editmodel:AttributeEditModel" name="PolicyId" id="com.euml2.Bean/ContractMstBean#PolicyId"/>
<children xsi:type="editmodel:AttributeEditModel" name="PolicyStatus" id="com.euml2.Bean/ContractMstBean#PolicyStatus"/>
<children xsi:type="editmodel:AttributeEditModel" name="UserId" location="10,82" id="com.euml2.Bean/ContractMstBean#UserId"/>
</children>
<children xsi:type="editmodel:CompartmentEditModel" size="127,36">
<children xsi:type="editmodel:MethodEditModel" name="ContractMstBean" id="com.euml2.Bean/ContractMstBean#ContractMstBean()"/>
<children xsi:type="editmodel:MethodEditModel" name="getContractPrdBean" id="com.euml2.Bean/ContractMstBean#getContractPrdBean()"/>
</children>
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<sourceConnections xsi:type="editmodel:GeneralizationEditModel" autoLocated="true" id="com.euml2.Impl/ContractMstImpl<-com.euml2.Bean/ContractMstBean" source="//@children.0" target="//@children.2" targetEnd="//@children.0/@sourceConnections.0/@children.1" sourceEnd="//@children.0/@sourceConnections.0/@children.0" connectionRouterKind="Manual">
<children xsi:type="editmodel:AssociationEndEditModel" location="77,0" attachSource="true"/>
<children xsi:type="editmodel:AssociationEndEditModel" location="71,57"/>
</sourceConnections>
<classifierPreferences xsi:type="editmodel:UMLClassDiagramClassifierPreference" showStereotype="true" attributeSorter="Natural" methodSorter="Natural" innerClassSorter="Natural" showPrivateAttributes="true" showProtectedAttributes="true" showPublicAttributes="true" showPackageAttributes="true" showPublicMethods="true" showPackageMethods="true" showStaticMethods="true" showProtectedInnerClasses="true" showPublicInnerClasses="true" showPackageInnerClasses="true" packageIndication="3"/>
</children>
<children xsi:type="editmodel:ClassEditModel" name="ContractPrdBean" location="620,165" size="150,171" id="com.euml2.Bean/ContractPrdBean" runTimeClassModel="PolicyId,InsertTime,ProductStatus,getProduct(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;),ProductName,ContractPrdBean(),ProductId">
<children xsi:type="editmodel:CompartmentEditModel" size="121,90">
<children xsi:type="editmodel:AttributeEditModel" name="PolicyId" id="com.euml2.Bean/ContractPrdBean#PolicyId"/>
<children xsi:type="editmodel:AttributeEditModel" name="ProductId" id="com.euml2.Bean/ContractPrdBean#ProductId"/>
<children xsi:type="editmodel:AttributeEditModel" name="ProductName" id="com.euml2.Bean/ContractPrdBean#ProductName"/>
<children xsi:type="editmodel:AttributeEditModel" name="ProductStatus" id="com.euml2.Bean/ContractPrdBean#ProductStatus"/>
</children>
<children xsi:type="editmodel:CompartmentEditModel" size="112,36">
<children xsi:type="editmodel:MethodEditModel" name="ContractPrdBean" id="com.euml2.Bean/ContractPrdBean#ContractPrdBean()"/>
<children xsi:type="editmodel:MethodEditModel" name="getProduct" id="com.euml2.Bean/ContractPrdBean#getProduct(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)"/>
</children>
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<sourceConnections xsi:type="editmodel:AssociationEditModel" name="Policy-Product" autoLocated="true" id="com.euml2.Bean/ContractMstBean@contractMstBean+com.euml2.Bean/ContractPrdBean@contractPrdBean" source="//@children.1" target="//@children.0" targetEnd="//@children.1/@sourceConnections.0/@children.1" label="//@children.1/@sourceConnections.0/@children.2" sourceEnd="//@children.1/@sourceConnections.0/@children.0" connectionRouterKind="Manhattan">
<children xsi:type="editmodel:AssociationEndEditModel" name="contractPrdBean" location="0,92" id="com.euml2.Bean/ContractMstBean@contractMstBean+com.euml2.Bean/ContractPrdBean@contractPrdBean|com.euml2.Bean/ContractPrdBean#contractPrdBean" attachSource="true" multiplicityLabel="//@children.1/@sourceConnections.0/@children.0/@children.1" roleLabel="//@children.1/@sourceConnections.0/@children.0/@children.0" navigable="true" orderingKind="1">
<children xsi:type="editmodel:LabelEditModel" name=" + contractPrdBean" location="528,236" size="93,14" fontInfo="Arial-8-0" anchorKind="FirstPart"/>
<children xsi:type="editmodel:LabelEditModel" name="1..*" location="605,264" size="16,14" fontInfo="Arial-8-0" anchorKind="FirstPart"/>
</children>
<children xsi:type="editmodel:AssociationEndEditModel" name="contractMstBean" location="150,77" id="com.euml2.Bean/ContractMstBean@contractMstBean+com.euml2.Bean/ContractPrdBean@contractPrdBean|com.euml2.Bean/ContractMstBean#contractMstBean" multiplicityLabel="//@children.1/@sourceConnections.0/@children.1/@children.1" roleLabel="//@children.1/@sourceConnections.0/@children.1/@children.0" navigable="true">
<children xsi:type="editmodel:LabelEditModel" name=" - contractMstBean" location="277,236" size="92,14" fontInfo="Arial-8-0" anchorKind="LastPart"/>
<children xsi:type="editmodel:LabelEditModel" name="1" location="277,264" size="6,14" fontInfo="Arial-8-0" anchorKind="LastPart"/>
</children>
<children xsi:type="editmodel:WireLabelEditModel" name="Policy-Product" size="69,14" fontInfo="Arial-8-0" anchorKind="MiddlePart"/>
</sourceConnections>
<sourceConnections xsi:type="editmodel:GeneralizationEditModel" autoLocated="true" id="com.euml2.Impl/ContractPrdImpl<-com.euml2.Bean/ContractPrdBean" source="//@children.1" target="//@children.3" targetEnd="//@children.1/@sourceConnections.1/@children.1" sourceEnd="//@children.1/@sourceConnections.1/@children.0" connectionRouterKind="Manual">
<children xsi:type="editmodel:AssociationEndEditModel" location="72,0" attachSource="true"/>
<children xsi:type="editmodel:AssociationEndEditModel" location="72,57"/>
</sourceConnections>
<classifierPreferences xsi:type="editmodel:UMLClassDiagramClassifierPreference" showStereotype="true" attributeSorter="Natural" methodSorter="Natural" innerClassSorter="Natural" showPublicAttributes="true" showPackageAttributes="true" showStaticAttributes="true" showPublicMethods="true" showPackageMethods="true" showStaticMethods="true" showPublicInnerClasses="true" showPackageInnerClasses="true" showStaticInnerClasses="true" packageIndication="3" showAttributeProperty="true"/>
</children>
<children xsi:type="editmodel:InterfaceEditModel" targetConnections="//@children.0/@sourceConnections.0" name="ContractMstImpl" location="126,15" size="144,57" id="com.euml2.Impl/ContractMstImpl" runTimeClassModel="">
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<classifierPreferences xsi:type="editmodel:UMLClassDiagramClassifierPreference" showStereotype="true" attributeSorter="Natural" methodSorter="Natural" innerClassSorter="Natural" showPublicAttributes="true" showPackageAttributes="true" showStaticAttributes="true" showPublicMethods="true" showPackageMethods="true" showStaticMethods="true" showPublicInnerClasses="true" showPackageInnerClasses="true" showStaticInnerClasses="true" packageIndication="3" showAttributeProperty="true"/>
</children>
<children xsi:type="editmodel:InterfaceEditModel" targetConnections="//@children.1/@sourceConnections.1" name="ContractPrdImpl" location="620,30" size="145,57" id="com.euml2.Impl/ContractPrdImpl" runTimeClassModel="">
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<children xsi:type="editmodel:CompartmentEditModel" size="0,0"/>
<classifierPreferences xsi:type="editmodel:UMLClassDiagramClassifierPreference" showStereotype="true" attributeSorter="Natural" methodSorter="Natural" innerClassSorter="Natural" showPublicAttributes="true" showPackageAttributes="true" showStaticAttributes="true" showPublicMethods="true" showPackageMethods="true" showStaticMethods="true" showPublicInnerClasses="true" showPackageInnerClasses="true" showStaticInnerClasses="true" packageIndication="3" showAttributeProperty="true"/>
</children>
<children xsi:type="editmodel:NotepadEditModel" location="255,180" size="106,26" fontInfo="Arial-8-0" note="保单主类"/>
<children xsi:type="editmodel:NotepadEditModel" location="525,165" size="96,26" fontInfo="Arial-8-0" note="险种主类"/>
<diagramOptions xsi:type="options:ClassDiagramOptions" properties="wireOptions=1;Product=eUML2" autoName="false"/>
<boardSetting snapToGeometry="true" gridEnabled="true" gridSpacing="15,15" gridOrigin="0,0" rulerUnit="pixel" gridVisibility="false">
<leftRuler/>
<topRuler/>
</boardSetting>
<classDiagramPreferences xsi:type="editmodel:UMLClassDiagramPreference" showPopupBars="true" showConnectionHandles="true" attributeSorter="Natural" methodSorter="Natural" showClassStereotype="true" showPackageStereotype="true" showDependencyStereotype="true" showInterfaceStereotype="true" innerClassSorter="Natural" showPublicAttributes="true" showPackageAttributes="true" showStaticAttributes="true" showPublicMethods="true" showPackageMethods="true" showStaticMethods="true" showPublicInnerClasses="true" showPackageInnerClasses="true" showStaticInnerClasses="true" packageIndication="3" showAttributeProperty="true"/>
</editmodel:ClassDiagramEditModel>
2.对应生成的Java文件:
package com.euml2.Bean;
import java.util.Date;
import java.util.List;
import com.euml2.Impl.ContractMstImpl;
/**
* @author Huiwen.Huang
*/
public class ContractMstBean implements ContractMstImpl {
/**
* get policy info
*/
public String getPolicyInfo(String policyId, String policyCode){
return policyId+" "+policyCode;
}
/**
* @uml.property name="PolicyId"
*/
private long policyId;
/**
* Getter of the property <tt>POLICY_ID</tt>
* @return Returns the policy_ids.
* @uml.property name="PolicyId"
*/
public long getPolicyId() {
return policyId;
}
/**
* Setter of the property <tt>POLICY_ID</tt>
* @param POLICY_ID The policy_ids to set.
* @uml.property name="PolicyId"
*/
public void setPolicyId(long policyId) {
this.policyId = policyId;
}
/**
* @uml.property name="PolicyCode"
*/
private String policyCode = "";
/**
* Getter of the property <tt>POLICY_CODE</tt>
* @return Returns the policy_codes.
* @uml.property name="PolicyCode"
*/
public String getPolicyCode() {
return policyCode;
}
/**
* Setter of the property <tt>POLICY_CODE</tt>
* @param POLICY_CODE The policy_codes to set.
* @uml.property name="PolicyCode"
*/
public void setPolicyCode(String policyCode) {
this.policyCode = policyCode;
}
/**
* @uml.property name="InsertTime"
*/
private Date insertTime;
/**
* Getter of the property <tt>INSERT_TIME</tt>
* @return Returns the insert_time.
* @uml.property name="InsertTime"
*/
public Date getInsertTime() {
return insertTime;
}
/**
* Setter of the property <tt>INSERT_TIME</tt>
* @param INSERT_TIME The insert_time to set.
* @uml.property name="InsertTime"
*/
public void setInsertTime(Date insertTime) {
this.insertTime = insertTime;
}
/**
* @uml.property name="UserId"
*/
private String userId = "";
/**
* Getter of the property <tt>User_Id</tt>
* @return Returns the user_Id.
* @uml.property name="UserId"
*/
public String getUserId() {
return userId;
}
/**
* Setter of the property <tt>User_Id</tt>
* @param User_Id The user_Id to set.
* @uml.property name="UserId"
*/
public void setUserId(String userId) {
this.userId = userId;
}
/**
*/
public ContractMstBean(){
}
/**
* @uml.property name="PolicyStatus"
*/
private int policyStatus;
/**
* Getter of the property <tt>PolicyStatus</tt>
* @return Returns the policyStatus.
* @uml.property name="PolicyStatus"
*/
public int getPolicyStatus() {
return policyStatus;
}
/**
* Setter of the property <tt>PolicyStatus</tt>
* @param PolicyStatus The policyStatus to set.
* @uml.property name="PolicyStatus"
*/
public void setPolicyStatus(int policyStatus) {
this.policyStatus = policyStatus;
}
/**
* @uml.property name="contractPrdBean"
* @uml.associationEnd multiplicity="(1 -1)" ordering="true" inverse="contractMstBean:com.euml2.Bean.ContractPrdBean"
* @uml.association name="Policy-Product"
*/
private List contractPrdBean;
/**
* Getter of the property <tt>contractPrdBean</tt>
* @return Returns the contractPrdBean.
* @uml.property name="contractPrdBean"
*/
public List getContractPrdBean() {
return contractPrdBean;
}
/**
* Setter of the property <tt>contractPrdBean</tt>
* @param contractPrdBean The contractPrdBean to set.
* @uml.property name="contractPrdBean"
*/
public void setContractPrdBean(List contractPrdBean) {
this.contractPrdBean = contractPrdBean;
}
}
附件为Policy_UML.ucd文件。
更多可以查看:http://www.soyatec.cn/euml2/features/eUML2%20Modeler/classdiagrameditor/