`
xiebh
  • 浏览: 613000 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

uml时序图

阅读更多

引用自:http://www.kecourser.com/free/uml/page1/Java_UML.php

Java 与 UML 交互图

  

  本文讨论的是一种 UML 图——交互图(Interaction Diagram)。交互图描述的是一组对象之间的交互过程,或者说,这里我们实际上要回答这样一个问题:“方法调用过程在UML中怎样表示?”

  UML 交互图

   本文将通过一个非常简单的交易系统来说明 UML 交互图。这个系统包含六个 Java 类。从前面几篇文章中,我们已经知道 UML 类图是分析 Java 程序结构的有效方法,图一显示了这个交易和支付系统的类图。为了更清楚地说明各个类的职能和角色,图一利用了前面介绍过的彩色类原型表示法。

图一 一个简单交易系统的 UML 类图

   如果我们跟踪任意一个 Java 程序的执行过程,就会发现,这个过程包含了一个或者多个对类和对象的方法调用。我们通过调用对象的方法来寻求特定问题的答案或执行一个特定的动作。很多时 候,被调用的方法还会调用其他方法——或者是同一对象的方法,或者是同一类的其他对象的方法,或者是其他类的对象的方法。类似地,这些被调用的方法又会继 续调用其他方法,直至问题得到了明确的答案或动作全部执行完毕(或者出现异常,这时问题将没有答案或动作不能完成)。

  UML 交互图以图形的形式表示出方法调用过程,它有两种形式:序列图(Sequence Diagram)和协作图(Collaboration Diagram)。

  序列图

  要达到某个特定的目标,必然要执行一系列的方法调用。UML 序列图的典型用途就是显示出方法调用过程。图二显示了一个交易事务中计算累计金额的序列图,调用从 Sale 类的 calcTotal() 方法开始,相关的代码片断在序列图之后给出。

   术语说明:UML 把操作(Operation)定义为方法的特征(Signature)。“方法”(Method)这一术语被保留给实现操作的代码。但在 Java 环境中, “方法”这一术语的应用范围更广泛一些。在 UML 序列图中,调用一个操作就叫做发送一个消息(Message)。序列图实际上阐述了操作的具体实现,所以下面我们会较多地用到“方法”这个术语(偶尔也会 用到“消息”这个术语)。

图二 计算交易总金额的序列图

/** 属于Sale类:

* 从lineItem的单项金额计算交易总金额

* @return 交易总额 */

public double calcTotal() {

total = 0.0;

Iterator i = lineItems.iterator();

while (i.hasNext()) total += ((LineItem)i.next()).calcTotal();

return total;

}

/** 属于LineItem类:

* 计算当前项目的交易金额

* @return 交易金额

*/

public double calcTotal() {

total = product.calcTotal(this);

return total;

}

/** 属于Product类:

* 计算指定数量的产品价值多少

* @return 金额

*/

public double calcTotal(LineItem li) {

return amount * li.getQuantity();

}

   为了便于把握序列图的总体情况,图一只显示了方法的名称。详细的序列图可以显示出方法的参数和返回值。在序列图中,对象以常规的 UML 符号显示,即使用与对象所属的类一样的形状或符号(默认是矩形),再注明对象的名称,加上一个冒号,再加上相应的类名称。然后再为整个名字加上下划线(例 如,图二中的 aProduct:Product)。可以省略对象的名字(例如图二中的:Sale),也可以省略类的名字(例如图二的Sender),但两者都省略显然 是不允许的。如果省略了类的名字,冒号必须保留。

  时间的流逝方向是从上到下的垂直 方向。每一个对象有一条顺着页面垂直向下的生命线(Lifeline),紧接着表示对象的矩形。方法调用的表示方式是,画一根从发出调用的对象的生命线指 向被调用对象生命线的箭头。只要对象的任意方法处于执行状态,对象的生命线加宽。加宽之后的生命线称为“活动条”(Activation Bar),活动条可以嵌套,表示在前一方法的执行过程中,又有同一对象的另一个方法被调用,图二的getQuantity() 方法示范了活动条嵌套的一个例子。

  方法的返回值可以通过虚线开叉箭头的形式表示,但这是可选的,例如图二中从:Sale 指向 Sender 的箭头。

  如果要在一个对象的集合上进行迭代操作,则在方法的名字前面加上一个星号(再在方括号里面说明循环条件,可选)。在图二中,Sale 类对 LineItem 类对象的调用给出了迭代操作的一个例子。

  就象 UML 类图一样,原本需要查看多个源代码文件才能了解的信息,通过一个 UML 序列图就可以表示出来。对已有的代码实施反向工程获得对应的序列图,可以帮助不熟悉代码的开发者快速了解程序的工作流程。

   图三显示了 Sale 类 complete() 方法的序列图,它对调用次序(消息)进行了编号。complete() 方法调用了 Sale 类的另外两个方法,即 calcTotal() 和 calcPayments()。图三用环形的回调符号表示一个对象正在调用它自身的方法。

图三 完成一次交易的序列图

   如果序列图很大,可能出现一个屏幕无法显示出来的情况。在图三中,通过设置建模工具 Together ControlCenter 的选项面板,类的名称不再和对象名称并列显示,而是显示在对象名称的下方,减少了显示对象所需的水平空间。如果类的名称很长,用这种显示方式可以有效地缩 减图形宽度,一般能够改善图形的可读性。然而,如果要严格遵从最新的 UML 规范,类的名称必须和对象名称并列放置,中间用冒号分隔,如图二所示。

   complete() 方法调用了 calcTotal() 方法,图二显示的 calcTotal() 序列是图三 complete() 序列的结果。如果要简化图三,我们可以省略图三的 Product 对象以及它与 LineItem 对象的交互,让读者在查看这部分内容时参考图二。和类图中面临的细节处理问题一样,到底是否要省略(或者说,详细到哪种程度),也必须根据用户的需要而 定。例如,一些序列图的读者可能希望注明各种标准的 Java 类,例如迭代器、封装器、集合类等。虽然序列图可以显示出要用到的循环和分支结构,但通常而言,这一层次的细节最好让读者在序列图的指导下通过阅读 Java 源代码获得。

  图四是利用 Together ControlCenter 对 Sale 类的 complete() 实施反向工程,并要求它给出所有细节信息所得到的序列图。对于大多数人来说,这里的细节信息可能太多了一点。但是,图四也说明了一个问题,正如 exception 对象所显示的:在序列执行期间创建的对象画在它被创建的位置,而不是序列图的顶端。

图四 利用工具生成的详细序列图

  就象我们在讨论类图时遇到的情况一样,UML 规范为序列图也提供了大量有细微差别的符号,不过本文说明的符号已经足以让你入门了。

  协作图

   UML 交互图的另一种形式是协作图(Collaboration Diagram)。协作图和序列图在语义上相同,但协作图排列对象的方式比较自由,完全由绘图者的喜好决定。在协作图中,交互动作的次序由消息的编号决 定。一些人偏爱这种绘图方式,许多功能比较完善的 UML 工具允许用户将一个图在协作图符号和序列图符号之间来回转换。一些开发者建议,用协作图来显示组件之间的交互过程,用序列图来显示组件内部各个类的交互过 程。图五显示的协作图等价于图二显示的序列图,图六的协作图和图四的序列图一样。

图五 与图二等价的协作图

图六 与图四等价的协作图

   结束语:在实践中,许多必需的交互序列可以隐含在类图之中,特别是类图用类原型和 Stereotype 来表示特定的行为和交互模式之时。UML 交互图把原本隐含的交互过程明确地表达出来,同时也明确地说明了原本在类图中不明确的交互过程。换句话说,UML 交互图是对倾向于描述静态特征的类图的补充,使得对象的动态交互过程明确化。

分享到:
评论

相关推荐

    UML时序图画法,有详细步骤和例子

    uml时序图画法,项目过程中到的。 UML时序图画法,有详细步骤和例子

    UML 时序图 课件 ppt

    UML 时序图知识点总结 时序图是 UML 中的一种交互图,强调消息时间顺序,描述对象之间传送消息的时间顺序,用来表示用例中的行为顺序。时序图将交互关系表示为一个二维图,其中,纵轴是时间轴,时间沿竖线向下延伸...

    StartUML时序图画法教程

    总结来说,"StartUML时序图画法教程"将详细阐述如何利用StartUML有效地创建和编辑时序图,涵盖了对象定义、消息传递、高级特性和注解的使用,是学习和提升UML建模技能的理想资源。通过深入学习并实践这个教程,你将...

    软件工程(uml时序图)

    在这个场景下,"软件工程(uml时序图)"的标题指的是使用UML时序图来分析和设计软件系统,特别是针对“jabc”系统的连接封装部分。 描述中提到的“jabc的连接封装”可能指的是一个数据访问层或者数据库连接管理的...

    UML时序图教程

    UML时序图教程

    基于UML时序图的自动化验证方法与应用.rar

    《基于UML时序图的自动化验证方法与应用》探讨了在软件开发过程中,如何利用统一建模语言(UML)中的时序图进行系统行为的建模与自动化验证。时序图是UML中最直观、最常用的表示交互和协作关系的工具,它通过对象...

    UML时序图例程

    UML时序图例程,学校作业大家可以下载看看

    UML时序图——汽车销售

    利用UML实现汽车销售的时序图,步骤清晰,简明。其中包括交易中可能出现的各种角色

    UML时序图-登录时序图

    时序图是一种UML(统一建模语言)图,用于说明对象之间的时序和交互。 在这张时序图中,展示了用户登录系统的过程。首先,用户向系统发送登录请求。系统接收到请求后,验证用户的身份和凭据。如果验证成功,系统将...

    UML时序图模型到UPPAAL时自动机模型转换方法研究和工具实现

    UML时序图模型到UPPAAL时自动机模型转换方法研究和工具实现 master

    sso单点登录最详细Demo(赋UML请求时序图)

    **UML时序图** UML(Unified Modeling Language)是一种标准的建模语言,其中时序图描述了对象间的交互顺序。在这个SSO Demo中,时序图可能展示了用户、浏览器、应用系统和CAS服务器之间的交互过程,包括消息传递的...

    基于UML时序图的自动化验证方法与应用.pdf

    因此,UML时序图在设计阶段难以被用来发现潜在的设计缺陷。 为了解决这个问题,本文提出了一种将UML时序图转换为Promela语言描述的方法。Promela是一种用于描述并验证并发系统的高级形式化建模语言。Promela可以被...

    网上购书uml用例图时序图

    **时序图** 又称为序列图,是UML中另一种重要的表示方法,用于描述对象之间交互的顺序。在购书系统中,时序图可能会展示如下场景: 1. 用户登录:游客输入用户名和密码,系统验证后允许登录。 2. 图书订购:用户...

    支付宝电子支付系统UML时序图,电子支付流程

    支付宝电子支付系统UML时序图,电子支付流程 支付类app,网站产品设计时可参考支付宝的电子支付全流程

    UML时序图绘制基础教程-0基础不要错过哟

    时序图(Sequence Diagram),亦称为循序图、序列图、顺序图,是一种UML行为图。(翻译为时序图,实际上是不准确的,sequence这个单词并无“时间”的意思,只有序列,顺序等意思。)根据UML规范中对Sequence Diagram...

    mybatis-sql的执行过程

    mybatis-sql的执行过程,UML时序图,UML时序图,UML时序图,UML时序图,UML时序图 mybatis-sql的执行过程,UML时序图,UML时序图,UML时序图,UML时序图,UML时序图 mybatis-sql的执行过程,UML时序图,UML时序图,...

    UML讲义(时序图)

    UML时序图知识点总结 UML(Unified Modeling Language)是软件开发过程中的一种标准化的建模语言,时序图(Sequence Diagram)是UML中的一种交互图,用于描述对象之间的交互行为和消息传递顺序。 时序图的概念 ...

    fate_1.5.1执行UML时序图.svg

    fate执行时序图,清晰描述工作流程。

    UML-时序图总结.doc

    ### UML时序图知识点详解 #### 一、UML时序图概述 **时序图**(Sequence Diagram)是UML(Unified Modeling Language,统一建模语言)中的一种交互图,主要用于展示系统中对象之间的交互关系及其发生的顺序。通过...

Global site tag (gtag.js) - Google Analytics