IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Rational  >

如何使用 Rational Software Architect 将以程序代码为中心的开发移植为以模型为中心的开发

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

讨论


级别: 初级

Aaron Lloyd, New Techologies Evangelist, IBM 

2005 年 6 月 14 日
2005 年 11 月 03 日 更新

为了更有效率地开发高品质的软件,你和你的团队可以受益于模型驱动开发。使用 Rational Software Architect,你可以将以代码为中心的开发移植为以模型为中心的开发。

当今,以模型为中心的开发是软件工程界最热门的话题之一。大家都坚信,将模型驱动开发(MDD)与模型驱动体系结构(MDA)一起用来开发软件是一种极其强大的方法。怎会不是这样呢?使用模型作为集成开发周期的一部分是有很多好处的。首先,这里有两个观点:你项目中想要用的对象以及这些对象与你新系统余下部分的关系,从这两个观点出发,建模应用程序对理解你已经建立好的系统是很有帮助的。

另外, 当应用程序完成时 你可以纵览全部系统的结构,这也是 MDD和MDA的另一个明显的优势。既然可以看到应用程序的全部设计,当出现了问题或者在程序设计和分析时觉得需要扩展它的功能的时候,你就可以直观地修改你的系统了。从最初的设计到开发阶段,它们可以延伸到你应用程序的每一个方面。为什么它们如此重要?因为它保证你可以有效地设计全部的应用程序,可以把那些招致批评的瓶颈和缺点在成为你项目开发时间表上的争论点之前消灭掉。

如果你想获得更多有关MDD 和 MDA或者本文所提到的任何产品的信息,我建议你浏览一下 Resources 部分的内容。

好了,我已经介绍了一些为什么MDD和MDA是如此的重要,那么让我说——我已经使你确信,在软件工程的神圣殿堂里你应该考虑一下要做些什么了。

但是,这里有些小麻烦。对于MDD和MDA你可能会问:

目前我们没有使用以模型为中心的开发技术,我们一直在不断地编写代码,这是我们习以为常的事情。我们如何把你提到的全部建模技术带到我们的工作场所,使得我们可以看到好处并从投资中得到回报?

为了进一步解决这些问题,你在从一种开发方法转变为另一种的过程中会面临许多的障碍。你必须确信把代码转化为模型驱动的开发环境是一种更为直观的方法。而且,你要确信引进这个新的概念以后你将开发出更好的软件,而不会像已往那样引来大量的争论。你的开发环境不仅仅包含了模型驱动优化方法,它还使你的应用软件变得容易应用与配置——以最有效的方法帮你使用上述的概念。

还有很重要的一点就是它可以尽可能多的为你提供正在处理的程序的信息(也许会更多)。这会帮助你理解:

  • 你必须信任这个新方法
  • 新买来的产品(花费了大量的资金)可以尽可能多,尽可能快地向前推进你的开发项目

介绍 Atlantic 系列产品和 Rational Software Architect

如果你一直关注IBM® Rational® 的开发工具产品线,你会知道我们已经发布了一系列名为Atlantic新的产品平台。Atlantic是采用Eclipse 3.0的优点而专门设计出来到的,它把商业,开发,团队运作这几个部分更加紧密地联系在一起。

IBM® Rational Software Architect (RSA) 产品把你从过去使用的以代码为中心的开发领入到本篇文章所讲述的以模型为中心的开发世界。

你使用RSA处理一下你以前开发的代码。然后,你将看到这些代码被移植到模型驱动的开发舞台,这些代码被可视化为RSA内部的UML模型。接下来你将继续以模型为中心的开发方法的冒险旅程,你可以使用附加的UML概念和MDD和MDA的应用软件开发最优方法进一步扩展这个模型(在Rational Software Architect内部创建的)。当然,如果没有详细描述其它的方法,移植的论述就不能算结束,使用RSA和MDD你可以更加高效。正如前面所述,为了提高你使用此产品的效率并了解之前提到的你所不熟悉的概念,我们将讲述各种指南,例子和建立在RSA中的走查。

完成下面的内容就足够了。没有比实际动手做更好的方法,那么让我门来做吧...





回页首


把应用程序代码转为Rational Software Architect

看一下原始代码

在你开始之前,你必须准备一些代码,用来向你演示我们所说的内容。作为准备工作,我们必须在Java中创建一些类,用于访问Microsoft Windows® Internet诊断工具——ipconfig, finger, pingtracert。我们用一个主要的访问类访问他们,这些访问类都是标准的简单java工具(你感兴趣的内容可能还更复杂,不要担心,我们将在以后的IBM® developerWorks® Rational®文章中具体讲述有关的概念)。图 1 和图 2 分别是创建文件以及运行Java代码的例子。

Figure 1: The Java classes we have created
图 1:我们创建的Java类


Figure 2: Run Java code, run!
图 2: 运行Java代码,运行!

尽管这个代码非常容易写出来,但此后我们在分析想法的时候陷入了争论。我们想要写一些代码用于访问Internet,并且花费了一些时间使它可以运行——我们不是在写具体代码的时候遇到了麻烦,而是我们想让这个代码模块化并且富有效率。是的,我们已经写了一个简单的类并使它工作,但这不是关键所在。关键在于可以使这个类可以立即得到扩展与提高。

在你体会到使用新方法所带来的好处之前,你首先需要做的是把这些代码输入到RSA。RSA和你以前使用过的其他集成开发环境(IDEs)很相似:它在Eclipse 3.0下运行, 并且在你开发软件的时候使用操作透视图锁定你想你想关注的特定区域。

Rational Software Architect是什么?

尽管RSA也许和其它你以前用过的IDE很相似,但它的先进之处在于它与程序包的分离。你以前也许的确听说过此类说法,我们来关注此产品中的几个区分器:

  • 需求工件,概念,关联跟踪 (IBM® Rational® RequisitePro®)
  • 模型创建, 图示, 分析和使用UML 2.0转换
  • 在C++下的代码开发,Java/J2EE 平台,和企业生成语言(EGL)
    • 模式,转换和可重用资产
    • 运行时以及静态问题的探测和分析
    • 支持JSF, SDO 和 Web Service
  • 应用测试和部署
  • 软件开发过程指导(IBM® Rational Unified Process®,或RUP®)

它包含了新的IBM® Rational® Application Developer 和 IBM® Rational® Web Developer 工具以及IBM® Rational® Software Modeler 新产品的所有功能, 这些功能使它成为多种项目和任务开发的可靠方案。RSA甚至可以让你通过增加Java pluglet来扩展它的功能,全方位扩展你的程序开发平台。在此我们将讲述更多有关RSA的特征以及项目开发时如何去使用它们,在后叙的文章中将会讲述。

把代码输入到Rational Software Architect并且在UML类图标中可视化应用程序

运行RSA并且创建了Project (Java, naturally)之后,你可以使用菜单项输入你的代码,如图3所示。

Figure 3: Importing our code into Rational Software Architect
Figure 3: 把代码输入到Rational Software Architect
(点击这里放大)

提示:当编写代码的时候,为保证质量你可以使用RSA自动检查你应用程序中的错误。点击 Problems 选项(从任何透视图中你都可以看到它)。如果想获得更多有关它的信息,请阅览帮助文件。

当你把代码输入到RSA后, 转到建模透视图并从此透视图创建了一个UML模型,现在你可以看到UML是如何定义你的工作方法。

现在你也许会想,"这是java代码,为什么我非得要在UML模型中见到它而不是在Java类图中呢?" 你要用这种方法来搞清楚你的代码是如何可视化为UML模型的。因为你已经改变了开发方法,所以理解代码怎样看起来像UML模型是很重要的,阐明采用以模型为中心的开发带来的好处也是以它和其它类型的模型为依据的。

在Modeling透视图让Model Explorer工作,先右击Project名字,然后点击New > UML Model (图 4)。

Figure 4: Creating a new UML model in Rational Software Architect
图 4:在Rational Software Architect上创建一个UML模型
(点击这里放大)

一旦你进行了上面的操作,余下的就是默认的内容了(模板类型 Blank Model,与一个图表类型Class Diagram,我们会一直能看见我们在UML图中输入的类 )。我们给我们的模型命名为 ni_classdiagram ( ni代表net_import, 我们在RSA中项目的名字), 入下面的图 5所示。

Figure 5: Specifying the type of model
图 5: 详细说明模型的种类

为了在RSA中可视化你的类,你需要做的全部工作是把每一个类从Model Explorer拖拽到类图中去。RSA的UML可视化操作允许你用Java组装UML类图。类图建模这个静态系统结构:此项目包括系统以及包含在系统中的项目之间的关系。能够看见你的代码的全部结构以及你的类之间的关系,这是个多么美好的事情。

见图 6,你能看到可视化的应用程序和主访问类是怎样同全部的Internet访问工具联系在一起的。

提示:你还可以快速可视化你的类,只需右击它们并且点击Visualize > Add to Current Diagram.

Figure 6: Viewing your application's structure as a UML class diagram
图 6: 用UML类图显示应用程序的结构
(点击这里放大)

你可以在屏幕上看见这些清楚易懂的应用程序的体系结构,在此之前你是看不到的(除非你很熟悉你代码的每个部分):

  • 访问类有一个主要功能
  • 每一个帮助类都包括了一个构造器类和一个使用类
  • 访问类使用每一个帮助类,用于完成它的目标(被UML使用依赖联系图特征化,其看起来像线状箭头)

这里最关键的地方是你可以同时看见看见类与类之间的关系。当用以模型为中心的开发时,它可以使你在编写代码之前得到一个如何让你的系统实现需要的功能的好主意。在这个例子中,尽管你已经拥有了你的代码,但是模型化你的应用程序会使你更好地理解代码的体系结构和实现的功能,使你更容易更有效地编写代码。即使你已对这个代码很熟悉了,直观地看它可以使你立即清楚你的应用程序是如何构造的。

现在,没有比这更简单的例子了,但是想象一下创建一个比这还要复杂的系统,它里面包含了大量的类,有许多的子系统和接口,与完全不同种类的数据源交互作用(比如数据库)。你想很直观地看到系统以保证没有做错事情——越早看到越好。





回页首


利用Rational Software Architect中附加的建模来理解和改进应用程序体系结构

好的,你已经有了一些Java的代码,把它们输入到RSA中并且通过UML可视化,这时可以看到你全部的的应用程序在一个类图中。 那么,这是以模型为中心的开发所有的好处么?可以肯定地说,不是。我们仅仅看到了模型化系统后为你的工程带来的一个好处,让我们引入几个附加的UML建模类型来帮助你了解其他方面的好处。

使用用例图建模应用程序的行为

之前,我们提到提到过当你编写代码的时候——特别是编写应用程序的时候,最难的部分不是实际的这个代码,而是了解你如何写出灵活和有效的代码。其中一个解决方法是让你理解你想要你的系统如何运行,此方法由MDD(并且通过RSA)帮助实现。为了更好地理解以模型为中心的开发的概念,需要退一步回到源代码并且分析系统的行为。尽管这看起来很奇怪,但是从建模步骤之初开始不但可以帮你更好地理解代码并且将来可以帮助你给其他系统建模。同样,让我们看看使用UML用例图的系统。

用例图是用来建模系统主要功能的结构,可以识别出最初的系统与它的开发环境之间的交互。把你已经创建好的项目和类图作为起始点,创建一个用例图以便使你了解应用程序的行为。

图 7 显示了你如何在RSA中创建一个用例图。 在Model Explorer中,右击你项目中的模型,然后点击 Add Diagram > Use Case Diagram

Figure 7: Creating a use case diagram in Rational Software Architect
图 7: 在Rational Software Architect中创建一个用例图
(点击这里放大)

提示:如果忘记为你的用例图命名,或者想要把默认名字替换为更合适的名字,切换到 Modeling 透视图中的Diagram Navigator,获得全新的用例模型,(应命名为Diagram 1),然后右击它可获得更加详细的菜单。

在此例中,你将会在你的图表中为此前建模的每个工具类创建一个用例,以后它们就代表我们系统的主要功能。因为访问类为你的系统提供与其它块交互的服务,所以在你的图表中,你要建模它为一个主角。

你可以在图 8中看到你的用例图。

Figure 8: Modeling the behaviour of your application as use cases
Figure 8: 建模应用程序的行为作为用例
(点击这里放大)

以上你了解了用例这个系统行为,它很接近地建模了你系统的执行内容。它几乎可以不用声明就运行——当创建一个应用程序时——预期的系统行为不总是和实际系统执行相匹配。可以通过用例,略述系统行为就可以开展软件开发,并帮你创建高质量的应用程序体系结构与设计。在用例的帮助下你可以建模应用程序的功能并且获得所需的条件,于是你可以有效设地计系统并且缩短开发周期。

使用时序图建模应用程序执行流程

当你使用以模型为中心的开发技术创建了一个系统,你自然想知道这个应用程序的执行顺序。建模系统的功能和全部结构是不够的,如果想知道应用程序将要做些什么,你必须详细说明你想让你的应用程序怎样执行那些系统功能。

时序图更进一步地掌握了应用程序的行为,并且使你更加深入地看到各个类之间是如何交互的。时序图利用建模系统的逻辑流程,详细描述了应用程序中各个类之间交互的系统方法,并且允许你对方法的入口和出口进行分类。你可以创建时序图来显示应用程序流程(建模正在编写的应用程序)和实时应用程序流程。(与已经开展的应用程序开发一起工作)。时序图也可以用来建模其他系统的行为,比如使用情景或者附加应用服务(网络服务,商业交易)。如想获得更多的有关时序图的信息,你可以咨询帮助文件或RUP文档 (见 Resources )。

我们编写了一个样本代码并创建了一个时序图以便向你展示一些访问程序的执行流程。图 9是我们创建的时序图的一部分,它详细描述了Ipconfig类与Access进行交互的方法。首先引用Ipconfig构造器方法,然后引用Ipconfig的showDHCP方法以便获得Access类需要的实际数据。

Figure 9:Modeling the flow of our application with a sequence diagram
图 9: 使用时序图建模应用程序的流程
(点击这里放大)

图 9显示了时序图提供的很有价值的功能:你可以精确描绘应用程序的执行(或应该执行)框架。这是MDD和MDA使软件工程更为有效的的另一种方法,因为你可以更深入地看到应用程序的功能。你可以写一行代码来改变你先前设计的应用程序。

为了今后对你的设计进行扩展,你还可以更多地使用RSA中UML 2.0所规范的其他模型和图表。即使本文没有涉及全部的这些模型和图表,但是了解它们是很重要的一件事情,因为它们也许能够帮助你,使你的开发环境适应以模型为中心的工程概念。

RSA中声明的UML 2.0模型和图表包含如下:

  • 活动(Activity)图
  • 状态机(State Machine)图
  • 复合结构(Composite Structure)图
  • 组件(Component)图
  • 部署(Deployment)图
  • 通讯(Communication)图
  • 自由形式(Freeform)图

转换和他们如何将建模工作转成代码结果以扩展你的系统设计

通观全文,你能体会到建模是如何的富有价值,它使得应用程序的体系结构和设计更加有效。首先你把代码转化为类图,这样一来你的代码看起来就像是一个模型。进一步使用MDD,你能看到通过使用例图模型是如何帮你详细描述应用程序,以及通过时序图帮你详细描述应用程序的执行流程。(最后,为你介绍了附加UML模型,你可以使用它来详细描述系统的更多方面)。

不是变简单,而是变得更复杂。上述的全部方法也必许和以下实现方法结合在一起:从使用以模型为中心的方法中获得的好处也必须在模型中创建的代码中实现。否则你因为改变工作方法而获得的效率利润将不复存在。

RSA这个把一种类型转为另一种类型的功能可以让你从设计中获得最大的收益。RSA可以让你转化任何种类,可以把文本文件和UML模型转化为UML,Java, EJB,甚至C++。(你也许还记得,本文的第一部分介绍了如何把你的Java代码转化为UML可视化透视图的)

此前你把代码输入到RSA中去,把它转化成UML,并且创建了其它模型。之后,你将使用这些模型,通过给应用程序增加一些功能扩展你的设计。

图10显示的是为你已建立的用例模型增加新的行为:给应用程序设计增加Netstatthe Java 类(它用于访问netstat Windows 应用工具) 。

Figure 10: Adding the Netstat use case to our diagram
图 10: 在我们的图中增加 Netstat 用例
(点击这里放大)

既然你已经把行为加到用例模型中了,你就应当再次访问类图并且把Netstat 类加到UML中去,如图11所示。你也可以把几个操作加到Netstat中,模仿同级别的其他类所实现的功能。

Figure 11: Updating the class diagram with the Netstat UML class
图11: 更新包含Netstat UML类的类图
(点击这里放大)

为了完成你的更新,你还应该更新时序图,用于给这个新方法(与Netstat类进行交互)建模,因为它类似于其它的,这可能是一个无用的操作,但它决不会破坏完整性。图 12显示了时序图的更新。

Figure 12: The updated sequence diagram (with Netstat operations added)
图 12:更新时序图 (增加Netstat操作)
(点击这里放大)

一旦你对应用程序模块增加了东西,并且检查增加的行为和交互是正确的(它们的行为和你与其的一致),你要进行以下操作去完成你的更新:

  • 转换在类图中的Netstat UML类为Java类
  • 在这个Netstat Java类上增加功能(并且更新访问类)
  • 更新你的模型以保证他们是最新的
  • 检查保证这确实是你想要的结果

首先,你将要转换UML,如图13和14所示。图13显示了已经选定的转换菜单项目。图14 描述了这个转换窗口,涉及了源UML类和你想放置Java的UML目标元素。你还可以指定转换制图的细节以及通常的转换行为。如想获得更多的有关此窗口和通常的转换,你可以查看帮助文件。

Figure 13: Transforming the UML to Java
图 13: 把UML转换为Java
(点击这里放大)


Figure 14: The transformation window
Figure 14: 转换窗口

下面,你就可以给你的新类增加附加的功能了。

在测试你对此应用程序所做的改变之前,首先你要给Netstat类增加功能,如图 15所示。此外,你还要保证Access类知道这个新类,所以我们也要对Access类增加额外的功能。

Figure 15: Adding functionality to the Netstat Java class
图 15: 给Netstat Java类增加功能
(点击这里放大)

当你完成以上工作后,你需要解决保持模型更新这个问题。因此,你将使用RSA的java编辑器,它会给你提供一些特殊的功能,用于编辑Java代码。再此,我们没有涉及编辑器的全部功能,它的特点如下:

  • 代码辅助完成
  • 集成调试
  • 语法突出

想了解Java编辑器的全部特点,请参考帮助文件。

图 16显示了如何使用Java编译器把UML类(之前建模的)替换为在类图中的实际Java副本。

Figure 16: Using the Java editor to update the class diagram
图 16: 使用Java编辑器更新类图
(点击这里放大)

注意: Java 编辑不是一个自动完成的步骤。当更新在RSA中的Java时,你需要手工更新你的图表。

现在,当你完成了所有的工作,你也许想知道这些增加的新代码是否能实际工作。你需要在RSA中进行测试。切换到纠错透视图并在此测试更新过的应用程序。

图 17显示了 debug 透视图的运行对话窗口。注意,工程和主要的类已经指定。

Figure 17: The run dialog box accessed from the debug perspective
图 17: 从 debug 透视图进入的运行对话窗口

一旦你完成了配置对话框,图 18描述了在RSA它的运行。

Figure 18: Testing the new changes by running your code
图 18: 通过运行你的代码来测试新的改变
(点击这里放大)

成功了!

太好了。你已经使用RSA和MDD的概念成功地把一个应用软件从以代码为中心的开发移植为以模型为中心方法的开发,这真是一个好消息。





回页首


使用帮助系统,RUP Process Advisor 和 Process Browser 来增加有关以模型为中心的开发的概念和Rational Software Architect的知识

哇。我们已经介绍了很多有关如何将RSA应用到应用程序上的内容,并且引入了模型驱动开发的范例。其中你必须记住一点,这里有许多其它的功能本文都没有涉及到,这些功能都是你在特定项目开发时可以使用的。RSA可以帮你使用这些功能,特别是当你试图在你当前或今后的工程项目中用到它们。

在RSA中存在大量的有关开发应用程序类型的信息,比如portal,EJB应用软件,以及portlet等。RSA可以帮你理解附加的模型概念并且帮助你获得团队开发的概念。首先,RSA的帮助文件可以帮助你了解重用你可能正在工作的工件的概念。帮助系统包括了向导,指南,例子,以及其它非常有用的内容。

顺便提及,RSA包含了另外两个强大的工具,它们可以帮助你理解本文所讲述的概念。这两个工具是RUP Process Browser 和 RUP Process Advisor。Process Browser 在独立的窗口显示 RUP 帮助,可以使你边开发软件边浏览可能对你有帮助的内容。Process Advisor 给你提供有关图表中元素的指导。你可以在RSA的帮助文件中获得这两个非常有用的工具。

图 19 显示了在建模透视图中Process Advisor窗口,图 20 显示了在RSA帮助菜单内部的指南库。请花费一些时间浏览一下这些有用的资源。你还可以查阅用于RSA常规升级的developerWorks Rational,还可以查阅Atlantic发放产品的其他工具中的更新信息。

Figure 19: The Process Advisor in the modeling perspective
图 19: 在建模透视图中的Process Advisor
(点击这里放大)


Figure 20: The Tutorials gallery
图 20: 指南库
(点击这里放大)





回页首


结论

本文介绍了一个产品并推荐你使用它。此外还帮助你了解了一种新的开发方法,此方法将毫无疑问地改进软件工程的开发方法。你从以代码为中心的开发过渡到以模型为中心的开发的过程将是困难与困惑的,这里有一些工具可以使你的工作——使用RSA变得轻松并且会让你工作时感到精力充沛。

这些产品和技术(是的,包括这些新产品) 是IBM的Software Development Platform 的关键组成部分 —— 一个广范的产品线,服务,和程序,它们可以使你的团队发挥出最大的软件开发潜力。





回页首


感谢

感谢 Lee Ackerman,Khawar Ahmed 和Gary Clarke 对本文的帮助。

感谢你阅读本文!



参考资料



关于作者

Aaron (Rusty) Lloyd 对如何处理技术的了解就像他对如何使用腰刀的了解一样。目前他是Rational Developer这个新科技领域的传道者。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

将您的建议发给我们或者通过参加讨论与其他人分享您的想法.




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款