## UML类图与对象图
### 基本概述
类图(Class Diagram)应该是使用的最多的一种UML图。其语法并不复杂,可能只需要几天时间就能掌握,但是其背后的面向对象(OO)思想却是需要日积月累才能深刻理解。
### 面向对象的四种常见思想
1、OOA(Object-Oriented Analysis 面向对象分析)
2、OOD(Object-Oriented Design 面向对象设计)
3、OOP(Object-Oriented Programming 面向对象编程)
4、OOT(Object-Oriented Technology 面向对象技术)
PS:无论是开发人员还是分析人员,这几种思想是必须要掌握的,作为开发人员来说,OO的思想,其深度和延伸内容可谓博大精深,值得花时间去学习。
### 类的概念
类可以视作一现实事物抽象出的统一的、相似的模型。
### 对象的概念
对象可以看做是类的具体化,就像模具导出的产品一样。
### 类图
类图就是描述类与类之间关系的图。
案例:
![](https://box.kancloud.cn/2016-02-25_56cec6c1f12af.jpg)
### 类图的建模步骤
1、识别出类。
2、识别出类的主要属性。
3、画出类之间的关系。
4、对各类进行分析、抽象、整理。
### 关联关系
两个类之间有关系,但又不确定是什么关系,可以用关联关系表达。
![](https://box.kancloud.cn/2016-02-25_56cec6c20b824.jpg)
![](https://box.kancloud.cn/2016-02-25_56cec6c21ea6c.jpg)
PS:关联关系如果出现数量上的对应可以写上数字表示数量,可以用角色关系表示两类分别处于什么角色,单向关联关系表示关联是单向的,只能由关联方找到被关联方。在写代码时,可以将其视作关联类包含了被关联类的一个引用。
### 包含关系
包含关系表示一个类包含另一个类。
![](https://box.kancloud.cn/2016-02-25_56cec6c22ea7b.jpg)
PS:包含关系分为两种,一种是弱包含关系,叫做聚合,为空心菱形,一种是强包含关系,叫做组合,为实心菱形。一开始可以将所有包含关系视作弱包含,当发现某些关系可以用强包含表示时,才转为强包含关系。
### 泛化关系
当一个类是另一个类的子类时,可以使用泛化关系。
![](https://box.kancloud.cn/2016-02-25_56cec6c2465c8.jpg)
PS:泛化关系通常也被称作继承关系,根据类的发现先后关系,如果是由父类导出子类,这样就可以说子类继承父类,如果是由子类导出父类,这样就可以说父类泛化子类。
### 实现关系
当一个类可以实现某个抽象类时,可以使用实现关系。
![](https://box.kancloud.cn/2016-02-25_56cec6c2554b2.jpg)
PS:标识接口与类之间的关系用的比较多。
### 依赖关系
当一个类需要另一个类协助时,可以用依赖关系表示。
![](https://box.kancloud.cn/2016-02-25_56cec6c264cdc.jpg)
### 递归关系
当某类使用或者包含自己时,可以使用递归关系。
![](https://box.kancloud.cn/2016-02-25_56cec6c287d9e.jpg)
### 三角关系
当发现两个类之间的关系不能用一般关系来表示,这时候可以用关联类来表示关系,这也就是三角关系。
![](https://box.kancloud.cn/2016-02-25_56cec6c29d860.jpg)
PS:可以通过思考属性是否恰当来识别出关联类关系,列出两类的关键属性之后,思考这些属性的属性值是不是由该类本身就可以确定,如果不能两类之间就可能有关联类关系。
### 小结
![](https://box.kancloud.cn/2016-02-25_56cec6c2b411d.jpg)
### 对象图
如果说类图代表了一类事物,那么对象图就代表着某个具体的事物。
![](https://box.kancloud.cn/2016-02-25_56cec6c2c9574.jpg)