UML类图介绍
unified modeling Language(统一建模语言),主要用于对类的关系的建模画图,在设计程序之前画
类的UML画法示例
title:代码
collapse:open
```cpp
class Hunter
{
public:
int m_age = 32;
static int m_time;
string getName()
{
return m_name;
}
void setName(string name)
{
m_name = name;
}
static void saySorry()
{
string count = to_string(m_time);
cout << "Sorry to Animal" + count + "times" << endl;
}
protected:
string m_name = "nack";
void aiming()
{
cout << "使用" << m_gunName << "瞄准" << endl;
}
private:
string m_gunName = "AK-47";
void shoot()
{
cout << "使用" + m_gunName + "射击" << endl;
}
};
UML类图示例
UML类图图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
Hunter
- m_age:int = 32
- m_time:int
m_name:string = “jack”
- m_gunName:string = “AK47”
- getName():string
- setName(name:string):void
- goHunting():void
aiming():void
- shoot():void
指向原始笔记的链接
- saySorry():void
解读:
+私有#保护-公有:后加指定 (参数/返回)类型=默认值__下划线(这里用黄色字体表示) 静态类型
类的关系
继承关系
继承也称泛化,用于描述父子类之间的关系,父类又称为基类或超类,子类又称作派生类,在UML中,泛化关系用带空心三角形的实线表示。
继承关系有两种:普通继承和抽象继承,但是UML画法不变。
title:Example
这里设计两个类
`gird`鸟类
`cuckoo`布谷
`eagle`鹰
UML类图
继承关系UML类图图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
bird
getName():string
setName(name:string):void
fly(): void
eat():void
cuckoo
- fly(): void
- eat():void
eagle
指向原始笔记的链接
- fly(): void
- eat():void
- 倾斜字体(用蓝色字体表示) 抽象类成员函数
关联关系
单向关联关系是类与类之间最常用的一种关系,它是一种结构化的关系,表示一个对象与另一个对象之间的联系,如汽车和轮胎,班级和学生等。
用(带箭头或不带箭头的)实现链接有关联关系的类。c++中这种关联关系在类中是这样体现的,通常将一个类的对象作为另一个类的成员变量。
类的关联关系有三种,单向关联,双向关联,自关联。
单向关联关系
常见例子: 父类有子类。
title:代码示例
collapse:open
```cpp
class par
{
};
class child
{
private:
par m_farther;
};Note
单向关联关系图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
parent
child
指向原始笔记的链接
双向关联关系
常见例子:类成员相互包含
title:Example
collapse:open
```cpp
class par
{
child m_child;
};
class child
{
private:
par m_farther;
};UML类图
双向关联关系图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
par
child
m_child:child
m_father:par
or
指向原始笔记的链接
在画UML类图时,没有箭头的实现表示双向关联关系,但是也可以是双向箭头
自关联关系
常见示例:链表
title:代码示例
collapse:open
```cpp
class nodes
{
nodes *next;
};UML类图
自关联关系图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
nodes
指向原始笔记的链接
- next:nodes*
聚合关系
聚合关系表示整体与部分的关系。在聚合关系中,成员对象是整体的一部分,但是成员对象可以脱离整体对象独立存在。
在UML中,聚合关系用带空心菱形的直线表示。
title:聚合关系Example
collapse:open
- 汽车: 引擎,轮胎,车灯。
- 森林: 植物,动物,水,阳光。
```cpp
class Animal{
};
class Plant{
};
class Water{
};
class Sun{
};
class Forest{
Water wt;
Plant pl;
Animal an;
Sunglass sg;
};UML类图
聚合关系图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
Forest
- wt:Water
- pl:Plant
- an:Animal
- sg:Sun
Animal
Water
Plant
Sun
指向原始笔记的链接
组合关系
组合关系也表示整体和部分的关系,但是组合对象可以控制整体对象的生命周期,一旦整体对象不存在,整体对象和成员对象之间具有共同生死的关系。
在UML类图中用带实心菱形直线表示。
- 头,嘴巴,…
- 树,树干,树枝,树叶,树根
title:组合关系Example
collapse:open
- 汽车: 引擎,轮胎,车灯。
- 森林: 植物,动物,水,阳光。
```cpp
class Root{
};
class Trunk{
};
class Branch{
};
class Leaf{
};
class Tree{
Root rt;
Trunk tk;
Branch bc;
Leaf lf;
};UML类图
组合关系UML图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
Forest
- rt:Root
- tk:Trank
- bc:Branch
- lf:Leaf
Branch
Leaf
Root
Trank
指向原始笔记的链接
当一个物体既有聚合关系有和组合关系有关,具体问题具体分析
依赖关系
依赖是一种关系,特定时间会影响到该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。
依赖关系大多数情况下体现在某个类方法使用另一个类的对象作为参数。
在UML类图中,依赖关系用带箭头的虚线表示,有依赖的一方指向被依赖的一方。
title:组合关系Example
collapse:open
- 驾驶员开车需要使用车对象的move方法
```cpp
class Car{
public:
void move(){}
};
class Driver{
void drive(Car car)
{
car.move();
}
};UML类图
依赖关系图解
⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠
Text Elements
Car
Driver
指向原始笔记的链接
- move():void
title:Summary
collapse:open
- 将一个类的对象作为另一个类方法的参数
- 在类方法中将另一个类的对象作为其对象的局部变量
- 在一个类的方法中调用另一个类的静态方法区别
title:Summary
collapse:open
类关系强弱顺序是这样的:
继承(泛化) > 组合 > 聚合 > 关联 > 依赖关联关系两个对象间一般是平等的,聚合是不平等的。
组合对象的生命周期有很大关联。被组合对象创建在组合对象之后销毁在组合对象之前,聚合不是。
一般来说被组合对象不能脱离组合对象独立存在,聚合可以属于多个聚合对象。
下一节 设计模式三原则