You are on page 1of 28

第三章

类图

ACCP V4.0
回顾
 用例图用于描述系统的需求
 用例之间的关系有:包含或扩展关系
 用例图用于表示系统的行为或功能
 用例图的各个组成部分包括:系统、参与者和用

 Rational XDE 可以方便的编写用例图

2 ACCP V4.0
目标
标识和理解关键抽象
标识所需的类
标识所需的类属性和方法
讨论类之间的各种关系
掌握如何在 Rational XDE 中绘制类图

3 ACCP V4.0
关键抽象
拍卖和拍卖物项 关键抽象
关键抽象是在系统范围上的一些重要概念,主要
是从需求中得到(例如词汇表、业务规约以及用
信用卡
例模型),这些概念也会涉及到系统所针对的业
业务实体 实体之间的关系
务领域知识。关键抽象通常表现为系统的实体
竞拍 ,
其重要的原因为:
分类 例如:一个拍卖就
包含一个拍卖物项
强调与系统设计有关的实体
在线拍卖
用户帐户和未付款项
排除系统外部多余的实体

最后,关键抽象成为分析模型中的类

4 ACCP V4.0
候选类
在分析的初始过程中阐明的类称为候选类

冗余类 无关类
多个类定义同一 任何不属于应用程
个实体 序域的类都需去除

标识类的角色 模糊类
保留基类,而排除 没有明确功能的
所有作为角色的类 类称为模糊类

标识候选类
5 ACCP V4.0
识别类 3-1
 类是一组对象,这些对象具有共同的属性和共同的行为
 类是创建对象的模板

类可捕获对象的本质

对象是类的实例化

6 ACCP V4.0
识别类 3-2
在标识类时,需查找:
有形事物
事件
扮演的角色
交互
位置
组织单位

7 ACCP V4.0
识别类 3-3
 标识的类也称为候选类。可从以下方面标识类:
用例

需求说明 需求说明 研究系统


应用程序专家

用例 应用程序专家

 分析以下方面可标识其他候选类:
以前的系统
相似的系统
候选类

相似的系统

以前的系统

8 ACCP V4.0
类图 2-1
 类是对一组对象的描述,这些对象具有相似的属性、操作、关系
和行为。

结构 说明 语法

对一组对象的描述,这些对象具有相同

的属性、操作、方法、关系和语义

类名称 Window
类名称
size: Size
属性 属性 visibility: boolean

方法 display()
操作 hide()

9 ACCP V4.0
类图 2-2
类名称 属性值

 类名称通常可对应于现实生活中的实体
属性类型
Order
类属性 类名称
AccountHolder
属性名称 -id: integer
-quantity: integer = 0 属性
属性(:特性,特征) -Name: String
-Age: Integer
<<Constructor>>
+Status: Boolean
访问模式 属性是进一步描述对象实例的数据。
+Order(id: integer)
# Hobby : String
<<accessor>>
+getQuantity(): integer
<<mutator>>
+setQuantity(id: integer) 方法
类方法 <<business logic>>
AccountHolder
+addOrder(id: integer)
-Name : String
操作(:方法、服务和行为) +cancelOrder(id:integer)
-Age : Integer
+Status : Boolean
操作是对象可执行的过程。
# Hobby : String参数类型

方法名
+GetName(): String 参数名称

+SetName(sName : String)
10 ACCP V4.0
在 Rational XDE 中构建类图
创建一个项目
新建一个类图
添加UML类
添加属性和操作(方法)

11 ACCP V4.0
对象图
实例化于
对象 类

CAH : AccountHolder

Name = “Charles”
Age = 35
Status = True

属性变量 赋予的值

12 ACCP V4.0
类关系
类不是孤立存在的
因此,类与类之间创建了一种关系:
组合 聚合
类关系可能指明某种共享关系
类关系可能指明某种类型的语义连接

接口与实现 类关系 依赖

关联 泛化与继承

13 ACCP V4.0
关联 2-1
结构 说明 语法

两个或多个类符之间的一种关系,此
关联 关系涉及类的各个实例之间的连接

 识别类之后,需要识别关联
 多重性(multiplicity)定义有多少对象参与了某个关系
 各个类都可能与自身有关联

雇员 部门 公司

示例:“雇员为公司工作”

14 ACCP V4.0
关联 2-2
public class Person {
/** @modelguid {AE706A50-C99B-4002-B0BC-8BF3830FC5A7} */
private Car _Vehicle;
}

public class Car {


/** @modelguid {F6646612-CF1E-4039-9A1B-36FD4ACACD5F} */
public String go() {
return new String("Hi! it going.");
}
/** @modelguid {5439D942-4CD0-4F1E-BF7B-096DFFB66303} */
public void startEngine() {
}
}

15 ACCP V4.0
泛化 2-1
结构 说明 语法

泛化 它是较一般类和较具体类之间的分类关系

 泛化:标识各个类之间的共同性。
形状
抽象类 父类
 指明特化类(子类)的对象可取代泛化类(父类)的对象。
{抽象}
 是“is-a”关系。

泛化关系

圆圈 子类

16 ACCP V4.0
泛化 2-2
public class Printer {
/** @modelguid {949C10B9-AFE3-40BB-8201-3B87B5E23BB0} */
public void print() {
}
}

public class ColorPrinter extends Printer {


/** @modelguid {E708B557-A667-4319-B199-A52E7F182B71} */
public void print() {
}
}

public class BlackWhitePrinter extends Printer {


/** @modelguid {6808C7F6-0353-48C8-A325-28E6BAB12FEC} */
public void print() {
}
}

17 ACCP V4.0
依赖 2-1
结构 说明 语法

如果一个类依靠另一个类的服务来完成其
依存
角色,则它们之间的关系称为依存关系

 依赖关系指明两个或多个类之间的语义关系,尽管两个类之间没有明确
的关联,一个类发生变化也会导致另一个类发生变化。

 可用一种构造型来表示依赖的类型。

18 ACCP V4.0
依赖 2-2
public class Worker {
/** @modelguid {48434AC5-09B2-4769-A478-17A9CCF08596} */
public void purchaseCleaner(Cleaner clean) {
//use cleaner
//forget about cleaner
}
}

public class Cleaner {


/** @modelguid {60A968A8-D591-433F-98DB-536240F149CA} */
public void clean() {
}
}

19 ACCP V4.0
聚合 2-1
结构 说明 语法

一种特殊形式的关联,指定了聚合(整
聚合
体)和组件部分之间的整体 - 部分关系

 共享聚合(空心菱形)意味着在组合端的多重性有多个。
2..* 1..*
汽车
 模拟“整体-部分”关系。 门 房子

整体 部分

20 ACCP V4.0
聚合 2-2
public class Computer {
/** @modelguid {5B07F355-C068-4F71-B2CC-
E5B5E9C298ED} */
private KeyBoard _KeyBoard;
}

public class KeyBoard {


}

21 ACCP V4.0
组合 2-1
结构 说明 语法

一种特殊形式的关联,指定了聚合(整
组合
体)和组件部分之间的整体-部分关系

 这是一种更强的聚合,表达了类与类之间更强的耦合
 组合的图形为实心菱形。
圆圈 点 圆圈
 容器负责创建和删除各个部分。

多边形

22 ACCP V4.0
组合 2-2
import java.util.ArrayList;
/** @modelguid {AA7857DF-9F6C-4A65-A41D-E4A92998A343} */
public class Motor {
/** @modelguid {0BFB212F-9DCE-4D48-AE12-A2DDEA980E17} */
private ArrayList _Cogs = new ArrayList();

/** @modelguid {E4522F65-B996-4CDD-A75E-81FE14A7FCB1} */


public Motor(){
this._Cogs.add(new Cog());
this._Cogs.add(new Cog());
}
}

public class Cog {


}

23 ACCP V4.0
接口和实现 2-1

• 类接口用于描述类的
外部可见行为。 符号
• 它呈现为一个圆圈与
名称一同出现。

• 类的实现是其内部视
图,涵盖了其行为的
验证 秘密
• 类的接口提供了其外
部视图,因此在隐藏
其结构以及其行为的
秘密时,强调了抽象

24 ACCP V4.0
接口和实现2-2
public interface ICargoTransport {
/** @modelguid {66855DC0-6F08-42DE-ADA1-FD06625C8605} */
public void loadCargo();
}

public class Truck implements ICargoTransport{


public String go() {
return new String("It is going!");
}
/** @modelguid {4E19DF60-35EA-4827-943A-51CC99255A48} */
public void loadCargo() {
}
}

25 ACCP V4.0
绘制”在线拍卖”系统的类图

26 ACCP V4.0
总结
关键抽象是一个类或一个对象,可组成问题域词
汇的一部分
在派生关键抽象时,一定要记住抽象的层次不应
过高或过低
UML类是一个包括类名、属性和操作三个部分的
矩形
可通过以下方面标识类:
需求说明
用例
应用程序专家
研究系统
27 ACCP V4.0
类之间的各种类型的关系包括:
关联
泛化
依赖
聚合
组合
接口与实现

28 ACCP V4.0

You might also like