类 是在面向对象编程中一个重要的概念,即将实体抽象成某类能描述的结构
类图 (Class Diagram)描述类的静态结构,定义类及描述类之间的联系(关联、依赖等关系),还包括类的内部结构(属性和方法),类图是一种静态模型类型,一个类图根据系统中的类以及各类之间的关系描述系统的静态结构
类图的表示
类图一般包含了 7 个元素: class(类),Interface(接口)、Collaboration(协作)、Dependency(依赖关系),Generalization(泛化关系),Association(关联关系)、Realization(实现关系),在 UML 中用矩形来表示 3 个部分: 名称部分,属性部分和方法部分
对象图
对象图描述一组对象和他们之间的关系,他是系统状态的某一时刻的快照,它的使用有限,他主要用于了解系统在某个特定时刻的具体情况和数据结构,对象图表示方法和类图大致相同,对象图中的对象属性可以有具体值,类图中的一个类可以对应成对象图中的多个对象
类图之间的关系
1. 依赖关系(Dependence)
只要在类中用到了对方,那么他们之间就存在医疗关系,如果没有对方,则编译都不能通过,如 动物类 依赖 水类
2. 泛化关系 (Generalization)
泛化通常意味着继承,一个种类是一个大类,但是大类你不能说就是这种种类;比如鸟是动物,但是动物不一定是鸟(我是菜鸟,但是菜鸟可能还是我的朋友阿强)
3. 实现关系 (implementation)
implementation 就是实现的意思,这个关键词让你想到的肯定是“接口”对吧,实现接口嘛(来TM一波面向接口编程!) 看代码你就懂了
/**
* 实现关系 Implementation 一般就是实现某一接口
* 你有敲代码的行为,而敲代码这一行为对于不同的开发是不一样的
* 比如: 前端开发的就是 敲代码使用 js 或者 ts 来写的,而后端 可能是使用 java 或者 golang 来写的
*/
// 接口是行为的抽象,是 has 的关系
interface WriteTheCode {
// 我就问你 能做不能做!
do(): boolean;
}
class People {
public name: string | undefined;
public age: number | undefined;
}
// 前端用 ts 来写代码
export class FrontEnder extends People implements WriteTheCode {
public name: string | undefined;
public age: number | undefined;
do() {
console.log("fronter use typescript coding!");
return true;
}
}
4.关联关系 (Association)
关联就是有关联的意思,这种类似mysql中表的关联关系一样,可能存在着多种关联,比如一对一、一对多、多对多的关系,而类图中的关联关系就有 1 对 1, 1 对 0+, 1 对 0,1(0 或 1), 1 对 n...m (n到m个都可以),1 对 m... (至少m个)的关系(这些关系就叫多重性) 如:麻雀和它的妈妈就是 1 对 1 的关系,但是麻雀和麻雀的朋友就有可能是 1 对 0...n 的关系
5.聚合关系 (Aggregation)
聚合关系表示的是整体和部分的关系,整体与部分可以分开 聚合关系是关联关系的特列,所以它且具有关联的导向性和多重性,聚合的双方生命周期式独立的。 比如:比如大雁 和 雁群, 大雁聚合在一起才有雁群,而每一只大雁的生命是独立的