
2.4 双向工程
Rational Rose支持UML模型与编程语言之间的相互转换,采用的解决方案是双向工程(Round Trip Engineering,RTE)方案。
双向工程包括正向工程和逆向工程,正向工程是通过Rational Rose模型生成代码的过程,逆向工程是分析Java代码并将其转换成Rational Rose模型的类和组件的过程。Rational Rose允许从Java源文件(.Java文件)、Java字节码(.Class文件)以及一些打包文件中进行逆向工程。
2.4.1 正向工程
正向工程是从模型直接产生一个代码框架,这个框架可以使开发人员的思路更加清晰,从而为开发人员节约大量用于编写类、属性、方法代码的工作时间。
正向工程的操作方法是根据需要在Rational Rose中进行设置及选择相应的语言,即执行【Tools】| 【Options】命令,在弹出的【Options】对话框中,激活【Notation】选项卡,在【Default】下拉列表中选择相应的语言,例如选择【Java】选项。

在Rational Rose中,可以将模型中的一个或多个类图转换为Java、C++等源代码,其生成代码的具体方法包括下列4个步骤。
1.检查模型
生成代码的第1步是检查模型,以查找模型中存在的一些问题和不一致性,从而确保代码生成的正确性。
执行【Tools】|【Check Model】命令,对整个模型进行检查,查找模型中的一些不确定的问题。
2.类映射到构件
虽然在生成Java、C++或Visual Basic代码时,Rational Rose会自动创建每个类的构件,但在生成代码之前还需要将类映射到相应的源代码构件中。
选择构件图或“浏览器窗口”中用于实现类的构件图标,右击该图标并执行【Open Specification…】命令,在弹出的对话框中,激活【Realizes】选项卡,启用【Show all classes】复选框。然后,在列表中找到所需要实现的类,右击该类执行【Assign】命令。

3.设置代码生成属性
设置代码生成属性会直接影响生成语言的代码框架。执行【Tools】|【Options】命令,在弹出的对话框中激活所要生成语言的选项卡,例如激活【Java】选项卡,查看Java属性标签。

4.生成代码
选择所需生成代码的模型或模型元素,执行【Tools】|【Java/J2EE】|【Project Specification】命令,在弹出的对话框中激活【ClassPath】选项卡,单击【确定】按钮,添加新的路径。

打开设计好的类图,选中要生成Java文件的类,执行【Tools】|【Java/J2EE】|【General Code】命令,在弹出的对话框中选择所需生成的内容,单击【OK】按钮,即可生成Java代码。

此时,系统会根据选择内容生成多个代码文件,其生成的代码如下图所示。从下图中可以发现所生成的Java文件格式非常标准,这有助于开发人员进行查看和编写,在此基础上可以按照功能需求对其方法进行实现。对于可能涉及并生成的接口,其方法是抽象的,因此没有代码。在添加代码过程中,如果需要对其增加注释,则要按照生成注释的规范进行,因为其注释风格是“JavaDoc”风格。

2.4.2 逆向工程
逆向工程就是利用源代码中的信息创建或更新Rational Rose模型。通过语言插件,Rational Rose支持多种语言的逆向工程。
在逆向工程转出代码的过程中,Rational Rose从源代码中寻找类、属性和操作、关系包、构件等逆向工程的源代码信息,Rational Rose对它们进行模型化处理后得出一个新的模型。
以正向工程中的Admin.java为例,其逆向工程的实现步骤如下。
首先,执行【Tools】|【Java/J2EE】|【Reverse Engineer】命令,在弹出的对话框中,选择所需转换的文件,单击【Add】按钮,添加到列表中。然后,再单击【Select All】按钮选中所需导出的文件。最后,单击【Reverse】按钮,进行逆向工程。完成后,单击【Done】按钮,关闭对话框。
