1、面向对象
面向对象分析:OOA(Object-Oriented Analysis)
面向对象设计:OOD(Object-Oriented design)
面向对象分析和面向对象设计的核心问题是怎么抽象对象。类图就是用来表示对象,可以表示对象的属性、行为以及对象之间的关系。
2、类之间的关系
2.1 关联
最简单关联关系如下图,类图之间是一条直线连接,也可以称为“直线”关系。在需求分析时,暂时不知道两个类之间是啥关系,就先画条直线,等对项目进一步了解后,再添加箭头、一对一或一对多的信心。
“箭头”关系:classA可以找到classB,比如classA(a)的一个成员变量b是classB的引用,a.b
2.2 包含
包含关系分两种,弱包含和强包含,分别用空心的菱形和实心的菱形表示,菱形靠近主体这边。标准叫法是聚合(弱包含)和组合(强包含)。
“弱”体现在如果主体没有了,子体还能继续存在,比如人和衣钵,人没了,衣钵还能给别人。
“强”体现在如果主体没有了,子体也不能存在了,比如人和器官,人没了,器官也就没了。
如果处于医学的角度考虑到器官移植,那么人和器官也就成了“弱”包含的关系。
一般画UML图时,先视为弱包含,等确定为强关系后,再将菱形涂黑即可。
2.3 继承
继承关系好理解,龙生龙凤生凤老鼠的孩子会打洞,都体现了继承关系。如下图,classB继承了classA,classB将具有classA的非私有的属性和方法。也可以反过来理解,classB抽象(泛化)为classA。
标准UML中,继承是空心的三角箭头,但是在Markdown中使用语法创建的继承图显示的是实心的三角箭头。
2.4 依赖
酒鬼依赖酒、烟民依赖烟,依赖关系使用虚线箭头表示。
2.5 关联类
当两个类的关键属性有相同的,并且无论单独放到某一个类中都不太合适,可以考虑使用关联类。即将某些属性抽象到关联类中。
2.6 实现
类和对象的关系,可以使用下图表示,但是一般不使用。
3、博客中绘制UML
参考网址:https://mermaid-js.github.io/mermaid/#/classDiagram
3.1 语法:
//```mermaid
classDiagram
classA --|> classB : Inheritance继承
classC --* classD : Composition组合
classE --o classF : Aggregation聚合
classG --> classH : Association关联
classI – classJ : Link(Solid)实线直连
classK …> classL : Dependency依赖
classM …|> classN : Realization实现
classO … classP : Link(Dashed)虚线直连