在我们的平常工作中,完成某个项目或者功能不可能直接打开项目讲解思路,更多的是使用某种图表来表达我们的思想,其中UML类图就是一种非常便利的手段。
类图可以显示项目中不同类的属性、操作以及不同对象之间的关系。
首先给出一个实例UML类。

类图分三层,第一层为类名,第二层为成员属性,第三层为成员函数。
上图中该类的类名为:Socket,标记为
成员属性表示格式为:符号 成员属性名 : 数据类型名。
其中,符号有三种,一种是"+":public(共有成员),一种是”-“:private(私有成员),一种是”#“:protected(保护成员)。包括第三层成员函数前面的”+“、”-“、”#“也是同义。
将# m_uvLoop : uv_loop_t*翻译为C++中类即为:
class Socket{
protected:
uv_loop_t* m_uvLoop;
}
成员函数表示格式为:[<<符号1>>] 符号2 函数名(符号3 形参名 : 数据类型,…) : 函数返回值。
其中,符号1可为:static或者const或者两者(表示函数是静态的或者const不变的)。
符号2同第二层所说。
函数名如果为斜体,则表示为纯虚函数/虚函数,否则为普通函数。
符号3可为:in(参数是一个输入参数)、inout(参数既为输入参数也为输出参数,传入传出值)、out(参数是一个输出参数)。
将<
class Socket{
protected:
static void UvOnAllocBuffer(uv_handle_t* handle, size_t size, uv_buf_t* buf);
}
TIPS:符号1关于表示函数是否为static或者const的表示方式以及函数名为斜体的含义,来源于互联网,不保证权威性以及正确性,仅供参考使用。
参考链接:https://blog.csdn.net/q584401071/article/details/122201102
UML类图描述的是项目中类与类之间的关系,接下来博主从实际使用的角度出发,简要说明UML类图的各大关系。包括依赖、关联、聚合、组合、实现、继承。其中强弱关系:依赖 < 关联 < 聚合 < 组合 < 实现 = 继承。
人使用用计算机,在人这个类里面用到了计算机,说明二者是依赖关系。

TIPS:简单地说,就是类中某个成员函数的参数用到了某个类,那么就是依赖关系。注意连线表示及方向。
如妻子和丈夫,老师和学生,学生和课程,两者需要对方,但是不是包含关系。关联既有单向又有双向。比如学生和课程关联,但是课程不和学生关联,学生需要用到课程,但是课程不需要用到学生。

TIPS:简单地说,两者不为包含关系,且一个类为另外一个类中成员属性容器中的元素,那么就是关联关系。注意连线表示及方向。
如大雁和雁群,一只只大雁组成雁群,但是大雁又能脱离大雁群而存在。这里需要注意大雁和大雁本身,如果一个雁群只有一个大雁,且不会有大雁增加,那么该群体就是一个特例,也就是说是一个单例,对应C++中的单例类。

TIPS:简单地说,两者必须为包含关系,且一个类为另外一个类中成员属性容器中的元素,那么就是聚合关系。注意连线表示及方向。
大脑是人体的一部分,作为人体的一部分,即可以理解为作为成员而存在。两者从有这个对象就不可分离。

TIPS:简单地说,就是一个类作为另外一个类的成员属性而存在。那么就是组合关系。注意连线表示及方向。
类比于C++的面向对象三大特性之一的动态多态,即虚函数。对抽象类进行实现。

TIPS:注意连线表示及方向。
类比于C++的面向对象三大特性之一的继承。

TIPS:注意连线表示及方向。
以下应用仅供参考,各类之间的连线关系可能存在错误,并未严格检查。
