观看前确保自己对类的概念已经有所了解了。
类图(Class Diagram)
描述类、接口及它们之间关系的图,显示系统中各个类的静态结构。
参考类图
完整的关系
该图片来自百度百科
类
类的3个基本组件:
- 类名
- 属性
- 方法
属性和方法都有各种声明
+表示public
-表示private
#表示protected
~表示default,也就是包权限
_下划线表示static
斜体 表示抽象
field:type3
method(type1,type2):type3
type1、type2是函数参数的类型,type3是函数的返回类型.
如果只是为了理解整个项目架构也可以不带属性或者方法。
接口
接口组件和类组件类似
简单的接口
类图其实就是接口和类的不断组合组成一个结构。不同的类之间会有不同的关系,比如继承或派生,引用或调用等。
这只是当然函数意义上的关系,在类图之间的关系与此又不太一样,有细分之处。
类之间的关系——表示形式一览
在UML类图中,常见的有以下几种关系:
- 依赖(Dependency)
- 泛化(Generalization)
- 实现(Realization)
- 关联(Association)
- 聚合(Aggregation)
- 组合(Composition)
下图来自关系线条
依赖关系(Dependency)——任何形式的使用
有两个元素如果修改X的定义可能会影响Y的定义,则认为Y依赖X
。
依赖关系可能由各种原因引起,如一个类向另一个类发送消息,或者一个类是另一个类的数据成员类型,或者一个类是另一个类的方法的参数类型等。
只要是在类中用到了对方,那么他们之间就存在依赖关系。
类中用到了对方:
- 如果是类的成员属性
- 如果是方法的返回类型
- 如果是方法接收的参数类型
- 如果在方法中使用到
有时依赖关系和关联关系比较难区分。如果类A和类B有关联关系,它们之间必然有依赖关系。如果两个类之间有关联关系时不用再表示出这两个类之间的依赖关系。
依赖关系有时候也可以看成是以函数参数类型的方式使用产生的联系,别的依赖关系都可以以关联或者更细化的聚合组和来描述。
依赖关系的表示:带箭头的虚线,指向被使用者。
泛化(Generalization)——类和接口的继承
泛化关系实际上是依赖关系的特例,如果A类继承了B类,我们就说A和B存在泛化关系
例如,人类和中国人之间的关系。
泛化关系的表示:带空心三角箭头的实线,箭头指向父类
实现关系(Realization)——接口的实现
实现关系:是一种类与接口的关系,表示类对接口所有特征和行为的实现
实现关系的表示:带三角箭头的虚线,箭头指向接口
关联关系(Association) ——类 类型 的属性
关联是一种拥有的关系,它使一个类知道另一个类的属性和方法。关联一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;
表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
例如,老师,学生和课程之间的关系。
关联关系的三种表示
聚合关系(Aggregation)——相对独立的关联
一种特殊类型的关联
表示整体与部分关系的关联
描述了“has a”的关系
在基本的聚合关系中, 成员对象的生命周期 独立 于整体类的生命周期。
例如,学校和班级之间的关系。
聚合关系的表示:右边的箭头指向 部分
组合关系(Composition)——单向依存的关联
组合是聚合关系中的一种特殊情况,是更强形式的聚合,又称强聚合
聚合关系是“has-a”关系,组合关系是“contains-a”关系
成员对象的生命周期取决于聚合的生命周期
聚合不仅控制着成员对象的行为,而且控制着成员对象的创建和析构
例如,鸟和翅膀之间的关系。
为什么说是单向依存的关联呢?
——因为双向依存在创建的时候会进入一个死循环状态,A在创建的时候需要创建B,然后创建B的时候需要创建A,双方的创建都需要创建对方,可到最后谁都无法成功创建。
组合关系的表示:右边的箭头指向 部分