从用例到代码:用例分析(4)

发表于:2015-05-05来源:uml.org.cn作者:不详点击数: 标签:用例分析
根据我在面向对象技术和面向对象建模方面的教学经验,我发现开发人员总是很快的从RUP过程中的实体类、控制类和边界类这个环节,进入下一个设计环节

  根据我在面向对象技术和面向对象建模方面的教学经验,我发现开发人员总是很快的从RUP过程中的实体类、控制类和边界类这个环节,进入下一个设计环节, 没有对问题进行足够的分析。实际上,显然控制类和边界类都是面向技术实现的类,而不是面向业务的类。它们都是在设计阶段所定义的系统设计模型中的一部分,而不是分析模型。因此,在这一步,我将会侧重于业务方面的,与技术无关的分析类。在讨论设计的时候再讨论涉及技术的部分。请一直记住,搜索与业务相关的类,是在RUP过程中的结构分析部分进行的,如果你的项目采用了RUP过程的话。

  让我们回顾一下,用例描述的是行为,也就是系统为用户提供了什么样的服务。在用例描述中,没有涉及面向对象的内容,但是这些描述是用来找出系统中的对象和类的。可以在很多地方,用各种各样的方法来寻找类:

  领域的常识只是

  前一个类似的系统

  企业模型或供参照的体系结构

  CRC (类/职责/合作关系)方法

  词汇表

  数据挖掘

  寻找类的一个简单的方法就是语法分析,下面我将加以说明。我们只要找出我们的需求中的名词, 这些名词(有些是形容词+名词):

  一些是类。

  一些会成为类的属性。

  一些对我们的系统无关紧要。

  找出预约汽车的用例描述中的这些名词(跳过代名词,如“他”),如下:

  用例:为顾客预约汽车(补充)

  这个用例从顾客进入我们的网页开始。

  这个系统显示输入框,来提示顾客输入借出和归还时的预约的地点,和借出和归还时的日期和时间。顾客输入地点和日期。系统还提供选择框,让顾客来限定汽车的型号分类 ,例如,如微型汽车、SUV、标准汽车,等等。顾客可以指定一个汽车分类进行搜索,也可以指定多个分类。默认的设置是在所有的 汽车 分类中搜索。如果顾客参加了我们的租赁有奖活动,他需要把他的有奖活动中的编号输入到网页上的一个独立的输入框中。如果这个输入框 填写了内容,系统会访问顾客的个人档案,系统会提前查找所需的 信息。

  如果顾客表示希望继续进行预约过程,系统访问汽车数据库,来 查找位置信息然后在一个新的网页中显示所有的汽车信息。这些汽车都是在指定的汽车分类 中的,并且在指定的地点、日期和时间中是空闲的。对每辆汽车,系统都会显示一个基础费率,如果顾客租用汽车的历史比较长,还可以打一些折扣。如果顾客想要看到某辆汽车的更详细的信息,系统从汽车数据库中读取这些信息,并把他们显示给顾客。

  如果顾客选定了汽车来预约,系统显示一个新的网页,提示顾客输入用于确认顾客身份的个人信息,(姓名, 电话, 用来确认的电子邮件, 信用卡发行商 )。 如果顾客档案已经存在了,系统从中读取所有已经填写过的信息。一部分输入信息是必填项,其它(如电子邮件)是选填项。顾客填写所有必填的信息。 系统还要显示保护产品相关的信息(如汽车损伤保险、乘客险等)和单日的价格,并询问顾客是否购买这些保护产品。顾客给出决定。

  如果顾客表示接受这个预约,系统给出一个网页,来显示 预约的摘要信息,(汽车的类型、 日期和时间、所有选购了的保护产品及其费用、租用总额),还为顾客显示预约的确认页面。如果 系统有用户的电子邮件 ,系统会发一封预约确认信到这个地址。

  这个用例当预约确认信息出现在顾客面前的时候,就结束了

  注意每个名词,或者形容词+名词的组合, 都被标出来了。有很多重复的,因此把每个词单独列入词汇表1,按字母顺序排序:

  表1:候选的名字/实体类

  我们如何分辨出哪些候选的名词才是真正的问题领域中的类呢?一个常用的方法就是,用一些简单的问题来测试每个词,如图5:

  1. 这个候选是在系统的边界之内吗?
    如果不是,它可能是系统的用户。

     
  2. 这个候选词有某些明显的与业务主题有关的行为吗?
    (也就是说,这个候选词可以拥有或者提供某些系统的服务或功能吗?)

     
  3. 这个候选词拥有明显的数据结构吗?
    (也就是说,这个候选词拥有或者管理某些数据吗?)

     
  4. 这个候选词和其它候选词之间有什么关系吗?
     
图5:用来寻找分析类的问题

原文转自:http://www.uml.org.cn/Test/200904165.asp