连载:面向对象葵花宝典:思想、技巧与实践(21) - SSD

用例图是用来描述系统的,而SSD(系统序列图)又是来描述用例的,oh my god,这不是在玩我们么?

System Sequence Diagram,缩写为SSD(注意不要与SSD硬盘混淆),中文翻译为“系统顺序图”,主要用于描述某个用例的某个分支场景下,外部参与者与系统的交互过程。简单来说:SSD就是用例的可视化描述。

 

细心的朋友可能会发现,前面我们在介绍“用例方法”的时候说不需要画图,这里又说SSD是用来描述用例的,这不是互相冲突了么?

 

事实上并不冲突,原因在于:用例方法分析需求的时候,确实不需要图;但用例方法分析完成后得到的用例,我们可以使用SSD让用例更直观一些。

 

SSD有几点需要特别注意:

1)SSD不是标准的UML图形:UML只有顺序图、用例图,但是没有一个专门的“系统顺序图”;之所以叫做“系统”顺序图,是因为这个顺序图中只有两类对象:系统、与系统交互的对象;

2)SSD是用来描述某个用例的某个分支,而不是描述系统的结构;

3)画SSD的时候,整个系统被当做一个黑盒,不涉及系统的分解;

4)不需要为每个用例每个分支都画一个SSD,挑出关键的用例和分支即可;

 

有的朋友可能会有疑问:如何知道哪些用例的哪些分支是关键的呢?

 

我的答案是:你认为是关键的你就画,你认为不是关键的你就不画;如果你认为所有的用例都很关键,那么所有的用例你都画即可,只要你不怕麻烦或者工作量太大;如果你认为所有的用例都很简单,那么一个都不画也可以。至于你的判断是否正确,主要靠经验积累,当经验不够的时候,也可以求助有经验的人。

 

以POS机为例,假如我们认为POS机的正常处理流程是关键分支,则对应的SSD如下:

 

仔细对照SSD和POS机的用例,我们会发现SSD和用例基本上是对应的,但并不完全对应,例如:

Ø 用例中第1步是“顾客携带选择好的商品到收银台”,但SSD中第1步是开始交易;

Ø 用例中“顾客将钱交给收银员”,但SSD中并没有对应的步骤;

Ø 用例中最后一步是“买单完成,顾客携带商品和小票离开”,但SSD中最后一步是“交易结束”;

 

为什么会出现这种不对应的情况呢?

主要原因在于:用例是整个业务的流程,而SSD是站在系统的角度来描述系统与外部对象的交互,这就需要我们在画SSD的时候做一些技巧性的处理:

Ø 删除系统无关的业务步骤

例如上述的“顾客将钱交给收银员”,这个步骤和POS机没有关系,因此无需体现,再说了,就算你想体现,你也体现不了;

Ø 将业务语言转换为系统语言

例如用例中是描述“顾客携带选择好的商品到收银台”,但对应系统来说,这就意味了“交易开始”;同样,“买单完成,顾客携带商品和小票离开”意味着“交易结束”。

 

有的朋友可能会认为,应该在用例分析的时候就应该详细写清楚。例如,“买单完成,顾客携带商品和小票离开,收银员告诉POS机交易结束”。

这种想法本身没错,但问题在于,理想和现实总是有差距的,用例不可能那么完善,甚至有的时候用例可能都存在错误,如果我们自己没有一定的分析和理解能力,完全依赖原始的用例,这样做是不可能设计出优秀的系统的,甚至连合格的系统都可能做不到。

 

综合上面的分析,我们可以看到,SSD虽然来源于用例,但还需要在用例的基础上稍微加工一下,使得SSD能够更加聚焦于“系统”这个主角。

 

最后小小吐槽一下:用例图是用来描述系统的,而SSD又是来描述用例的,oh my god,这不是在玩我们么?

================================================ 
转载请注明出处:http://blog.csdn.net/yunhua_lee/article/details/21728601
================================================ 

时间: 2024-10-24 08:42:18

连载:面向对象葵花宝典:思想、技巧与实践(21) - SSD的相关文章

连载:面向对象葵花宝典:思想、技巧与实践(28) - 设计原则:内聚&耦合

前面通过实例讲解了一个一环扣一环的面向对象的开发流程:用例模型 -> 领域模型 -> 设计模型(类模型 + 动态模型),解答了面向对象如何做的问题.接下来我们就要讲"如何做好面向对象设计"的技巧了 =================================================================== [内聚] 参考维基百科的解释,内聚的含义如下: cohesion refers to the degree to which the eleme

连载:面向对象葵花宝典:思想、技巧与实践(1) - 程序设计思想的发展

史前时代:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据.简单来说,就是直接编写0和1的序列来代表程序语言.例如:使用0000 代表 加载(LOAD),0001 代表 存储(STORE)等.  机器语言由机器直接执行,速度快,但一个很明显的缺点就是:写起来实在是太困难了,一旦你发现自己写错了,改起来更蛋疼!这样直接导致程序编写效率十分低下,编写程序花费的时间往往是实际运行时间的几十倍或几百倍.  有一个关于机器语言和比尔盖茨的笑话,是说比尔

013_《Delphi面向对象编程思想》

<Delphi面向对象编程思想> Delphi 教程 系列书籍 (013) <Delphi面向对象编程思想> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 刘艺 [作译者介绍] 丛书名: Borland核心技术丛书 出版社:机械工业出版社 ISBN:7111127722 上架时间:2003-10-10 出版日期:2003 年9月 开本:16开 页码:476 版次:1-1 内容简介 这是一本纯粹讨论dlephi面向对象编程的力作. 本书以精

Silverlight游戏设计:(五)面向对象的思想塑造游戏对象

传说,面向对象的开发模式最初是因为程序员偷懒而不小心诞生的.发展至今,人们从最初的热忠于 讨论某某语言是否足够面向对象到现在开始更广泛的关注面向对象的思想而不是具体内容.面向对象的思 想其实并不深奥,它存在的目的只有一个:让程序开发更贴近我们的现实世界. 还记得猫.猫叫:狗.狗吃东西吗?无数的程序员都喜欢将此类似的情形设计当作面向对象最好的例 子.是的,非常生动且形象:但实际运用中你是否能真正做到举一反三? 回述到游戏设计中,大家是否时常会感觉游戏世界与我们的真实世界如此贴近?游戏中的精灵好比我

java语言学习002_面向对象编程思想

      人类在认识世界时,为了方便自己和智慧提升,很自然的对事物进行了分类.对世界进行了抽象,若把所有各个事物看做对象,纵观所有对象,这些对象具有各自的或共有的特征,并且又有共有的或各自的的能力,这样就可以对具有相同一些特征和一些能力的事物进行了归类.       比如,车,有汽车,火车他们都有哪些属性?                  汽车,特征:长度,颜色,速度,轮胎,载重,平面行走--能力:移动,载东西,--                  火车,特征:长度,颜色,速度,轮胎,载重

求助、面向对象的思想查找字符串中的数字

问题描述 要用面向对象的思想来查找字符串中的数字.实现判断某个字符是否位数字的方法如下:publicstaticboolgetNumeric(stringstr){boolb=false;string[]ArrayInt=newstring[]{"1","2","3","4","5","6","7","8","9","

将面向对象的思想带入TC

写TC貌似是很简单的工作,但当动手写的时候往往会出现,不知道写什么,又感觉有一堆的东西需要写,即使一个简单的日常也会觉得里面的逻辑非常复杂,然后就是晕得不知所向. 个人认为,写TC没有固定的模式,也没有唯一的答案,每个人的方式不同,习惯不同,TC中的如何分类归纳也就自然不相同.但目标是一致的,基本目标是覆盖需求.无盲区:加强目标是加深测试点,完善用户友好性等. 下面分享下我写TC的几种思路. 第一种思路--先对象,后流程 面向对象是在平常入门学习中 首先接触到的概念,它不仅仅存在于代码的编写中,

重温面向对象的思想——构造器和重载

1.this关键字 this表示这个对象的参考名称:例如this.age1=age2;表示将age2的值,赋值给这个对象的私有属性age1. 2. .重温面向对象的思想--构造器和重载 构造器:创建一个对象时,有时候需要对在实例化一个对象时,对这个对象进行初始化,这个时候我们就需要构造方法来进行这种初始化. 重载:当这种初始化需要按照不同的语境,不同的参数的构造器来进行初始化. 总结--方法的重载是多种构造器,用以完成不同的初始化. -注意:构造器==构造方法,两者一样 3.构造方法和自定义方法

重温面向对象的思想OOP——封装

面向对象的思想OOP--封装 对象的封装: 封装的目的:隐藏对象的内部细节,将对象进行黑箱操作.用户是不知道对象的内部细节的,同样的道理,用户也不知道你定义的方法. 说明:一个对象(类)的属性,这个属性必须一定是私有属性,用户一定不能直接获取得到属性,必须通过你定义的工程来操作数据(设置.得到), 标准格式:通过定义私有属性的Set方法和Get方法来分别设置.得到私有属性. package demo; public class Student { private double schoolCod