一、正向工程

1、简介

Rational Rose的正向工程是将UML模型转换为具体语言代码的过程;在软件系统设计完成后,可以使用正向工程,直接将UML模型生成程序代码,提高开发效率。

2、UML模型

3、转换

  • 设置默认语言为Java

在 Tools – Options – Notation 菜单中,设置默认语言为Java:

  • 设置ClassPath

在 Tools – Java/J2EE – Project Specification 菜单 Classpath 页签中,新增 ClassPath 为保存生成的Java文件的目录:

  • 生成Java代码

选中类模型,点击 Tools – Java/J2EE – Generate Code

生成的代码如下:

//Source file: C:\\Users\\albert\\Documents\\Java\\Student.java

public class Student 
{
   private Integer id;
   private String name;
   private Date birthday;
   
   /**
    * @roseuid 5C8E0E2C01E5
    */
   public Student() 
   {
    
   }
   
   /**
    * @return Integer
    * @roseuid 5C8E03150346
    */
   public Integer getId() 
   {
    return null;
   }
   
   /**
    * @param id
    * @roseuid 5C8E032B01BC
    */
   public void setId(Integer id) 
   {
    
   }
   
   /**
    * @return String
    * @roseuid 5C8E034C006E
    */
   public String getName() 
   {
    return null;
   }
   
   /**
    * @param name
    * @roseuid 5C8E035B0305
    */
   public void setName(String name) 
   {
    
   }
   
   /**
    * @return Date
    * @roseuid 5C8E03740221
    */
   public Date getBirthday() 
   {
    return null;
   }
   
   /**
    * @param birthday
    * @roseuid 5C8E03800356
    */
   public void setBirthday(Date birthday) 
   {
    
   }
}

选中类模型,点击 Tools – Java/J2EE – Edit Code 菜单,可以修改生成的Java文件内容:

  • 选项配置

在 Tools – Java/J2EE – Project Specification 菜单 Code Generation 页签中可以对生成Java代码做相关设置:

去掉默认勾选的 Generate Rose ID,重新生成:

//Source file: C:\\Users\\albert\\Documents\\Java\\Student.java

public class Student 
{
   private Integer id;
   private String name;
   private Date birthday;
   
   public Student() 
   {
    
   }
   
   /**
    * @return Integer
    */
   public Integer getId() 
   {
    return null;
   }
   
   /**
    * @param id
    */
   public void setId(Integer id) 
   {
    
   }
   
   /**
    * @return String
    */
   public String getName() 
   {
    return null;
   }
   
   /**
    * @param name
    */
   public void setName(String name) 
   {
    
   }
   
   /**
    * @return Date
    */
   public Date getBirthday() 
   {
    return null;
   }
   
   /**
    * @param birthday
    */
   public void setBirthday(Date birthday) 
   {
    
   }
}

二、逆向工程

1、简介

Rational Rose的逆向工程是将具体语言的代码转换为UML模型的过程;可以使用逆向工程,通过程序源代码得到软件的设计模型。

2、Java源码

package org.jgraph.graph;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class DefaultPort extends DefaultGraphCell
  implements Port
{
  protected HashSet edges = new HashSet();
  protected Port anchor;

  public DefaultPort()
  {
    this(null, null);
  }

  public DefaultPort(Object paramObject)
  {
    this(paramObject, null);
  }

  public DefaultPort(Object paramObject, Port paramPort)
  {
    super(paramObject);
    setAllowsChildren(false);
    this.anchor = paramPort;
  }

  public Iterator edges()
  {
    return this.edges.iterator();
  }

  public boolean addEdge(Object paramObject)
  {
    return this.edges.add(paramObject);
  }

  public boolean removeEdge(Object paramObject)
  {
    return this.edges.remove(paramObject);
  }

  public Set getEdges()
  {
    return new HashSet(this.edges);
  }

  public void setEdges(Set paramSet)
  {
    this.edges = new HashSet(paramSet);
  }

  public Port getAnchor()
  {
    return this.anchor;
  }

  public void setAnchor(Port paramPort)
  {
    this.anchor = paramPort;
  }

  public Object clone()
  {
    DefaultPort localDefaultPort = (DefaultPort)super.clone();
    localDefaultPort.edges = new HashSet();
    return localDefaultPort;
  }
}

3、转换

  • 打开逆向工程

点击 Tools – Java/J2EE – Reverse Engineer 菜单,打开 Java 逆向工程界面:

  • 转换Java文件

转换成功后,在左侧的 Logical View 下可以看到相关的类模型,在 Component View 下可以看到相关的组件模型;将类模型拖动到类图中,即可看到类之间的关系:

备注:如果转换的类依赖了其他的类,则需确保依赖的类也在ClassPath中配置。