UML 基础与建模实践教程
第 16 章 网上书店建模
本章要点
领域建模方法和过程
用例建模方法和过程
动态建模方法和过程
学习目标
掌握领域建模、用例建模、动态建模用到的原理、启发性知识、方法。
本章以网上书店系统为例,详细说明领域建模(对象模型)、用例建模、动态建模的方
法、原理和过程。详细的展示了建模过程,特别是强调了建模过程中用到的面向对象的分析
技术、设计技术、建模原则、建模方法和步骤。
16.1 领域建模
系统开发的第一步是对领域系统的理解,即,对现实系统的问题域的理解。需求分析
师第一步要做的工作是,通过访问用户、客户和领域专家,找出领域系统的一般需求,即
通用需求,将用户、客户和领域专家对系统的描述和需求记录下来,整理成规范化的问题
陈述。第二步是以问题陈述为原始材料,对问题陈述进行分析、修改和完善,最后,以迭
代和增量的方式,通过对象分析技术、设计技术,设计对象模型和数据字典。
16.1.1 领域建模方法
领域分析是以问题陈述为基础,通过分析和建模,创建对象模型和数据字典。开发领
域模型常采用以下步骤:
1) 准备问题陈述
2) 使用文本分析技术识别对象和类
3) 开发数据字典(词汇表)
4) 识别类之间的关联关系
5) 使用继承组织类。
6) 识别类和关联类的属性
7) 为可能存在的查询验证访问路径
8) 多次迭代、细化、修改完善对象模型。
9) 在构建用例模型后,再次修改对象模型。
第 1页
UML 基础与建模实践教程
16.1.2 领域建模过程
领域建模的第一步是,分析师把记录和采访得到的用户、客户、领域专家提供的需求,
整理成规范化的问题陈述。
1、准备问题陈述
领域分析的目标是寻找一个通用的对象模型,该模型应该在所有的应用域中都适用(在
同一领域,存在多种应用)。所以问题陈述应该强调领域的通用需求,而不是个别应用的特
定需求。因此,问题描述应该关注领域中对象及其关系的描述,而不是对解决方案的描述。
在同一个领域,存在多种应用,每个应用的任务和执行过程是不同的,解决方案也不同。
例如,对银行领域而言,问题陈述有两种描述方式:
(1)第一种描述:一个客户在一个银行中可以有多个账户(这句话强调了领域对象及
其关系)。
(2)第二种描述:一个客户拿身份证进入银行,首先进行身份验证,选择账户方式,
然后让服务员为他开设一个银行账户(这句话强调该领域的操作过程和步骤,即,解决方案)。
在进行问题陈述时应该采用第一种描述方式,不能采用第二种方式,第二种方式强调的
是问题解决方案。下面是网上书店系统的问题陈述:
某书店希望建立一个网站,通过这个网站实现公司的销售业务。通用软件公司的需求分
析师通过采访书店的客户、用户和领域专家,记录了下面的问题陈述:
通用公司正在开发一种网上书店系统,该公司的客户使用这个系统可以购买图书并销售
他们使用过的书籍。公共用户是该系统没有注册的客户。
公共用户和注册用户可以通过输入关键字搜索书籍,关键字是书籍标题、作者、新书价
格和旧书的价格范围。系统显示匹配关键字的书籍列表。书籍列表的每项均由书籍标题、作
者、新书价格和旧书的价格范围组成。用户可以从列表中选取一本书以显示该书更加详细的
信息(可用性、新书价格、旧书价格、内容列表、作者和 ISBN)。用户还可以将该书的一个
副本(新书或者旧书)添加到购物篮中。然后该用户可以继续搜索其他书籍。当用户完成搜
索后,可以检验购物篮中的书籍。系统要求用户通过输入电子邮件地址和账户口令来登录账
户。如果还没有注册,用户这时可以注册一新的客户账户。用户输入电子邮件地址、家庭住
址和口令。系统在通过邮件消息确认创建新的客户账户之前,要验证该电子邮件地址是否已
经被已有的客户用。然后系统要求用户选择运送选项(快递、优先和普通)。不同的运送选
项的价格不同。然后用户可以选择支付途径(信用卡或者在本书店的用户账户)。如果用户
选择使用信用卡支付,用户将输入卡号、类型和过期时间。然后用户将信用卡信息和支付的
金额发送到外部的支付网关。根据选择的书籍的价格和选中的运送选项的价格相加计算支付
金额。如果信用卡交易被批准,外部支付网关发送回一个批准的代码。否则,系统将要求用
户重新选择支付手段并重新输入支付信息。如果用户选择使用他的账户且有足够的金额,系
统将从客户的账户中收费。否则系统要求用户重新选择支付手段。当完成了支付以后,系统
将安排已订书籍的交付。某个运送代理商将负责已订书籍的运送。如果订单涉及的是一本新
书,系统将发送运送请求,通知该运送代理商从书店中收集到这本书。同一个订单中的新书
将被一并运送。如果订购了旧书,系统将发送一个交付请求,以通知该书的出售者,同时发
送一个运送请求给书店的运送代理商。运送代理商从出售者那里收集书籍并将书籍交付给购
买者。来自同一个出售者的同一个订单中的旧书将被一并运送。在将书籍交付给购买者以后,
运送代理商将向系统发送一条表明运送已经完成的消息。在接收到这条消息之后,系统更新
出售者的客户帐户,旧书价格减去服务费用之差存入到客户金额中。
第 2页
UML 基础与建模实践教程
公共用户或者希望销售旧书的注册客户可以通过搜索书籍并显示它的信息来搜寻上面
的过程,然后用户可以将旧书贴出发售,系统将要求该用户输入价格和该旧书的新旧状态。
然后系统进一步要求用户输入电子邮件地址和客户账户口令以便登录。如果用户没有客户账
户,该用户将按照前一段中所描述的步骤,创建一个新的客户账户。
现在以迭代和增量的方式开发网上书店系统的对象模型。
2、识别对象和类
为了识别对象和类,使用文本分析技术从问题陈述中提取所有名词和名词短语。这一步
的目的是识别一组可在后续步骤中进一步详述和细化的候选对象。
对于每个提取的名词或者名词短语,需要仔细考虑其是否真正地表达了该领域中的某个
对象。对象识别过程不是一项简单的任务,某个名词或者名词短语在一个领域中可能是对象,
而在另一领域中则有可能不是对象。
根据实践经验,在领域模型中,下面类型的名词和名词短语一般是对象:
明确的事物(如篮球场、建筑物);
概念事物(如课程、模块);
事件(如测试、考试、讲座);
外部组织(如发布者、提供者);
扮演的角色(如父亲、经理、校长);
其他系统(如考试系统、课程管理系统);
在问题陈述中,将名词和名词短语标识下划线。表 16-1 给出了从网上书店的问题陈述
中提取出来的名词和名词短语。
表 16-1 问题描述中提取出来的名词和名词短语
通用公司(概念)
客户(扮演角色)
网上书店系统(其他系统)
图书,书籍(概念)
公共用户(扮演角色)
运送选项(概念)
支付途径(概念)
信用卡(概念)
卡号(简单值,属性)
类型(简单值,属性)
注册客户(扮演角色)
过期时间(简单值,属性)
书籍标题(简单值,属性)
支付金额(简单值,属性)
作者(简单值,属性)
支付网关(其他系统)
新书价格范围(简单值,属性)
信用卡信息(简单值,属性)
旧书价格范围(简单值,属性)
金额(简单值,属性)
书籍列表(概念)
代码(简单值,属性)
信息(书的属性列表)
运送代理商(扮演角色)
副本(等同书籍)
购物篮(概念)
书店(概念)
订单(概念)
电子邮件地址(简单值,属性)
出售者(扮演角色)
口令(简单值,属性)
账户(概念)
购买者(扮演角色)
价格(简单值,属性)
第 3页
UML 基础与建模实践教程
家庭住址(简单值,属性)
旧书的新旧状态(简单值,属性)
在上面的表中,对于每个提取出来的名词或者名词短语进行了分类,然后通过消除不恰
当的类进一步筛选候选类。不恰当类的类别主要有冗余类、无关类、模糊类、属性、操作。
删除表 16-1 中被标识为属性的名词和名词短语,修订后的候选类见表 16-2。
表 16-2 修订后的候选类
通用公司(概念)(与领域无关) 运送选项(概念)
客户(扮演角色)
支付途径(概念)
网上书店系统(要开发的系统)
图书,书籍(概念)
公共用户(扮演角色)
信用卡(支付途径的属性)
支付网关(其他系统)
运送代理商(扮演角色)
注册客户(扮演角色)
书籍列表(概念)
书店(概念)
订单(概念)
副本(等同书籍,图书)(冗余)
出售者(扮演角色)
购物篮(概念)
账户(概念)
购买者(扮演角色)
删除表 16-2 中的冗余类和无关类,修订后的候选类见表 16-3。
表 16-3 修订后的候选类
客户(扮演角色)
书籍(概念)
公共用户(扮演角色)
注册客户(扮演角色)
书籍列表(概念)
购物篮(概念)
账户(概念)
运送选项(概念)
支付途径(概念)
支付网关(其他系统)
运送代理商(扮演角色)
书店(概念)
订单(概念)
出售者(扮演角色)
购买者(扮演角色)
表 16-3 中,客户是对公共用户和注册客户的统称,是冗余类,去掉,并且,我们将“注
册客户”更名为“注册用户”, 修订后的候选类见表 16-4。
表 16-4 修订后的候选类
书籍(概念)
公共用户(扮演角色)
注册用户(扮演角色)
书籍列表(概念)
购物篮(概念)
账户(概念)
运送选项(概念)
支付途径(概念)
支付网关(其他系统)
运送代理商(扮演角色)
书店(概念)
订单(概念)
出售者(扮演角色)
购买者(扮演角色)
3、开发数据字典
第 4页
UML 基础与建模实践教程
现在需要准备一个数据字典来定义候选类,即定义每个类的范围、属性和操作,并对
类的内涵进行简单描述。表 16-5 给出了网上书店系统的类定义。
类
公共用户(PublicUser)
注册用户(RegistedUser)
书籍(Book)
书籍列表(BookList)
购物篮(ShoppingBusket)
账户(Account)
运送选项(DeliverOption)
支付途径(PaymentMethod)
表 16-5 网上书店系统的数据字典
定义
没有注册的用户,只能浏览商品。
已注册的用户,可以登录网上书店系统进行图书浏览和买卖,
这个类的属性有:用户名,口令,电子邮件。
系统中销售的商品,这个类的属性有:作者,书名,价格和
ISBN 码。
按照某个关键字查询的书籍进行列表。该类有属性:书籍标
题,作者,价格
购买者可以将书籍添加到购物篮,也可以把书籍从购物篮中
删除,它是用来暂时保存购买者的书籍的。
用户注册后获得一个账户,该类有属性:账户号,邮件地址,
家庭住址,口令
提供了三种运送选项:快速运送、优先运送和普通运送
购买者可以选择支付途径。支付途径分为:信用卡支付和本
书店的用户账户支付。
支付网关(PaymentGateway) 支付网关是银行提供给网上书店系统收取客户费用的接口
(一个外部系统),用于审核支付请求,检验信用卡的有效性,
若信用卡交易批准,它将发送回一个批准代码给网上书店系
统。
运送代理商(DeliverAgent) 负责收集书籍和代理运送图书的公司
书店(BookStore)
订单(Order)
管理和销售书籍的场所。给类有一个属性:书店编号(ID)。
订单是购买者生成,订单发送给网上书店系统处理。订单指
定了图书名称、价格、ISBN 码、数量和运送方式。
使用书店系统出售旧书的注册用户,该类有一个属性:用户
出售者(Bargainor)
购买者(Purchaser)
使用书店系统购买书籍的注册用户,该类有一个属性:用户
id
id
表 16-5 的候选对象展示在图 16-1 中。
第 5页
UML 基础与建模实践教程
图 16-1 候选对象
4、识别类之间的关联关系
通过查找问题陈述中连接两个或者多个对象的动词和动词短语可以识别出关联关系。表
16-6 给出了从问题陈述中提取出来的动词短语,以识别候选关联关系。
表 16-6 给出了从问题陈述中提取出来的动词短语以识别候选关联关系
动词短语
关系
说明
一个注册用户可以开设一个或多个账户 has
购买者和销售者都是注册用户
购买者购买书籍
继承
关联
购买的行为由多个步
骤完成,因此不考虑这
个关联
出售者销售书籍
关联
销售的行为由多个步
骤完成,因此不考虑这
个关联
外部网关与支付途径
关联
书籍列表由书籍标题、作者、价格组成 聚合
用户可以向购物篮中添加和删除书籍
聚合
购买者可以选择一种运送选项
购买者可以选择一种支付途径
系统将信用卡信息和金额发送给外部网
关,外部网关对信用卡进行校验,即,对
支付途径(信用卡支付时)进行校验
choose
choose
check
运送代理商从书店收集新书
collect
第 6页
UML 基础与建模实践教程
运送代理商从出售者那里收集旧书
运送代理商将书籍交付给购买者
collect
deliver
一个订单由运送选项,支付途径和购物篮
组合关系
中的书组成
书籍列表由多本书组成
组合关系
发送,传递
根据表 16-6,我们识别出初步的对象模型,如图 16-2 所示。
图 16-2 初步对象模型
5、使用继承和重组改善对象模型
图 16-2 中,订单(Order)由运送选项、支付途径和购物蓝组成,而订单由购买者创
建的,因此,我们对以上 4 个类的关系进行改善,得到如图 16-3 的对象模型。
第 7页
UML 基础与建模实践教程
图 16-3 对象模型
图 16-3 中,购买者和出销者都是注册用户,它们是注册用户的子类;注册用户是公共
用户的子类;通过继承关系,对图 16-3 用继承关系进行改善,得到图 16-4 的对象模型。
第 8页