类 (及其对象 )之间的四种关系
—— 两种结构,两种连接
分类关系、继承 —— 一般 -特殊结构
(generalization-specialization structure)
组成关系、聚合 —— 整体 -部分结构
(whole-part structure)
静态联系、关联 —— 实例连接
(instance connection)
动态联系、行为依赖 —— 消息连接
(message connection)
这些关系形成了类图的关系层
第六章 定义结构与连接
概念:一般类、特殊类、继承、多继承、多态、
一般 -特殊结构,,is a kind of,
定义,一般 -特殊结构是由一组具有一般 -特殊关系(继
承关系)的类所组成的结构,它是一个以类为结点,以
继承关系为边的连通的有向图。
同义词,分类结构( classification structure)
6.1 一般 -特殊结构
作用,简化了对对象的认识、定义和理解。
表示法
人员
股东 职员 顾客
股东职员
例:
● 对继承的属性或服务重新定义
× 拒绝继承
多态性的表示符号
一般类
特殊类 特殊类
结构连接符
一般类
特殊类 特殊类
完整的一般-特殊结构
如何发现 一般 -特殊结构
( 1)学习当前领域的分类学知识
( 2)按常识考虑事物的分类
( 3)回顾一般类和特殊类的两种定义
( 4)考察类的属性与服务
公司人员
姓名
身份证号
股份
工资
······
······
公司人员
姓名
身份证号
······
股东
股份
······
······
职员
工资
······
······
······
股东
姓名
身份证号
股份
······
······
职员
姓名
身份证号
工资
······
······
公司人员
姓名
身份证号
······
······
股东
股份
······
······
职员
工资
······
······
( 5)考虑领域范围内的复用
现钞收款机
A
B
C
D
E
F
X
Y
Z
收款机
A
B
C
X
Y
现钞收款机
D
E
F
Z
领域构件
( 1)问题域是否需要这样的分类? (例:书 — 善本书)
( 2)系统责任是否需要这样的分类? (例:职员 —本市职员)
( 3)是否符合分类学的常识?(用,is a kind of, 去套)
飞机
飞行高度
······
自动导航
······
×
汽车
发动机
载重量
速度
······
运输
······
运输工具
发动机
载重量
速度
······
飞机
飞行高度
······
自动导航
······
汽车
······
······
运输工具
发动机
载重量
速度
······
飞机
飞行高度
······
自动导航
······
运输
······
运输
······或
审查与调整
( 4)是否构成了继承关系? (确实继承了一些属性或服务)
一般 -特殊结构的简化
( 1)取消没有特殊性的特殊类
( 2)增加属性简化一般-特殊结构
( 3)取消用途单一的一般类,减少继承层次
一般类存在的理由:
·有两个或两个上以上的特殊类
·需要用它创建对象实例
·有助于软件复用
概念:整体对象、部分对象、聚合、整体 -部分结构
,a part of”或,has a”
整体 -部分关系是对象实例之间的关系
说“对象 a是对象 b的组成部分” —— 可以
说“类 A是类 B的组成部分” —— 不妥
说“类 B和类 A之间的整体 -部分关系”,
是指它们的对象实例存在整体 -部分关系
定义,整体 -部分结构是把一组具有整体 -部分关系
的类组织在一起的结构。它是一个以类为结点,以
整体 -部分关系为边的连通的有向图。
同义词,组装结构( composition structure)
区别,紧密、固定的关系 和 松散、灵活的关系
6.2 整体 -部分结构
整体对象类
部分对象类
m
n
连接符:
表示法
汽 车
发动机 车 轮
1 4,6
0,1 0,1
例子:
多重性:
一对一
一对多
多对多
多重性表示:
固定的数 单个数
不定的数 数对
如何发现整体 -部分结构
考察:
( 1)物理上的整体事物和它的组成部分
例:机器、设备和它的零部件
( 2)组织机构和它的下级组织及部分
例:公司与子公司、部门
( 3)团体(组织)与成员
例:公司与职员
( 4)一种事物在空间上包容其它事物
例:生产车间与机器
( 5)抽象事物的整体与部分
例:学科与分支学科、法律与法律条款
( 6)具体事物和它的某个抽象方面
例:人员与身份、履历
审查与筛选
( 1)是否属于问题域?
例:公司职员与家庭
( 2)是不是系统责任的需要?
例:公司与工会
( 3)部分对象是否有一个以上的属性?
例:汽车与轮胎(规格)
( 4)是否有明显的整体 -部分关系?
例:学生与课程
概念:关联 ( association)
实例连接( instance connection)
作用:表示对象之间的静态联系
实现方式:指针、对象标识集合
与整体 -部分结构的区别
6.3 实例连接
表示法
类 1 类 2
m n
连接名称
一对一的连接,11
1 m
m n
一对多的连接:
多对多的连接:
多重性的表示
教 师 学 生
0,m 1
指导论文
教师为学生指导论文
城市
0,m
0,m
有航线
(d) 城市之间有航线
例子
如何建立实例连接
( 1)认识对象之间的静态联系
考虑问题域和系统责任 —— 哪些类的对象实例之间的关
系需要在系统中表达。
( 2)分析并表示实例连接的多重性
( 3)异常情况处理 —— 多对多的关联
供货商 客户
0,m 1,m
问题 ——
如何实现多
对多的关联?
供需合同
卖方
买方
……, 11
处理:
( 5)命名与定位
系统管理员
0,m
计算机
服务器 客户机 用 户
0,1
1,m 1
操作
使用
顺序系统中的消息
6.4 消息连接
( 1)消息是向对象发
出的服务请求。
( 2)消息都是同步的

( 3)接收者执行消息
所请求的服务。
( 4)发送者等待消息
处理完毕再继续执行。
( 5)每个消息只有唯
一的接收者。
并发系统中的消息
控制线程内部
同顺序系统
控制线程之间
情况复杂得多
( 1)消息有多种用途
( 2)消息有同步与异步
之分
( 3)接收者对消息有不
同响应方式
( 4)发送者对消息处理
结果有不同期待方式
( 5)消息的接收者可能
不唯一
应该识别和表示的主要问题 ( 按重要性排序 ),
( 1) 对象之间是否存在着某种消息?
( 2) 这种消息是同一个控制线程内部的还是不同
控制线程之间的?
( 3) 每一种消息是从发送者的哪个服务发出的?
是由接收者的哪个服务响应和处理的?
( 4) 消息是同步的还是异步的?
( 5) 发送者是否等待消息的处理结果?
OOA对消息的表示 —— 消息连接
发送者
(接收者 )
接收者
(发送者 )
@生产者 @消费者
缓冲区


发送者 接收者
@ 类 A @ 类 B
类 C 类 D
消息连接的表示法
发送者 接收者
发送者
(接收者 )
接收者
(发送者 )
控制线程内部:
控制线程之间:
例:
如何建立消息连接
策略 ————“服务模拟, 和, 执行路线追踪,
① 人为地模拟当前对象服务的执行, 考虑:需要其它对象
( 或本对象 ) 提供什么服务
② 向接收者画出消息连接线
③ 沿着每一种消息追踪到接收该消息的对象服务, 重复进
行以上的工作 。 直到已发现的全部消息都经历一遍
检查每个服务是否都被执行一遍, 发现遗漏的消息
或多余的服务
例:超级市场
销售管理系统
帐 册
商品一览表
销售事件
@上级系统接口
@收款机
供货员
商品
计量商品特价商品
本班收款员
开始时间
结束时间
@登录
售货
结帐
前班结余
销售事件表
收入累计
上交款
本班结余
接班
记帐
报帐交班
收款人
购物清单
应收款
···
销售计价
入帐
商品目录
检索
种类增删
帐册目录
@消息收发
查账
报帐
价格更新
种类增删
编号
名称
单价
架上数量
下限
售出
补充
价格更新
缺货登记表
缺货登记
供货
开始日期
结束日期
* 单价
计量单位
计价方式
* 售出
* 补充
* 价格更新
m1
m 1
概念 —— 主题( subject)
把一组有较强联系的类组织在一起而得到的类的集合
同义语 ——
类畴( class category) —— Booch方法
类簇( class cluster) —— Firesmith方法
箱( kit) —— Berard方法
子系统( subsystem) —— Rumbaugh方法 (OMT)
包( package) —— OML
……
原则 ——
粒度控制 —— 宏观与微观
7± 2规律
作用 —— 指导对模型的阅读,指导子系统划分
第七章 划分主题
编号 主题名
表示法:
半展开方式
编号 主题名
类名
类名
······
类名
······
主题名
主题名
压缩方式
编号 编号
编号 编号
编号
全展开方式
如何划分主题
识别低层主题
每个一般 -特殊结构和每个整体 -部分结构作为一个主题
实例连接和消息连接密集的类划分到一个主题
独立的类暂时作为一个主题
例,1 1
11
1
11
1 2 2
22
允许交叉
主题的合并
如果低层主题数量过多,则合并为高层主题
依据:低层主题之间 ——
从概念考虑:接近,或具有教强的相关性
从作用考虑:属于某项大的功能
观察类图:偶合紧密
分布情况:分布在同一台处理机
组织主题的层次
主题合并之后,决定低层主题是保留还是取消
每个主题 7± 2个内层成分
层次 不宜太多
建立主题图
压缩方式或半展开方式的主题形成主题图
全展开方式的主题依赖于类图存在
主题的命名
主题之间的连线
主题的划分不是唯一的,有一定的随意性
帐 册
商品一览表
销售事件
@收款机
供货员
商品
计量商品特价商品
本班收款员
开始时间
结束时间
@登录
售货
结帐
前班结余
销售事件表
收入累计
上交款
本班结余 接班
记帐
报帐交班
收款人
购物清单
应收款
······ 销售计价
入帐
商品目录
检索
种类增删
帐册目录
@消息收发
查账
报帐
价格更新
种类增删
编号
名称
单价
架上数量
下限
售出
补充
价格更新
缺货登记表
缺货登记
供货
开始日期
结束日期
* 单价
计量单位
计价方式
* 售出
* 补充
* 价格更新
m
m1
1
超级市场销售管理系统
(全展开的主题)
1 1
11
2
2
2
2
3 3
33
@上级系统接口
例:
主题图
1· 销售记录
3· 外部接口
2· 商品信息
压缩方式
( b)半展开方式
1· 销售记录
收款机
帐册
销售事件
3· 外部接口
上级系统接口
供货员
2· 商品信息
商品一览表
商品
特价商品
计量商品
第八章 use case和交互图
本章的主要概念 —— 系统边界、活动者,use case、交互图
问题的提出:在系统尚未存在时,如何描绘用户需要一个
什么样的系统?如何规范地定义用户需求?
考虑问题的思路:把系统看作一个黑箱,看它对外部的客
观世界发挥什么作用,描述它外部可见的行为。
系统是由一条
边界包围起来
的未知空间
只通过有限的
几个接口与外
部交互
系统边界以外
是与系统进行
交互的活动者
把内外交互情况描
述清楚,就确切地
定义了系统的需求
系统边界
系统边界,一个系统所包含的所有系统成分与系统以外
各种事物的分界线。
活动者 (人员 )
活动者 (设备 )
活动者 (外系统 )
系 统
系统,被开发的计算机软硬件系统,不是指现实系统。


对象
对象 对象
对象对象
系统成分,在 OOA和 OOD中定义并且在编程时加以实现的
系统元素 —— 对象
活动者:在系
统边界以外,
与系统进行交
互的事物 ——
人员、设备、
外系统
系统边界与活动者
认识系统边界和活动者对 OOA的意义
帮助发现对象,特别是主动对象
定义 use case
定义交互图
如何发现活动者?考虑:
人员 ——
系统的直接使用者
直接为系统服务的人员
设备 ——
不与系统相联的设备 X
计算机设备 X
外系统 ——
上级系统
子系统
其它系统
与系统直接相联的设备
为系统提供信息
在系统控制下运行
历史,Jacobson首先提出。尽管不是OO方法的主要概念,
但是对于确切地描述用户的功能需求,帮助发现对象,并核
实每种功能是否有相应的对象予以满足,都可起到很好的作
用,所以被许多方法采用。
定义,use case是对一个活动者使用系统的一项功能时所
进行的交互过程的一个文字描述序列 。
几点说明:
( 1)一个 use case只描述 一个 活动者对 一项 系统功能的使
用情况。
( 2)是一种平铺直叙的 文字 描述。
( 3)陈述活动者和系统在交互过程中 双方 所做的事。
( 4)描述彼此为对方 直接地 做什么事,不描述怎么做
( 5)描述应力求准确、清晰,允许概括,但 不要把双方的
行为混在一起 。
use case
收款员 ·收款
作好收款准备, 应收款总
数置为 0,
for 顾客选购的每种商品 do
if 此种商品多于一件 then
end if
if 货架商品数低于下限 then
end if
计算本种商品总价并打印编
号, 名称, 数量, 单价, 总价;
end for
计算应找回的款数,
打印以上两个数目,
应收款数计入帐册 。

表示形式:
名称(活动者,功能)
行为描述(左右栏),
控制语句,
括号或标号
如何定义 use case
基本策略,把自己当作活动者,与设想中的系统进行交互。
考虑:交互的目的是什么?需要向系统输入什么信息?希望
由系统进行什么处理并从它得到何种结果?
Jacobson提出以下问题:
·每个活动者的主要任务是什么?
·该活动者是否将读, 写或修改系统的任何信息?
·活动者是否该把系统外部的变化通知系统?
·活动者是否希望系统把预料之外的变化通知自己?
全面地认识和定义 每一个 use case,要点是以 穷举 的方式考
虑每一个活动者与系统的交互情况
use case
use case
use case
use case 模型
活动者 活动者
延伸的 use case
什么是交互图
交互图( interaction diagram)是一种详细表示对象之
间以及对象与系统外部的活动者之间动态联系的图形文
档。
它详细而直观地表现了一组相互协作的对象在执行一个
(或少量几个) use case时的行为依赖关系以及服务和
消息的时序关系。
类图对对象之间的消息(交互情况)表达不够详细;
详细说明对消息的表达虽然详细,但不够直观;
交互图既详细又直观,但通常只能表示少数几个对象之
间的交互。用途
帮助分析员对照检查每个 use case中描述的用户需求,
是否已经落实到一些对象中去实现。提醒分析员去补充
遗漏的对象类或服务。
帮助分析员发现哪些对象是主动对象
交互图
活动者
行为陈述
系统
行为
陈述
活动者
行为陈述
系统
行为
陈述
use case名 系统边界 类名 类名 类名 类名 类名
表示法
收款机 销售事件 帐册
售货
检索
售出 缺货登记
销售计价
入帐
记帐
收款员 ·收款
输入开始本次收款的命令
作好收款准备,应收款总
数置为 0,输出提示信息
for 顾客选购的每种商品 do
输入商品编号
if 此种商品多于一件 then
输入商品数量
end if
检索商品名称及单价;
货架商品数减去售出数;
if 货架商品数低于下限值 then
通知供货员请求上货
end if
计算本种商品总价并打印编号、
名称、数量、单价、总价
总价累加到应收款总数
end for
打印应收款总数
输入顾客交来的款数
计算应找回的款数,
打印以上两个数目,
收款数计入帐册。
商品商品一览表
例:
供货员
本章概念在软件开发过程中的应用
发现活动者
定义 use case
建立 OOA基本
模型、详细说明
及主题图
建立交互图
为了以穷举的方式考察
系统的外部可见功能
以规范的方式描述系统
的功能需求
建立系统分析模型
更详细地表示对象之间的
行为依赖及消息的时序关
系检验用户需求是否落实
作用:对分析模型给出详细而确切的定义
任何分析方法皆不可缺
不要指望在图形文档中表达一切
组织层次
① 系统说明,对整个系统作一些必要的说明 。 例如, 说
明它的目标, 意义, 应用范围, 项目背景等等 。
② 主题说明,简要地说明每个主题描述一组什么事物,
或解决一个什么问题 。
③ 类描述模板,详细地说明每个类 。 是详细说明的主要
内容 。
第九章 详细说明
类描述模板的格式及内容:
类的整体说明:
类名,〈 中文类名 〉, 〈 英文类名 〉 ;
解释,[ 〈 文字描述 〉 ] ;
一般类,[ 〈 类名 〉 ] {, 〈 类名 〉 } ;
状态转换图,[ 〈 状态转换图 〉 ] ;
主动性,Yes| No;
永久性,Yes| No;
其它,[ 〈 文字描述 〉 ] ;
属性说明:

属性名,〈 中文属性名 〉, 〈 英文属性名 〉 ;
多态性,[ *| x] ;
属性解释,[ 〈 文字描述 〉 ] ;
数据类型,[ 〈 类型名 〉 ] ;
整体 -部分,Yes〈 文字描述 〉 | No;
实例连接,Yes〈 文字描述 〉 | No;
实现要求,[ 类属性 ] [, 取值范围,〈 下限 〉 - 〈 上限 〉 ]
[, 精度,〈 数 〉 ] [, 初始值,〈 值 〉 ] [ 其它,〈 文字
描述 〉 ] ;

服务说明:

服务名,〈 中文服务名 〉, 〈 英文服务名 〉 ;
主动性,Yes| No;
多态性,[ *| x] ;
解释,[ 〈 文字描述 〉 ] ;
控制线程说明,[ 〈 文字描述 〉 ] ;
消息接收,〈 消息名 ({ 〈 参数名 〉, 〈 类型名 〉, }) ;
{ 〈 消息名 ({ 〈 参数名 〉, 〈 类型名 〉, }) ; } ;
消息发送,{ 〈 类名 〉 ·〈 服务名 〉 ; }
服务流程图,[ 〈 服务流程图 〉 ]
}
完整的 OOA文档
活动者
use case
类图
由对象层、特征层和关系层三个层次的信息 叠
加在一起构成。
主题图
包括压缩方式和半展开方式两种主题图。
交互图
详细说明