1. 前言
继续学习《Android
源码设计模式解析与实战》和《Java
设计模式(第2版)中文版》的时候,不可忽视的需要了解UML
图。因为这种可视化的表示感觉更加直观,感觉用于前期的类关系构建非常合适。所以这里来回顾下UML图的相关知识。
如果需要上面这两本书籍
2. 什么是UML图
即Unified Modeling Language
,翻译为:统一建模语言。是用来对软件密集系统进行可视化建模的一种语言。一份典型的建模图表通常包含几个块或框,连接线和作为模型附加信息之用的文本。这些虽简单却非常重要,在UML
规则中相互联系和扩展。
UML
立足于对事物的实体、性质、关系、结构、状态和动态变化过程的全程描述和反映。UML
可以从不同角度描述人们所观察到的软件视图,也可以描述在不同开发阶段中的软件的形态。
UML
采用一组图形符号来描述软件模型,这些图形符号具有简单、直观和规范的特点,开发人员学习和掌握起来比较简单。所描述的软件模型,可以直观地理解和阅读,由于具有规范性,所以能够保证模型的准确、一致。
3. UML图的作用
UML
是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。
4. 种类
截止UML2.0
一共有13
种图形(UML1.5
定义了9
种,2.0
增加了4
种)。分别是:用例图、类图、对象图、状态图、活动图、顺序图、协作图、构件图、部署图9
种,包图、组合结构图、交互概览图3
种。
各种关系的强弱顺序: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
4.1 UML类图几种关系
UML静态视图中包含一些常见的基本关系:泛化(Generalization
), 实现(Realization
),关联(Association
),聚合(Aggregation
),组合(Composition
),依赖(Dependency
)。
4.1.1 泛化(Generalization)
是一种继承关系,表示一般与特殊的关系,它指定了子类如何继承父类的所有特征和行为。
箭头为空心,且箭头指向父类。
4.1.2 实现(Realization)
也就是类与接口的关系。
使用空心箭头,连线为虚线,箭头指向接口。
4.1.3 关联(Association)
表示为一种拥有的关系。可以形象化的理解为一个类中拥有另一个类作为属性。比如:老师和学生,学生和课程的关系。
关联可以是双向的,也可以是单向的。
老师有多名学生,学生也可能有多名老师。一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
使用普通箭头表示,或者双向不使用箭头。
4.1.4 聚合(Aggregation)
聚合关系是关联关系的一种,是整体与部分的关系。且部分可以离开整体而单独存在。比如下面的图示:
车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
4.1.5 组合(Composition)
组合关系是关联关系的一种,是整体与部分的关系,比聚合关系强。部分不能离开整体而单独存在。
4.1.6 依赖(Dependency)
是一种使用的关系,即一个类的实现需要另一个类的协助。依赖是表示一个类中使用了另外一个类,最常用的依赖是在类A
的方法中使用了类B
,那么A
依赖B
。如下图所示。
4.2 UML类图常见表示
4.2.1 类图
ClassName
表示类名
中间部分为该类的属性,其中分别表示为可访问性,属性名,以及属性的数据类型。
第三部分为该类的方法,包括方法的可访问性,方法名,方法的参数以及方法的返回值。
其中:
-
+
表示public
-
#
表示protected
-
-
表示private
-
i
表示internal
4.2.2 对象图
即类的实例对象,用来指明属性值。