类图是14种UML(统一建模语言)中的一种,是面向对象程序的核心建模工具,能够描述接口、类以及他们之间的协同关系,显示项目中这些概念的静态结构。
本文是我参考多篇博客整理而成,意在帮助自己开发过程中绘制更为清晰和规范的图示,使得整个软件设计有更好的可读性和理解性,降低开发的风险,同时也方便与其他研发同事的沟通交流。
类图概括起来可以分成两个部分:类和类之间的关系,接口也是类的一种。这里涉及到两种定义,我们分别来看一下:
1、类
类的定义分为三部分组成,分别是 类名、类的属性、类的方法。
1.1 类的构成
- :private 私有的,只有本类可见
+ : public 公共的,外部类可见
# : protected 受保护的,派生类可见
~ : 默认的,本包下的类可见
以上的符号对类的特征和行为都是适用的。在类的方法中,方法名后面括号中是入参,格式是 形参名1:类型, 形参名2:类型,也可以赋予默认值,括号后面是返回值,无返回值可以不写,有些博客中建议用 void 来表示返回值。
1.2 类的名称
另外还有类名的定义,如果是接口或者抽象类,可以使用斜体或者<< xxx >>来表示,如下:
2、类之间的关系
在UML类图中,类与类之间的关系有四种,如下:
泛化:表示一般与特殊的关系,可以理解为继承;
实现:表示类与接口/抽象类的关系,类是接口/抽象类的特征和行为的体现。
关联:表示类之间的一种持有关系,如 A类作为B类的成员变量;
依赖:表示类之间的一种使用关系,如 A类作为B类某个方法的 局部变量、形参、返回值等。
2.1 泛化关系
【定义】可以理解成是一种继承关系(包含抽象类的继承),表示子类继承父类的所有特征和行为;
【表示】用实线和空心三角表示,比如Son类继承Father类,则Son类指向Father类
2.2 实现关系
【定义】是类的实现关系,表现为类实现接口,能够体现后者的所有特征和行为。
【表示】用虚线和空心三角表示,比如ServiceImpl实现了Service接口,则ServiceImpl指向Service接口
2.3 关联关系
【定义】是类中对象与对象的关系,可以理解为一个对象所有的成员变量
【分类】关联关系是可以分为 “自关联”、“单向关联”、“双向关联”、“聚合关系”、“组合关系”5种,表示方法略有不同
2.3.1 自关联
【定义】一个对象持有自身类型的属性
【表示】用实线和箭头表示,自己指向自己
2.3.2 单向关联
【定义】一个对象持有另一个类型的属性
【表示】用实线和箭头表示,上层指向下层
2.3.3 双向关联
【定义】两个对象互相持有对方类型的属性
【表示】用实线表示,无箭头
2.3.4 聚合关系
【定义】聚合关系是一种比较弱的关联关系,比如大雁和雁群,雁群不在了,大雁还是可以存在的。可以理解为 集合类的成员变量,如 List<大雁>
【表示】用空心菱形、实线、箭头表示
2.3.5 组合关系
【定义】组合关系是一种比较强的关联关系,成员的生命周期取决于聚合的生命周期,比如公司和部门,公司不存在了,部门也就没有存在的意义。
【表示】用实心菱形、实线、箭头表示
2.4 依赖关系
【定义】一个对象在运行期间与用到的对象之间的关系,具体表现为某个对象作为另一个对象方法的形参、局部变量、方法的返回值,或者A类调用了B类的静态方法(下图代码表示了依赖关系中的三种形式)。
【表示】用虚线和箭头表示
3、总结
使用UML类图,我们没必要纠结比如聚合、组合关系应不应该带箭头这样的问题,更多的应该关注我们呈现出来的类图,能否让别人更好的理解我们的设计思想。
参考博文如下:
1. 《掌握14种UML图,清晰图示》 https://aikysay.blog.csdn.net/article/details/125069834
2. 《UML概述》 UML概述-CSDN博客
3. 《[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一》 [UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一_类图怎么画-CSDN博客