类图和对象图概论
第5章
类图和对象图
5.1 类定义 5.2 类之间的关系 5.3 其他概念 5.4 类图 5.5 OO设计的原则 5.6 对象图 5.7 类图建模实例
类
隐藏属性和操作的类
类名:名词,一般采用CamelCase格式。 简单名(simple name):如Member 全名,也称路径名(path name):是在类名前面加 上包的名称,如com::domain::Member
多重性:若类A和类B之 间有关联关系,多重性定 义了类A有多少个实例可 以和类B的一个实例关联。
多重性的值表示在特定时 刻(而不是在某个时间跨 度内)有效关联的实例数 量。
导航性:关联关系的方向。在关联关系上加上导航箭头表 明可以从源类的任何对象到目标类的一个或多个对象(取 决于关联端的多重性)。箭头指向目标类。
类的特征,描述该类实例中包含的信息。 [可见性] 属性名[:类型] [多重性] [=初始值] [{特性}] 静态属性:用下划线标识的属性名,该类的所有对象
之间共享该静态属性。 类所提供的服务。
[可见性] 操作名 [(参数列表)] [:返回类型] [{特性}]
静态方法:用下划线标识的方法名(操作名)
关联的种类
自返关联(reflexive association):又称递归关联,是一 个类与它本身相关联,也就是同一个类的两个对象间的关 联。
自返关联
二元关联:指在两个类之间进行关联。 N元关联:在3个或3个以上类之间的关联。N元关联中多
重性的意义是:在其他N-1个实例值确定的情况下,关联 实例元组的个数。
抽象类是不能被直接实例 化的类,即不能创建一个 属于抽象类的对象。
抽象类
1、接口 接口是一个提供给外界的操作的命名集合,不含有属性。 2、实现关系 接口和类之间的实现关系,意味着这个类必须自己声明
建模。
DemandDepositAccount
Customer
holds
Account
1
0..n
FixedDepositAccount CreditCardAccount
银行账户模型类图1:泛化
泛化定义了一般元素和特殊元素之间的分类关系,可以 克服以上两个问题。一般元素称为父类或超类,特殊元 素为子类。
派生属性(derived attribute)和派生关联(derived association):指可以从其他属性和关联计算推演得到 的属性和关联。
Company 1
n Department
/Work ForCompany
1 Work ForDepartment
0..n
Person
派生关联
派生属性
Rectangle不存在了,并不意味着Style也消失了。
聚合关系的实例具有传递性和反对称性。
2、组合(composition)
组合也表示整体与部分的关系,又被称为强聚合。在 组合中,部分与整体具有相同的生命周期,“部分” 对象完全依赖于“整体“对象。
Window
1
Frame
1..n
撤销一个Window时,Window对象必须依次撤销它的 Frame 部分。
使用建议
关联关系的增强机制,如关联名、关联角色、限定关联、 约束、派生属性和派生关联等虽然拥有很强的语义,但 是在类的建模实践中不要滥用,也不要刻意使用,否则 容易陷入过渡设计,并降低类图的可读性。
1、聚合(aggregation) 聚合是一种特殊形式的关联,表示部分与整体(part of)的关系,“部分”可以独立于“整体”而存在。 聚集使用带空心菱形的实线表示,菱形指向“整体”。
有两个元素X、Y,如果修改元素X的定义可能会引起对 另一个元素Y的定义的修改,则称元素Y依赖 (Dependency)于元素X。
依赖关系
引起依赖关系的原因
如客户类向提供者类发送消息 提供者类是客户类的属性类型 提供者类是客户类的操作的参数类型 提供者类是超类或接口
5.3.1 抽象类
当某些类有一些共同的方 法或属性时,可以定义一 个抽象类来抽取这些共性, 然后将包含这些共性方法 和属性的具体类作为该抽 象类的继承。
双向关联、单向关联
关联类即是关联也是类,不仅像关联那样连接两个类, 还可以定义一组属于关系本身的
约束:用来说明规则,加强(关联的)含义,也可以应用于 其他建模元素。
限定关联:存在限定符(qualifier)的关联称为限定关 联(qualified association)。限定符用于从规模较大 的相关对集合中,依据限定符的值选择一个或多个对象。
3、何时使用聚合和组合
例 电脑是整体类,主板、CPU等相对于电脑是部分类。
在固定资产管理系统中: 组合 在线DIY系统: 聚合 判断是聚合还是组合关系,要根据需求分析描述的上下 文来确定。
银行账户模型类图1:关联
存在问题:此例中关联使简单问题复杂化。
(1) 关联过多, (2) 拥有大量公共结构的不同种类账户作为完全不相关的类
关联名
关联的角色是关联关系中一个类对另一个类所表现出来 的职责。角色的名称是名词或名词短语。 关联关系上没有标出角色名,隐含用类名作为角色名。
关联的角色
多重性表示
语义
*
0或多
n
0或多
0..*
0或多
0..n
0或多
0..1
0或1
1..*
1或多
5..Байду номын сангаас5
5到15个
3
只能3个
说明:UML中用*表示不确切的最 大数,Rose中用n表示
5.2.1 关联
关联是模型元素间的一种语义联系,它是对具有共同特 征、行为特性、关系和语义的链的描述。 关联和链,类和对象
A
B
类之间的关联关系(双向关联)
关联端:关联的任何一个连接点都叫做关联端,一个关 联可以有两个或多个关联端,每个关联端连接到一个类。
关联名:动词或动词短语,用来描述关联的性质和作用。
可替换性:在任何需要一个父类的实例的地方,都可以 用一个子类的实例代替。这种现象是多态性的一种形式。
:Customer
:Customer
:DemandDepositAccount
:FixedDepositAccount
:CreditCardAccount
泛化----子类实例替换父类实例
注意:泛化关系只能使用在类型上,而不是实例上