让技术人员看得懂的流程(上)

走出用例图误区 <br />    uml初学者,大部分都是从认识用例图开始。记得我刚学uml的时候,导师就再三跟我强调,uml只是一门工具,不是为了画图而画图。这句话听来并不难理解,但真要在实际项目中领悟参透还是需要一段时日的。它反应在各种需求建模的细节中。<br />    uml用例图也并未很难画,各种用例的间的关系也不是很难理解。对于初学者来说,很容易把重点放到uml用例图上,而忽视了用例文本(用例规格说明)的编写。高手提取几个用例会很轻松,但要编写严格、干净、逻辑性强的用例文本却非易事。所以,用例文本的编写很容易 阅读详情

面向对象设计全流程概述

        谈到流程,大家都会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型、敏捷、RUP等流程成为项目流程,也就是说这是给项目管理用的;而本文的流程是技术流程,是给技术人员(主要是设计人员)看的流程。

在开始讲解之前,看看如下问题你是否能够回答?

1、客户的需求是描述性的,例如“我们需要一个POS机”,而代码是一个一个具体的类和函数,那么如何从描述性的语言最后转化到具体的类和函数呢?

2、具体语言的特性,例如Java和C++的private、protected、public这些属性是从哪里来的?什么时候设计的?

3、不管什么代码,最后都要运行在具体的平台上,如Windows、Linux、UNIX等,那么这些平台相关的进程、线程什么时候设计、如何设计?(不要说你所有的产品都是单线程或者单进程哈:-P)

4、如果是稍微大一点的产品,需要运行在多台机器上,那么如何确定需要多少机器?如何分工?

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

怎么样?以上这些问题是否似曾相识,或者自己是否考虑过?

如果你的第一反应是去翻开《软件工程》、RUP、敏捷开发等相关著作,那么我可以很肯定的告诉你你会失望的,就像前面提到的,这些东西不是管理流程的事情,而是技术流程的事情。

如果你心有疑问,或者不敢肯定自己的答案,那么“不懂的人有福了”,因为我将通过几篇短的博文和一个实例来简明概要的讲述这个流程,概要的讲,主流程如下:

用例模型->领域模型->设计模型->实现模型->进程模型->部署模型

实例就用一个简单的POS机系统来讲解,欲知详情如何,且听下回分解!

 

用例模型

      一般的管理流程都将软件项目划分为“需求->分析->设计->实现->维护”,对应的技术流程中首先也肯定是要将需求明确,而“用例模型”就是用于获得和分析需求的。

简单来说,用例模型就是要将客户的需求写下来。“需求”不是很好理解,更加通俗的讲法是“故事(story)”。我觉得“故事”这个词非常好,非常形象,非常容易理解!我们看看为什么“故事”更加容易适合说明客户要求:

(1)故事中有很多角色,而需求中也有很多角色;

(2)故事有具体的经过,有开始、进行、结束;而需求也是一个完整的流程,有输入、处理、输出。

(3)故事必须有意义,而需求对客户来说,也是必须有意义的;

 

具体的用例格式等这里就不详细描述了,大家上网搜索一下就知道了,如何更好的把握需求可以参考我的博文《需求分析的故事——如何练就需求分析的火眼金晴?》,下面我把用例模型阶段容易犯的错误重点说明一下。

1)“需求”和“功能”混淆

很多朋友在分析需求的时候,将“功能”和“需求”混淆起来,导致了需求的粒度不合理,或者把握不住重点的需求,我总结出一个很简单的区分办法:“需求是对客户有价值的东西,功能是为了实现需求而作的东西”。

以POS机为例:对于客户来说,“买单”是一个有价值的东西,因为客户买完单就可以把商品拿走了;而买单过程中的“读商品条形码”、“计算商品总额”、“打印购物清单”等都是功能,因为它们当中任何一个独立的功能对客户没有价值(你不会跑到超市“读商品条形码”玩吧:-P),只是为了实现“买单”而做的。

2)在用例模型阶段进行系统分解

除了容易将“功能”和“需求”混淆外,用例模型阶段还有一个常见的错误就是在用例模型阶段对系统进行分解。

以POS机为例,有的人将需求描写为:扫描机扫描商品条形码信息,然后将信息发给库存系统,库存系统返回详细的商品信息给交易系统……在用例模型阶段这样做是不对的,因为这样转移了我们的注意力:从关注用户需求转到了系统分析了。

记住:用例模型关注的是用户需求,不需要进行系统分解,把系统当做一个黑盒看待就可以了。

 

下面我们给出POS机一个简单的用例片段,有兴趣的可以自己写一个完整的(这个完整的可不简单哦,至少可以写3页):

1)顾客携带商品到收银台;

2)收银员扫描商品条形码;

3)系统根据条形码获取并显示商品信息;

4)收银员重复2~3步,直到所有商品扫描完毕;

5)系统计算商品总额;

。。。。。。。。。。。。。。。。。。。。

n)系统打出商品清单,完成交易。

 

 领域模型

 

         按照一般的项目管理过程,“需求”之后是“分析”,那么在分析阶段对应的技术流程又是哪个?如何将需求阶段和分析阶段联系起来呢?答案就是“领域模型”

什么是“领域模型”呢?只要抓住“领域(Domain)”二字就可以理解,也就是说领域模型是帮助我们理解相关领域知识的模型。

进一步来问:为什么需要领域模型?前面不是有“用例模型”吗,看起来用例模型好像就是描述相关领域知识的,是否完成用例模型就可以进行设计了?

如果你曾经写过用例文档,或者仔细看过用例文档,那么你肯定知道“用例”本身和“面向对象”、“类”这些都没有关系,用例就是纯自然的语言(比如英语、汉语)写的,因为用例实际上由客户口述给我们、然后由我们形成文档化的用例文档,客户才不管我们是什么面向对象还是面向过程还是阿猫阿狗的。

因此,单纯从用例来看,是没有类的概念的,无法完成从自然语言到面向对象语言的转换。但是,既然我们已经完成了用例模型,那么就必须基于用例模型进行分析(否则用例模型岂不是白做了),而“领域模型”就是自然语言向面向对象语言的一座桥梁。

让我们来看看“领域模型”阶段我们要做什么、该怎么做。其实很简单,简单概括就是“找名词”,分为四个步骤:(1)找出用例模型中的名词,(2)然后识别这些名词本身的相关信息,(3)以及名词之间的相互关联关系,(4)用UML画出领域模型。

我们来看在“用例模型”章节中的POST用例如何得出领域模型。

第一步:找出用例模型中的名词

原有用例如下,用蓝色加黑标出名词(重复的就不标了):

1)顾客携带商品到收银台;

2)收银员扫描商品条形码;

3)系统根据条形码获取并显示商品信息;

4)收银员重复2~3步,直到所有商品扫描完毕;

5)系统计算商品总额;

。。。。。。。。。。。。。。。。。。。。

n)系统打出商品清单,完成交易。

这个用例中的名词有“顾客”、“商品”、“收银台”、“收银员”、“商品条形码”、“系统”、“商品信息”、“商品总额”、“商品清单”、“交易”。稍加整理:

1)“顾客”、“收银员”是系统的外部对象,不需要我们进行设计,但这些对象要和系统进行交互;

2)“商品”、“商品条形码”、“商品信息”、“商品总额”、“商品清单”、“交易”是领域对象,但“商品条形码”、“商品信息”可以算作“商品”的属性、“商品总额”可以算作“交易”的属性,最后从这个用例总结出来的领域对象有“商品”、“商品清单”、“交易”三个。

第二步:识别这些名词本身的相关信息

一个对象的属性可能分布在多个用例中,因此可以通过迭代不断的完善一个对象的属性,大家可以看到,我们在第一步中的样例就已经分析了一部分了:“商品条形码”、“商品信息”可以算作“商品”的属性。

对象除了属性外,还有一些约束或者限制,这些在用例中可能有,也可能没有,这就需要分析人员来发现了。比如说交易金额必须大于0.1元小于99999元这种约束,用例中不一定会体现,可能需要分析人员向客户咨询。

第三步:识别对象间的关系

面向对象设计就是依靠对象间的互相协作来配合完成相应的功能,因此识别出对象和对象本身的属性外,还要识别对象间的关系,例如1对多、1对1、依赖等,详细的各种关系可以参考UML的标准定义。

我们以第一步识别的三个对象为例:“商品清单”包含多个“商品”、一次“交易”对应一个“商品清单”、一个“商品”只能属于一个“交易”等。

第四步:画出领域模型UML图

UML这里就不啰嗦了,我们结合前三步的分析,画出这个样例的UML领域模型图:

 

 (由于CSDN关闭了图片上传功能,因此无法贴出,大家可以根据前三步自己画一个)

大家可以看到,经过“领域模型”的分析后,已经完成了自然语言到面向对象语言的初步转化了,领域对象已经识别出来,面向对象已经初具雏形。

需要提醒的是:领域模型过程中识别出来的对象和具体的语言无关,也没有方法。换句话说,public、private、函数这些面向对象的属性在领域模型阶段不需要分析出来。

 

设计模型

 

完成了“领域模型”阶段后,面向对象已经初具雏形,我们已经看到了那熟悉的“对象”了,例如“商品”、“交易”、“商品清单”等,看起来已经进入了面向对象的世界了,你是否已经摩拳擦掌,跃跃欲试,准备开始编码了呢?

且慢,“领域模型”只是万里长征的第一步,通过领域模型分析得到的类还不能指导编码,还需要经过“设计模型”这个阶段的处理,才能基本上指导编码。

前面我们提过,领域模型的对象是没有方法的,但最终的实现肯定是有方法的,因此设计模型的第一个任务就是“为对象添加方法”

那么是否给领域模型中的对象添加完方法就算是完成了设计模型呢?没有这么简单,给领域模型中的对象添加方法只是设计模型中最简单的一部分工作,设计模型阶段第二个任务是“围绕领域对象设计出非领域对象 ”。

这句话看起来比较难拗口,为什么要设计出非领域对象呢?道理很简单:领域模型中的对象是静态的,要让这些静态的对象动起来,才能最终完成客户需求。因此必须添加非领域对象,让这些非领域对象来完成让领域对象动起来的事情。

例如:“商品”本身是一个领域对象,但是这个对象是谁创建、谁使用、谁管理呢?领域模型中并没有相关的对象来完成这些职责,因此需要我们设计额外的对象来完成这些职责。

经过前两步之后,看起来设计模型的对象都已经出来了,但是我们如何知道设计得好还是不好,以什么标准来判断我们的设计是否正确呢?相信基础扎实的朋友们已经想到了,这就是万人期待、万众瞩目的,大家都耳熟能详的一个东东:设计模式。设计模型第三个任务就是“应用设计模式、设计原则”

通过应用设计模式、设计原则,又会添加一批新的对象,接口、父子类、继承、依赖等面向对象的相关概念也逐步清晰,这样就为最终的编码打下了坚实的基础。

到这里为止,“设计模型”阶段的任务基本讲述完了,下面我们看一个简单的样例,还是以 POST 机为例:

在“领域模型”阶段我们已经分析出了“商品”、“商品清单”、“交易”三个领域对象,我们按照前面所讲的三个步骤一步一步来看“设计模型”阶段如何做(都以“商品”对象为例)。

第一步:“为对象添加方法”

商品对象的方法有:“获取名称”、“获取条形码”、“获取价格”等(有兴趣的朋友可以自己完善),这样对象的几个方法就出来了: getName ()、 getBarCode ()、 getPrice ()。

第二步:“围绕领域对象设计出非领域对象

“商品”对象的生命周期包括:创建、修改、使用、销毁,这些任务对象本身是无法完成的,必须添加新的对象来完成,这里我们添加一个新的对象“商品管理”来完成这些任务。这样“商品管理 ”对象就出来了,而这个对象在用例模型和领域模型中都是没有的。

第三步:“应用设计模式、设计原则”

我们简单的应用 DIP 原则(可以参考我的 Blog 软件设计漫谈之三: 30 分钟掌握面向对象类的设计原则 》) 就可以发现,“商品”本身应该作为一个接口,因为不同的商品之间是有很大差异,“商品”又可以分为“食品类商品”、“饮料类商品”、“服装类商品”等等。 这样应用了设计原则后,在领域模型中作为对象的“商品”,在设计模型中不再是具体对象,而是接口,然后这个接口派生出“食品类商品”、“饮料类商品”、 “服装类商品”等具体对象。

 

以上的步骤不是瀑布式的,而是迭代式的,例如:第三步识别出“饮料类商品”这个对象后,也需要为它添加方法、设计出相关的类。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yah99_wolf/archive/2010/01/04/5130355.aspx

 

 

【Docker】Ubuntu安装Docker 1 安装Docker 安装Docker有三种方法,这里只用repository安装,更详细的安装方法可以看官方文档。 1.1 添加repository 首先更新apt: sudo apt-get update 安装一些包让apt可以通过https使用repository: sudo apt-get install \ apt-transport-https \ ca-certif... 阅读详情

相关推荐

macOS 发票查验全攻略:从证书导入到Safari调试

本文详细介绍了在macOS上进行发票查验的全流程,包括证书下载、钥匙串访问导入、Safari浏览器调试等关键步骤。重点解决了验证码不显示等常见问题,提供了证书信任设置和开发者工具使用的实用技巧,帮助用户顺利完成税务发票在线查验。

weixin_29204749的博客 509

第6章 用例

本文为《UML和模式应用(原书第3版)》读书笔记用例是文本形式的情节描述,广泛应用于需求的发现和记录工作中。 示例顾客携带商品收银台收银员使用POS系统记录每件商品,系统连续显示累计总额,并逐行显示细目。顾客输入支付信息,系统对支付信息进行验证和记录。系统更新库存信息,顾客从系统得到购物小票,然后携带商品离开。 参与者、场景和用例 参与者是某些具有行为的事物,可以是人、计算系统或组织,例如收银

linran200的专栏 6365

POS管理系统的分析与设计(需求分析、用例描述、UML建模等)

POS管理系统的分析与设计,基于UML,适合课程设计,实验报告等参考。 文档结构: 1 任务描述 2 系统需求 2.1 用例与用例列表 2.2 用例图 2.3 用例文本 2.4 性能需求 3 需求分析 4 系统设计(顺序图、类图) 5 系统实现 6 逻辑架构设计

Java 超市收银

【代码】Java 超市收银。

sleepl的博客 1576

架构讲义3

  第三章 领域建模与系统行为分析 用例模型原则上不是面向对象的,它描述的是系统的功能,只是建立系统的最初的输入,为了更细腻的分析需求,从面向对象的角度,可以建立领域模型。识别一个丰富的对象集或者领域类集,是面向对象分析的核心工作,做好这项工作,将会在设计和实现期间获得丰富的回报。    第一节 领域建模的思想和方法 领域模型是作为设计软件对象的启发来源,也是后

lem's Blog 4173

java微信刷卡支付demo,微信刷卡支付API详解

场景:*对于一些必选参数,即使没什么用,也一定要传。map.put('appid','你的公众号appid');map.put('mch_id', '微信支付商户号');map.put('sub_mch_id', '微信支付分配的子商户号,服务商必填');map.put('device_info', '终端设备号'));map.put('body', '商品名称');map.put('detail...

weixin_42494891的博客 311

技术人员看得懂流程

原文地址:http://uml.org.cn/zjjs/201305172.asp 谈到流程,大家都会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型、敏捷、RUP等流程成为项目流程,也就是说这是给项目管理用的;而本文的流程是技术流程,是给技术人员(主要是设计人员)看的流

好文中转站 912

技术人员看得懂流程()

实现模型 经过前面的“用例模型”、“领域模型”、“设计模型”的讲解,面向对象分析设计都完了,面向对象已经基本成型,接下来就是要具体实现了,对应的就是“实现模型”。 “实现模型”是整个技术流程中大家接触最多的阶段,只要是做开发的,基本上都是先参与这个阶段的工作。顾名思义:实现模型就是使用具体的技术来实现设计,也就是通常意义上的编码 。 但要注意的是,编码不...

happmaoo的专栏 104

技术人员看得懂的面向对象设计流程

技术人员看得懂的面向对象设计流程

qq_44894516的博客 415

技术人员看得懂流程1)——面向对象设计全流程概述

技术人员看得懂流程                               ——面向对象设计全流程概述 谈到流程,大家都会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型、敏捷、RUP等流程成为项目流程,也就是说这是给项目管理用的;而本文的流程是技术流程,是给技术人

z69183787的专栏 1303

技术人员看得懂流程2)——用例模型

技术人员看得懂流程2)                          ——用例模型 一般的管理流程都将软件项目划分为“需求->分析->设计->实现->维护”,对应的技术流程中首先也肯定是要将需求明确,而“用例模型”就是用于获得和分析需求的。 简单来说,用例模型就是要将客户的需求写下来。“需求”不是很好理解,更加通俗的讲法是“故事(story)”。我觉得“故事”这个词非常

z69183787的专栏 1695

用例描述及顺序图

UML

m0_57140569的博客 4720

java刷卡_java – 如何刷卡以删除卡(使用appcompat v7的CardView)

我想做类似的事情,所以我修改了romannurik’s Android-SwipeToDismiss做我们想要的.> RecyclerView.OnItemTouchListener的子类,用于监听触摸事件并检测项目何时被刷新,并相应地进行动画化.>调用一个SwipeListener,以便知道一个项目是否可以被关闭,并且在项目被关闭时再次被调用.要使用它,请按照github上的说明进行...

weixin_36288992的博客 155

DB、DW、DM、ODS、OLAP、OLTP和BI的概念理解

今天特地查了一些官方解释和很多优秀的博客文章,将关于数仓方面的一些名词理解记了下来,先将这些简称做一个解释:1、DB(DataBase):数据库,一般指的就是OLTP数据...

微信搜:import_bigdata,大数据领域硬核原创作者 2648

技术人员看得懂流程(6)——处理模型

                   让技术人员看得懂流程(6)                                ——处理模型看完“实现模型”,你是否长吁一声,准备拿起咖啡,惬意的喝上一杯?毕竟我们已经完成了从用例到编码的全过程了,确实是值得庆祝的一件事情,但“革命尚未成功、同志还需努力”,现在还不是享受的时候,接下来我们需要进入“处理模型”阶段。l         “

华仔-技术博客 6198

《直流系统》PPT课件.ppt

《直流系统》PPT课件.ppt

上一篇: 人生应该接受的教育
下一篇: 需求分析的故事——如何练就需求分析的火眼金晴?
hn2002
博客等级 码龄19年 17粉丝 110原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值