
3.2 Rational Rose对UML的支持
像UML这样一种既复杂又覆盖面广泛的建模语言,它的使用需要良好的建模工具来支持,如果没有很好的工具进行支持,那么大量的UML图的维护、同步,以及提供一致性等工作几乎是不可能实现的。Rational Rose建模工具能够为UML提供很好的支持,下面从以下六个方面来进行说明:
(1)Rational Rose为UML提供了基本的绘图功能。为UML提供基本的绘图功能是Rational Rose作为一个建模语言工具的基础。Rational Rose提供了众多的绘图元素,形象化的绘图支持使得绘制UML图形变得轻松有趣。Rational Rose工具不仅对UML的各种图中元素的选择、放置、连接以及定义提供了卓越的机制,还提供了用以支持和辅助建模人员绘制正确图的机制。当图中的一个元素用法不当或一个特定操作与其他的操作不一致时,Rational Rose就会向用户发出一条警告信息。例如,在用例视图中,如果创建了一个名称为“教师”的类,那么再到逻辑视图中创建一个“教师”的类时就会出现一条警告信息为“Class‘教师’now exists in multiple name spaces”。
Rational Rose同时也提供了对UML的各种图的布局设计的支持,包括允许建模人员能够重新排列各种元素,并且自动重新排列那些表示消息的直线,以便这些直线互不交错。
(2)Rational Rose为模型元素提供了存储库。Rational Rose的支持工具维护着一个模型库,这个模型库相当于一个数据库,该数据库中包含模型中使用的各种元素的所有信息。这个模型库包含了整个模型的基本信息,用户可以通过各种图来查看这些信息,如图3-1所示。

图3-1 Rational通用模型库示例
Rational Rose通用模型库提供了一个包含了来自于所有图(这些图是为了确保模型的一致性)的全部信息的模型库,并且该模型库使得通用工具能够进行文档化和重用。
借助于模型库提供的支持,Rational Rose建模工具可以执行以下几项任务:
- 非一致性检查。如果某个元素在一个图中的用法与其他图中的不一致,那么Rational Rose就会提出警告或禁止这种行为。
- 审查功能。利用Rational Rose模型库中的信息,我们可以通过Rational Rose提供的相关功能对模型进行审查,指出那些还未明确定义的部分,显示出那些可能的错误或不合适的解决方案。我们可以通过选择“Tools”(工具)下的“Check Model”(审查模型)选项来进行模型信息的审查。
- 报告功能。Rational Rose可以通过相关功能产生关于模型元素或图的相关报告,例如,我们可以选择“Report”(报告)下的“Show Usage”(显示使用情况)选项来报告在图中的某个模型元素的使用情况,假设选择的是一个类,名称为“教师”,如果这个类没有被使用到,就会出现这样的提示信息:“No Diagrams where class教师is used”。
- 重用建模元素和图功能。对于已创建的模型,Rational Rose支持重复使用这个模型中的模型元素和图,这样,在一个项目创建的建模方案或部分方案可以很容易地重用于另一个项目的建模方案。在Rational Rose中,提供了单元控制(Unit Control)功能,通过该功能可以在多人协作分析设计时,每个人可以通过它来实现不同的包。
(3)Rational Rose为各种视图和图提供了导航功能。为了给用户带来方便,Rational Rose工具提供了导航功能,这种导航功能不仅适用于各种模型的系统,也便于用户的浏览。在Rational Rose左侧的树型浏览器中,用户可以方便地浏览各个模型元素或图。在Rational Rose中,用户不仅可以方便地浏览不同的图,并且可以搜索某个模型元素。例如,假设一个类的名称为“教师”,位于一个用例图中,另外在一个协作图中也存在该类的实例化对象,可以通过选择“报告”|“显示实例化信息”(Report | Show Instances)来查看“教师”类实例化的信息。如图3-2所示。
在Rational Rose的每一个模型元素中,都具有关于这个模型元素的一些超链接信息,这些链接信息在图上通常是看不到的,只能通过UML工具来访问它们。我们可以通过Rational Rose提供的一些功能来访问这些信息,例如当用户选择某个模型元素并用鼠标右键单击该元素时,在该模型元素的右侧会出现一个菜单,在这个菜单中列举出了一些常用操作,同时为用户提供了相关功能的导航操作,例如查看该元素的相关规格说明,或者是关于类的一些属性和操作信息。另外,Rational Rose还允许用户对UML图中的某些内容部分进行展开和收合操作。例如Rational Rose允许用户展开包来查看整个包的内容,之后将展开的包收合起来,以便查看它周围的其他包。

图3-2 显示“教师”类的实例化信息
在Rational Rose中还提供了一些功能来处理复杂的图,如“ref”“par”等,通过这些功能可以分离出或突出显示用户对该图感兴趣的部分,并且还能够针对图中的某些部分进行细化。
(4)Rational Rose提供了代码生成功能。Rational Rose的代码生成功能可以针对不同类型的目标语言生成相应的代码,这些目标语言包括C++、Ada、Java、CORBA、Oracle、Visual Basic等。这种由Rational Rose工具生成的代码通常是一些静态信息,例如类的有关信息,包括类的属性和操作,但是类的操作通常只有方法(Method)的声明信息,而方法主体内通常是空白的并不包含实际的代码,需要由编程人员自己来填补。
现在假设一种代码生成的情况,如果已经从Rational Rose的模型中生成了相应的代码,并开始编写各种方法主体的代码,但是接着又对这些模型进行了修改,这时会发生什么事情呢?是不是根据更新后的模型再次生成代码框架时,手工编写的那些代码就会丢失呢?事实上,情况并非如此。那些由Rational Rose工具生成的代码包含了标志,这些标志显示了哪段代码是由模型生成的,而哪段代码则是由编程人员手工编写的。当从模型重新生成代码时,代码生成器不会涉及手工编写的代码部分,因此这部分代码也就不会丢失。针对如何生成代码,在本章中后面将进行详细的讲解。
(5)Rational Rose提供了逆向工程功能。逆向工程与代码生成功能正好相反。利用逆向工程功能,Rational Rose可以通过读取用户编写的相关代码,在进行分析以后,生成并显示出与用户代码结构相关的UML图。一般来说,根据代码的信息只能创建出静态结构图,如类图,然后依据代码中的信息列举出类的名称、类的属性和相关操作。但是,从代码中无法提取那些详细的动态信息。
(6)Rational Rose提供了模型互换功能。当利用不同的建模工具进行建模时,常常会遇到这样一种情况:在一种建模工具中创建了模型并将其输出后,接着想在另外一种建模工具中将其导入,由于各种建模工具之间提供了不同的保存格式,这就造成了导入往往是不可能实现的。为了实现这种功能,一个必要的条件就是在两种不同的工具之间采用一种用于存储和共享模型的标准格式。标准的XML元数据交换(XML Metadata Interchange,XMI)模式就为UML提供了这种用于存储和共享模型的标准。最新版本的Rational XDE提供了XMI的内在支持,关于XMI的更多信息,可以查阅OMG的XMI相关规范。