Page 1 ?
UML及软件建模
主讲人, 李 唯
clx7000@163.com
Page 2 ?
? 如何对类之间的关系建模
? 如何可视化类和子类的关系。
? 如何表现类之间的依赖。
第四章 类之间的关系
Page 3 ?
当类之间在概念上有连接关系时,类之间的连接叫做 关联
关联( association)
为球队效力
关联的可视化方法是用一条线连接两个类, 并把关联的名字 ( 例如, plays
on”) 放在这个连接线之上 。 表示出关联的的方向是很有用的, 关联的方向
用一个实心三角形箭头来指明 。 下图说明如何可视化表示队员和球队之间
的 plays on关联 。
球员 球队

Page 4 ?
当一个类与另一个类发生关联时,每个类通常在关联中都扮演着
某种角色。在队员和球队的关联中,如果球队是职业篮球队,那
么它就是队员的雇主( employer)。下图说明了如何表示出这
些角色。
为球队效力球员 球队▲
员工 雇主
Page 5 ?
? 关联还可以从另一个方向发生:篮球队雇佣( Employ)队
员。可以把这两个方向上的关联表示在一个图中,用实心
三角形箭头指明各自关联的方向,下图所示。
为球队效力球员 球队
▲ 雇用球员

Page 6 ?
? 关联也可以好几个类连接同一个类。如图所示的关联图。
前锋
球队中锋
后卫
为球队效力 ▲
Page 7 ?
关联上的约束
有时两个类之间的一个关联随后就有一个规则。可以通
过关联线附近加注一个约束来说明这个规则。如图所示

服务银行出纳员 顾客▲ { 有序 }
Page 8 ?
另一种类型的约束关系是 Or(或 )关系,通过两条关联线之
间联一条虚线,虚线之上标注{ or}来表示这种约束。图
是高中生( high school student)选 (choose) 文科,
或者选理科时的模型
选择高中生 文科▲
理科选择
▲{ 或 }
Page 9 ?
和类一样,关联也可以有自己的属性和操作,此时。这个关联
实际上是个关联类。图是球员类和球队类之间的关联对应的关
联类:合同关联类。它同时又和经理类发生关联。
关联类 ( association class)
球员 球队
员工 雇主
合同 经理管理▲
Page 10 ?
正如对象是类的实例一样,关联也有自己的实例。如果我
们想象要一个特定的队员效力一个特定的球队,那么两者
之间的 为球队效力 关系就叫做一个链,可以用两个对象之间
的连线来表示它。和对象的名字要加下划线一样链的名字
也要加下划线,如图所示。
链 ( link)
为球队效力
姚明:球员 火箭队:球队

Page 11 ?
多重性 ( multiplicity )
? 某个类有多个对象可以和另一个类的单个对象关联 。
表示多重性方法是在参与关联的类附近的关联线上著
名多重性数值, 如图所示 。
首发球员 球队
5 1
Page 12 ?
? 实际上存在各种可能的多重性。两个类之间可以是一对
一、一对多、一对一或多、一对零或一、一对 N或者一对
一组选择。 UML使用星号( *)来代表许多( more)和多
个 (many)。 在一种语境中,两点代表 Or(或 )关系,例如
,1..*”代表一个或多个。在另一种语境中,Or关系用逗号
来表示,例如,5,10”代表 5或 10。 下图显示了各种可能的
多重性表示方法。
丈夫 妻子
11
一对一
Page 13 ?
老师 学生
*1
一对多
银行职员 顾客1..*
1
一对一或多
自行车 车轮
21
一对二
鸡蛋盒 鸡蛋
12,241
一对 12或 24




Page 14 ?
限定关联
? 当关联的多重性是一对多时, 就产生了一个特殊的问题:
查找问题 。 当一个类的对象必须要选择规则中的另一个类
的特定对象来满足关联中的角色时, 第一个类必须依赖一
个具体的属性值来找到正确的对象 。 这个属性值通常是一
个标识符号, 在 UML中, ID( identification,标识 ) 信息叫
做限定符 ( qualifier) 。 它的符号是一个小矩形框, 把作
为一对多多重性的一部分的类连在一起 。 图表示了这种关
系 。
房间预定表 预定的房间1 *
Page 15 ?
房间预定表 预定的房间1 1房间号
Page 16 ?
自身关联( reflexive association)
? 有时,一个类可能与它自身发生关联,这样的关联被称
为自身关联。当一个类的对象可以充当多种角色时,自
身关联就可能发生。
司机
乘客
1
1..4
搭乘
车上的人

Page 17 ?
继承( inheritance)和泛化(
generalization)
? 面向对象的一个特点是它能够反映日常生活中的常识:如
果你知道某事务所属的种类,你就自然会知道同类的其它
事物也具有该事物的一些特征。
? 在面向对象的术语中,上述的关系被称为继承,UML中也
称它为泛化。一个类,可以继承另一个类的属性和操作。
继承层次并不止是两层:子类还可以是另一个子类的父类

Page 18 ?
? 在 UML中,用父类到子类之间的连线关系来表示继承关系
。父类的连线部分,指向父类的一端带有一个空心三角形
箭头。
? 注意:在父类中已经指明的属性和操作,在子类中可以不用再指明。
? 子类除了继承父类的属性和操作外,通常也增加了自己的
属性和操作。


动物
两栖动物 爬行动物哺乳动物

Page 19 ?
? 子类除了继承父类的属性和操作外,通常也增加了自己的
属性和操作。
? 一个类可能没有父类,这种没有父类的类被称为基类(
base class)或根类( root class)
? 一个类也可以没有子类,没有子类的类被称为叶类( leaf
class),如果一个类恰好只有一个父类,这样的继承被称为
单继承( single inheritance),如果一个类有多个父类,这
样的继承就是多继承( multiple inheritance)。
Page 20 ?
找出继承的关系
? 系统分析员可以通过多种方式发现类之间的关系。作为候
选的类有可能和它们的父类、子类在谈话中同时被发现。
系统分析员能意识到某个类的属性和操作也许能被运用到
其它多个类当中去 —— 此外,这几个类还有属于自己的特
定属性和操作。
? 另一种可能情况是系统分析员注意到两个或多个类具有相
同的属性和操作数。
Page 21 ?
抽象类 ( abstract class)
? 像不提供实例对象的类被称为是抽象的( abstract)。
? 表明一个类是抽象类的方法是类名用 斜体书写 。下图示意
了抽象类和它的子类的表示方法。
前锋 中锋 后卫
球员

抽象类斜
体书写
Page 22 ?
依赖 ( dependency)
? 另一种类间关系是一个类使用了另一个类,这种关系叫
做依赖。最通常的依赖关系是一个类操作的构型中用到
了另一个类的定义。
? 依赖关系用带箭头的虚线表示,如图所示。
系统
表格
显示表格
Page 23 ?
类图和对象图
? 类图给出了一般性的、定义性的信息:一个类的特性以及
它的属性,以及和这个类关联的其他的类。对象图则在某
个特定时刻及时给出了一个类的多个具体实例以及它们如
何联系起来等相关信息。
Page 24 ?
小结
? 离开了类之间的关系,类模型仅仅只是一堆代表领域词汇的
杂乱矩形方框。关系说明这些词汇表达的概念之间的连接,
这样才能完整地说明我们所建模的对象。关联是类之间最基
础的概念性连接。关联的多重性说明了一个类的多少个对象
能够和另一个类的单个对象发生联系。和类一样关联也可以
有自己的属性和操作。
? 一个类可以继承其他类的属性和操作。继承了属性和操作
的了叫子类,被继承的类叫父类或超类。通过在初步类模型
中寻找不同类的共同属性和操作可以发现类之间的继承关系
。抽象类只是为了提供其他类继承的基类之用,它本身不产
生对象实例。
? 在依赖关系中一个类使用了另一个类。
? 类图给出了类的一般性定义。在某一特定时刻,及时对类
的具体实例建模则要使用对象图。