UML——序列图

   序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。和类图配合使用,关注于不同业务对象之间的交互性,所以在对于交流当前业务如何进行很有用。除记录组织的当前事件外,一个业务级别的序列图能被当作一个需求文件使用,更能体现出一个未来系统的传递需求。在项目的需求阶段,分析师能通过提供一个更加正式层次的表达,把用例带到下一个层次,而且表述出用例之间的业务逻辑关系。在这种情况下,用例常常被细分为一个或者更多的序列图。

   组织的技术人员发现,序列图在记录一个未来系统的行为应该如何表现中,非常有用。在设计阶段,架构师和开发者能使用该图挖掘出系统对象间的交互,这样充实整个系统设计。

   序列图的主要用途之一,是把用例表达式的需求,转化为进一步、更加正式层次的精细表述。用例常常被细化为一个或者多个序列图。序列图除了在设计新系统方面的用途外,他们还能用来记录一个存在系统(称它为“遗产”)的对象现在如何交互。当把这个系统移交给另一个人或组织的时候,文档很有用。

   在面向对象语言中,通常UML设计应用程序的时候,在类图中描述类的静态关系,比如:继承、抽象、接口以及各种关联。但是这是远远不够的,在应用程序中我们还需要描述各种类互相之间的协作关系,动态关系,如时间序列上的交互行为,简单点像参数的传递。其中UML序列图就是用来描述类与类之间的方法调用过程(或消息发送)是如何实现的。

一、UML中的新元素——框架

    在UML 2中,框架元件用于作为许多其他图元件的一个基础,但是大多数人第一次接触框架元件的情况,是作为图的图形化边界。当为图提供图形化边界时,一个框架与元件作为图的标签为图的标签提供一致的位置。在UML图中框架元件是可选择的。

除了提供一个图形化边框之外,用于图中的框架元件也有描述交互的重要的功能,例如序列图。在序列图上一个序列接收和发送信息(又称交互),能通过消息和框架元件边界,建立模型

对于序列图,图的标签由文字“sd”开始。当使用一个框架元件封闭一个图时,图的标签需要按照以下的格式:图类型 图名称

UML规范图类型提供特定的文本值。(举例来说,sd代表序列图,activity代表活动图,use case代表用例图)

二、UML中的序列图

  序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互。

  在项目的需求阶段,分析师能通过提供一个更加正式层次的表达,把用例带入下一层次。这种情况下,用例常常被细化为一个或者更多的序列图。

   序列图的主要通途之一,就是把用例表达式的需求,转化为进一步、更加正式层次的精细表达。用例常常被细分为一个或者更多的序列图。序列图除了在设计新系统方面用途外,他们还能用来记录一个存在系统(成为“遗产”)的对象在如何交互。

   序列图主要目的是定义事件序列,产生一些希望的输出。重点不是消息本身,而是消息产生的顺序;不过,大多数序列图会表达一个系统对象之间传递什么消息。以及他们发生的顺序。图按照水平和垂直的维度传递信息:垂直维度从上而下表示消息/调用发生的时间序列,而且水平维度从左到右表示发送对象的实例。

  1、生命线:

   生命线画作一个方格,一条虚线从上而下,通过底部边界的中心,生命线名字放置在方格里。

UML的生命线命名标准按照如下格式:实体名:类名

生命线名称带下划线。当使用下划线时,意味着序列图的生命线代表一个类的特定实体,不是特定种类的实体(例如,角色)。序列图的实例名称有下划线,而角色名称没有

  一个生命线能用来表现一个匿名或未命名的实体。当在一个序列图上,为一个未命名的实例建模时,生命线的名字采用和一个命名实例相同的模式;但是生命线名字的位置留下空白,而不是提供一个例图名字。

2、消息体

  为了显示一个对象(例如,生命线)传递一个消息给另外一个对象,你画一条线指向接受对象,包括一个实心箭头(如果一个同步调用操作)或一个棍形箭头(如果一个异步讯号)。消息/方法名字放置在带箭头的线上面。正在被传递给接受对象的消息,表示接受对象的类实现的一个操纵/方法。

返回消息是可选择的;一个返回消息画作一个带开发箭头的虚线,向后指向来源的生命线,在这条虚线上面,你放置操作的返回值。为了要画一个调用本身的对象,如你平时所作的,画一条信息,但是不是连接它到另外一个对象,而是你把消息连接回对象本身。

三、UML中的约束

约束的符号很简单;格式是:[Boolen Test]

四、UML中新元素一组合碎片(变体方案,选择项,循环)

  一个组合碎片用来吧一套信息组合在一起,在一个序列图中显示分支。

1、变体

   变体用来指明在两个或更多的消息序列之间的,互斥的选择。一个变体的组合碎片元件使用框架来画。单词”alt“放置在框架的namebox里。然后较大的长方形分为UML 2所称的操作元。操作元被虚线分开。每个操作有一个约束进行测试,而这个约束被放置在生命线顶端的操作元的左上部。如果操作元的约束等于”True“,然后这个操作元就是要执行的操作元。

作为一个变体的组合碎片如何阅读的例子,显示序列从顶部开始,即Bank对象获取支票金额和账户结余。此时,序列图中的变体组合碎片接管。因为约束”[balance>=amount]“,如果余额超过等于金额,然后顺序进行bank对象传递addDebitTransaction和storePhotoOfCheck消息给account对象。然后,如果余额不是超过或等于金额,然后顺序的过程就是bank传递addInsuffientFundFee和noteReturnCheck消息给account对象returnCheck消息给它自身。因为”else“约束,当金额不大于或者等于金额时,第二个序列被调用。在变体组合碎片中,不需要”else“约束;而如果一个选择元,在它上面没有一个明确的约束。那么将假定”Else“约束。

2、选择项

一个选择项用来简单的”If then“表达式建模。(例如,如果架上的圈饼少于五个,那么另外定做两个圈饼)

选择项组合碎片符号与变体组合碎片类似,除了它只有一个操作元并且不能有”else“约束以外(它就是如此,没有理由)。要画一个框架。文字”opt“是被放置在框架的namebox里的文本,在框架的内容区,选择项的约束被放置在生命线顶端的左上角。然后选择项的消息被放在框架内容区其余位置内。

注意:变体用于为if then else建模,选择项用于为if then建模,因为只有一个分支,所以不能出现[else]

3、循环

    循环组合碎片表面非常类似选择组合碎片。你画一个框架,在框架的namebox中放置文本”loop“。在框架内容中,一个生命线的顶部,循环约束被放置在左上角。然后循环的消息被放在框架内容其余部分。在一个循环中,除了标准的布尔测试外,一个约束能测试二个特定条件格式。特定的约束条件式是写作”minint=[the number]“(例如,”minint=1“)的最小循环次数,或写作”maxint=[the number]“(例如,”maxint=5“)的最大循环次数。通过最小循环检验,循环必须运行至少指定次数,而循环执行次数不能达到约束指定的最大循环次数。

参照:http://www.cnblogs.com/panjun-Donet/archive/2008/10/20/1315014.html

原文地址:https://www.cnblogs.com/zhijianliutang/p/2349641.html