Rational Rose正向工程与逆向工程
一、正向工程
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 下可以看到相关的组件模型;将类模型拖动到类图中,即可看到类之间的关系: