UML系列 - 序列图知识总结

2017-03-08 22:24:05

请关注唯心的个人微信公众号:craft6-cn(中划线,也可以搜索:领域驱动业务建模)

UML系列 - 序列图总结



作者 | 颜超敏

个人网站:craft6.cn


1
进度压力下要不要画序列图?

    现在软件项目的迭代越来越快,一般不会有太多的前期设计时间,而且往往企业主,管理者对软件的开发过程并不是十分了解(或者存在盲目乐观,认为程序员无所不能,),对工期的限定可能会不切实际。层层压缩下,UML设计过程就变得可有可无了。


    软件开发中,开发者的三种面向对象设计方式:

  1. 直接编码 开发者一般在草稿上简单画一下,然后凭着自己的想象直接在IDE开发工具中开发(类、接口、继承等),但这非常依赖开发者的经验,他无法凭着想象写出超出自己的水平的编码。

  2. 绘简单图,然后编码

    通过记事本或者UML工具画简要的图型,然后编码,编码过程中根据思路反复调整UML图型。

  3. 绘详尽图,然后生成代码

    即所谓的【正向工程】,把UML模型直接映射为代码,妄想着模型解决一切,这样的功能和期望已不适合时代潮流了。


    前面第二种方式,通过绘制简要的常用图型来理清思路是比较合适,不会太耗时,磨刀不误砍柴工。


    那么UML这 5 种主要图型在项目是否真的可有可无呢?

  1.  用例:系统的功能点归纳,配合规格说明,是开发、测试和维护的依据。但有时会被功能清单代替。

  2. 序列图:对象交互建模,往往被忽略,由产品经理通过页面流来代替,但页面流仅是分析界面层面的序列。

  3. 活动图:对于复杂的流程是无法绕开的,流程图都不正确,开发出来的东西肯定是错的。

  4. 状态图:对于有状态的领域模型(比如订单)才需要,这种情况下状态图是绕不开的,否则状态流都不对,怎么编码也都不对了。

  5. 类图:面向对象设计阶段的最终产出,设计原则和设计模式的体现,优质代码的基础,但依然会被一些程序员所忽略。


    所以,序列图还是有绘制的必要的,它可以让我们从整体的角度来观察和分析一个业务的走向,而不是只是关注界面或者只是关注类、接口等。


2
序列图的作用

    序列图也称顺序图。

    英文:Sequence Diagram

    序列图是笔者认为的五种必学的UML图型之一,在UML1.1版本中,有两种交互图:序列图和通讯图,1.2版本增加了交互概括图和时序图,但序列图依然是UML交互图的首选,并且UML的交互图规范更多的是以序列图为核心,所以交互图学好序列图就可以了。


    序列图的一系列作用:

  1. 序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互,对于交流当前业务如何进行很有用。

  2. 序列的对象并不是局限于类对象,可以是界面、硬件设备等,对于全面了解一些行为从发起、传输、处理、返回和异常处理的全过程非常有用。

  3. 序列图能被当作一个需求文件使用,为实现一个未来系统传递需求。


3
序列图要素 - 参与者和生命线
  • 参与者和用例图中的参与者概念一致,表示发起本次交互行为的人、系统或设备。

  • 生命线:表示和参与者发生交互的系统、界面、设备和软件模块。一般从左到右是逐步的细化,有设备、界面到内部细节。生命线主要有两种:

    • 边界生命线:设备、界面或者子系统等。

    • 生命线:常规生命线,一般用于表示模块、类或接口等。

4
序列图要素 - 消息
  • 消息定义

    指参与者和生命线,生命线之间或者生命线本身的信息传递。

  • 消息和传回消息

    • 序列图最基本的消息类型,一般有消息就有传回消息

    • 对于事件(观察者模式)可能没有传回消息

    • 消息为实线箭头

    • 传回消息为虚线箭头

  • 自身消息

    • 用嵌套的活动条表示对象发送给自身的消息。

    • 比如清空缓存、保存日志、发布事件等都可以用自身消息

  • 递归消息

    • 用来表示递归类型、递归算法的消息类型。

    • 表现形式也是传递给生命线自身。

5
序列图要素 - 图框

     图框是序列图中比较复杂的环节,一般简单的序列图就是从参与者开始,逐层传递消息 和 传回消息直到结束。

    但我们知道一般的业务都是没有这么简单的,所以这时需要图框来帮助我们表达更复杂的业务。

    比如如下图:

    这是电商网站,顾客查看购物车或者更改购物车中选中的商品的序列图。

    图中有两类生命线,界面用边界生命线表示,其它为普通生命线。

    图中涉及两类图框,alt为判断(即if else),loop为循环。

    【注】图框是可以嵌套的,如上图,alt图框中就嵌套了loop图框。    


    下面为常见图框类型的介绍:

类型

说明

opt

可选。 包含一个可能发生或可能不发生的序列。 可以在临界中指定序列发生的条件。

alt

包含一个片段列表,这些片段包含备选消息序列。 在任何场合下只发生一个序列。

可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。如果所有临界都为 False 并且没有 else,则不执行任何片段。

loop

片段重复一定次数。 可以在临界中指示片段重复的条件。

Loop 组合片段具有“Min”“Max”属性,它们指示片段可以重复的最小和最大次数。 默认值是无限制。

break

如果执行此片段,则放弃序列的其余部分。 可以使用临界来指示发生中断的条件。

par

并行处理。 片段中的事件可以交错。

critical

用在 Par 或 Seq 片段中。 指示此片段中的消息不得与其他消息交错。

seq

有两个或更多操作数片段。 涉及同一生命线的消息必须以片段的顺序发生。 如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。

strict

有两个或更多操作数片段。 这些片段必须按给定顺序发生。


    使用UML Visual Paradigm来画图时,可以通过右键点击图框的左上角(标识位置),在弹出的层中选择操作种类来切换:

    


6
通过 ref 图框来简化序列图

    对比前面的序列图,这里将促销规则的细节涵盖在促销规则生命线下面的一个 ref 类型的图框中。

    右键该图框,可以选择:参照 xxx 序列图。


7
更多序列图的参考例子

【注】最后两张图是网上找的,供读者参考借鉴。

    说明:本图重点看loop、alt和opt三种图框,alt中分为if else两部分,当大于$10000时走上面的分支,否则走下面。 loop和alt存在嵌套。 


    说明:本图涉及loop和alt两种图框,还涉及自身消息的使用。上面生命线涉及边界生命线和实体生命线(最右侧那个,比较少用的一种生命线,可以用普通生命线来代替)




可通过扫描左侧二维码阅读本文。本站文章均为颜超敏原创,欢迎转载,请注明出处即可,转载可通过下面的社会化工具快速完成。

分享到:


UML系列 - 序列图知识总结

uml,序列图

序列图是UML交互图的首选,并且UML的交互图规范更多的是以序列图为核心,所以交互图学好序列图就可以了。序列图主要用于按照交互发生的一系列顺序,显示对象之间的这些交互,对于交流当前业务如何进行很有用。

颜超敏,唯心六艺,Craft6.cn,电子商务博客,电子商务研发,电商研发,电子商务研究,电商研究,电子商务专家,电商专家,电子商务知识,电商知识,电子商务教程,电商教程,电子商务模式,电子商务平台,电子商务商业模式,电子商务数据库设计,电商数据库设计,电子商务系统分析,Java架构设计,Java软件架构,B2C,O2O,o2o模式,o2o电子商务,o2o电子商务平台,中国电子商务,电子商务平台建设方案
粤ICP备14060523号 Copyright @2014 -唯心六艺软件