要学习设计模式,首先绕不开的就是UML图,同时对于一名开发而言,开发文档中也必然会出现UML的身影。之前在实习的时候,其实已经学过不少了,但不用后又很容易忘记,(在阿里实习的时候就以为记得很熟了,结果现在又忘了)——因此这也是一个防忘系列
UML
UML(Unified Modeling Language)是一种标准的图形化建模语言,是一种为面对对象系统的产品进行说明、可视化、编制文档的标准语言,它是面向对象分析与设计的一种标准表示。
(1)UML是一种语言。
从上面的定义可以看出,就其本质,UML是一种语言,既然是语言,那就是用来交流的,UML用来在哪些人员之间进行交流呢?很明显,UML主要是在软件开发的整个生命周期所涉及到的人员之间进行交流的语言。
(2)UML是一种建模语言。
那么什么是建模呢?
模型是用某种工具对事物的一种表达方式,通常会表达出事物最重要的方面而简化或忽略其他方面。比如常见的工程模型、飞机模型、车辆模型等。
模型在软件上主要的作用是,可以在一定的抽象层次上,使人们通过对模型的分析和研究,来制定出最终的软件结构和内部的相互关系。
(3)UML是一种图形化建模语言。
为什么要图形化呢?
很简单,图形化的东西直观、简单、准确,更有利于软件开发的整个生命周期所涉及到的人员之间进行交流。因为对于一个大型的软件项目,参与的人员很多,根本不可能相互用语言来交流,图形化是一个很好的方案。
(4)UML是一种标准的图形化建模语言。
只有标准的东西,才会有更多的人学习和使用它,大家对同一表达的理解才会一样,才能真正达到相互交流的目的。
否则要是没有标准,大家各自为政,可能会出现同一个图形,大家有不同的认识和理解,那就没法交流了。
基本构件
建模的核心是模型,模型是现实的简化、真实系统的抽象。因此好的建模语言就需要提供全样的模块组成,如下就是UML的基本构件。UML主要由三部分概念组成:具体的事物、事物间的关系、事物与关系组合而成的图。
我们使用UML的目的就是确认好具体的事物以及事物间的关系,并以此来选择合适的图来表达,三者是紧紧联系的。在UML2.0中,我们使用最频繁的就是类图、时序图了。
事物
事物是抽象化的最终结果,分为结构事物、行为事物、分组事物、注释事物。其中我们比较频繁使用的是结构事物中的类和接口、行为事物中的交互和状态机
关系
UML将事物之间的关系归纳为6种:
实现、继承
实现是实现接口,继承是继承父类。
▲两者的图形都是子指向父,并且箭头全是空心三角箭头。
依赖
概念:是一种使用
的关系,即一个类的实现需要另一个类的协助。在Java中,方法参数需要传入另一个类的对象,就表示依赖这个类。
**表示方式:**虚线箭头。
关联
**概念:**表示类与类之间的联接,它使一个类知道另一个类的属性和方法,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的。
java中一个类的全局变量引用了另一个类,就表示关联了这个类。类之间存在关联关系就可以用普通关联来表达
**注意:**类A中用到类B属性,类A指向类B。
聚合
聚合在《研读设计模式》中认为是关联的子集,可分为普通聚合、共享聚合、复合聚合
聚合关系表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。e.g.公交车司机和工作服,两者没有共同的声明周期。
**表示方式:**尾部为空心菱形的实线箭头(也可以没箭头)。
**注意:**类B为类A中的属性,类A指向类B。
组合
组合关系表示类之间整体与部分的关系,整体和部分有一致的生存期,一旦整体对象不存在,那么部分对象也将不存在,整体和部分是同生共死的关系。e.g.人由头部和身体组成,两者不可分割。
**表示方式:**尾部为实心菱形的实现箭头(也可以没箭头)。
**注意:**Head是Dog的一部分,Dog指向Head。
总结以上关系
在这6种类关系中,组合、聚合和关联的代码结构一样,可以从关系的强弱来理解,各类关系从强到弱依次是:继承>实现>组合>聚合>关联>依赖。下面我们用一张完整的类图,熔前面描述的所有类与类之间的关系串联起来。
图
UML2.0一共有13中图(UML1.5定义了9种,2.0增加了4种),最常用的就是类图、对象图、时序图、状态图
附录
经典关系图
more见: 类图templates
记忆技巧
注意: 箭头方向记录两个重要点:
- 子类指向父类
- 知道对方信息才指向对方
Author: Mrli
Link: https://nymrli.top/2020/12/11/UML简单记录/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.