必不可少的UML类图技能
Posted JAVA搬运工
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了必不可少的UML类图技能相关的知识,希望对你有一定的参考价值。
当我们阅读一些书籍,或者一些源码分析类文章时,总会看到一些UML类图。实际上,能准确识别UML类图所表达的意思,也是一个必不可少的技能。下面整理了一些最常用到的知识点,一起认识一下它吧。
什么是UML,概念是什么?
UML(Unified Modeling Language)中文统一建模语言,是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
类的属性的表示方式
在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个类,它包含public String name(有默认值),public int age,private SexEnum sex和protected int length这4个属性,以及public String getName(String type),private void buy(),protected int getLength() 三个方法。
那么属性/方法名称前加的加号和减号表示了这个属性或方法的可见性,UML类图中表示可见性的符号有三种:
· + :表示public
· - :表示private
· #:表示protected
实际上,属性的完整表示方式是这样的:
可见性 名称 :类型 [ = 缺省值]
中括号中的内容表示是可选的,正如上图中的name字段有默认值,其他字段没有默认值。
类的方法的表示方式
其实上图中我们已经看到了方法的表示形式。方法的完整表示方式如下:
可见性 名称(参数列表) [ :返回类型]
同样,中括号中的内容是可选的。
那么上图中的类可以用下面这几句话解释他的方法信息:
· public方法getName接收一个类型为String 的参数,返回值类型为String
· private 方法buy无参数,无返回值
· protected 方法getLength无参数,返回值类型为int
类与类之间关系的表示方式
在Java中,类与类的关系总体可分为四种:泛化(Generalization)、实现(Realization)、依赖(Dependence)、关联(Association),其中关联又分为关联、聚合(Aggregation)、组合(Composition)。
表示关系的强弱:依赖 < 关联 < 聚合 < 组合 < 泛化(继承)
泛化(继承)关系
泛化关系也就是我们所说的继承关系,对应的是extend关键字,在UML类图中用带空心三角形的直线表示,如下图所示中,HotDrinks类继承了Drinks类。
接口实现关系
这种关系对应implement关键字,在UML类图中用带空心三角形的虚线表示。如下图中,MarketImpl类实现了Market类的接口。
依赖关系
一个类引用了另一个类的这种关系就是依赖关系。Market的sale方法只有传入了一个Drinks对象才能完成sale的完整功能,因此我们说Market类依赖于Drinks类。在UML类图中,依赖关系用一条带有箭头的虚线表示。
关联关系
关联关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。关联关系又可进一步分为单向关联、双向关联和自关联。
(1)单向关联
在下图中,用一个带箭头的直线表示两个类的单向关联。表示超市在卖饮料,此时超市需要知道饮料的所有信息,让Market类持有一个Drinks类的成员变量以达到目的。
(2)双向关联
所谓的双向关联就是双方各自持有对方类型的成员变量。在下面UML类图中,用一条带双向箭头(或者两边无箭头)的直线表示。图中在Customer类中维护一个Waiter类,表示一个顾客有一个专属服务员;在Waiter类中维护一个Customer类型的成员变量表示这个服务员服务的顾客是谁。
(3)自关联
自关联在UML类图中用一个带有箭头且指向自身的直线表示。图的意思就是Node类包含类型为Node的成员变量,一个节点中会包含下一个节点的相关信息。
聚合关系
聚合关系是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,即has-a关系。由图中我们可以看到,聚合关系用带空心菱形和箭头的直线表示。聚合关系强调的一个拥有包含的关系。Person类可以拥有玩具类。
组合关系
组合关系也是关联关系的一种特例,体现的是一种contain-a关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。比如下图:
显然,头是人的一部分且不能脱离了人而单独存在。在UML类图中,组合关系用一个带实心菱形和箭头的直线表示。
在掌握UML类图这些技能后,在我们阅读一些书籍,一些源码分析类文章,或者学习设计模式时能带来一定的帮助!
以上是关于必不可少的UML类图技能的主要内容,如果未能解决你的问题,请参考以下文章
软件设计UML类图怎么看
浅谈UML类图
UML Part 2 类图 上
你是否还看不懂UML图?
[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一
[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一