讲道理,UML
总在接触,但是每次看到实在打不起兴趣好好看,总觉得略显复杂,就没有看下去的欲望,后来发现设计模式越学图越多,拉倒吧,那就记录一下这UML
到底是个什么玩意。
什么是 UML
统一建模语言(Unified Modeling Language
,缩写 UML
)是非专利的第三代建模和规约语言。UML
是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。UML
展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
摘自维基百科
UML
是用来设计软件蓝图的可视化建模语言,1997
年被国际对象管理组织(OMG
)采纳为面向对象的建模语言的国际标准。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。
乍一看,觉得还是挺抽象的,其实简单来说,就是用一种图形化的语言来对软件中对象关系进行建模,UML
从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9
种图。
这里只介绍类图,毕竟作为Java coder
,其他的也不咋太关心,有兴趣的就自行了解其他的吧。
类和接口
我们结合着一个简单的Java
类来说
public class JavaCode {
private String name;
private int age;
private Double salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}
要用UML
表示这样一个类,该怎么画呢:
这就是一个最简单的UML
类图了,下面我们来具体看看图上都有些个啥。
访问限定符
可以看到,图上有一些+、-
这些是啥呢,这个其实就是类图中用来表示访问限定符的,有以下常用的限定符:
-
+
:表示public
-
-
:表示private
-
#
:表示protected
-
~
:表示default
-
_
:表示static
类
上面这张图,也就对应了一个Java
类User
,我们可以看到它分了三个部分即
类名:是一个字符串,对应我们的
Java
类名-
属性:指类具备的一些属性,也就是我们说的类中的成员变量,它一般用以下格式表示
[可见性] 属性名:类型[=默认值] // 默认值可有可无
-
方法:也称为操作,它指的是类对象的一些行为,即类的成员方法,它可以这么表示
[可见性] 名称(参数列表):[返回值类型]
接口
那接口怎么表示呢,我们看这样一个接口:
public interface Employee {
public Double getSalary();
}
标准的UML
图中我们用一个圆和横线来表示,如下图:
但是在更多的使用中,我们还会用如下方式:
这里类似上面的类,只是用
<>
来表示接口,同时没有属性列表。
类图
在软件系统中,类不是孤立存在的,类与类之间存在各种关系。根据类与类之间的耦合度从弱到强排列,UML
中的类图有以下几种关系:依赖关系、关联关系、聚合关系、组合关系、泛化关系和实现关系。其中泛化和实现的耦合度相等,它们是最强的。
实现
实现关系便是Java
中的类实现接口的这种实现关系,它的表示方法与泛化关系类似,只是它所用的是虚线,比如我们的JavaCoder
是一个员工接口Employee
的实现,表示如下图:
泛化
泛化关系其实就是我们Java
中的继承关系,它的表示方法就是,用实线和空心三角形,由子类指向其被继承的父类,比如JavaCoder
是Coder
的子类,表示如下图:
依赖
依赖关系是一种较弱的关系,这种关系是指比如在局部变量、方法参数、静态方法调用等等这类方式使用其他类中的某些方法来完成某些功能。比如,作为一个搬砖工的我想加工资了,那么我需要用电脑发个邮件申请,这就可以理解为一种依赖关系。那么如何表示这种关系呢,就是用一个带箭头的虚线,由依赖者指向被依赖者,表示如下图:
关联
关联关系则强于依赖关系,他表示对象之间的关系是一种引用关系。关联关系又分为一般关联关系、聚合、组合。
一般关联关系
一般的关联关系即是对象存在一种引用关系,而这种关系可以是相互的也可以是单向的。就是可以是双向关联关系,也可以是单向关联关系。比如一个咱程序汪属于某个部门,但是并不是每个部门都有程序汪,这可以理解为一种单向关联关系。再比如你今天高兴带了个实习生,那么你们之间相互产生关系,则可以理解为一种双向关联关系。单向关联用实线带箭头,由关联着指向被关联者来表示,而双向关联则是没有箭头的实线来表示,如下图:
聚合
聚合是另一种关联关系,它是一种整体与部分的关系,比如员工之于公司,公司没了换家咱还是那个熟悉的程序汪不是,那么这种关系该如何表示呢,用空心菱形加实线,由部分指向整体,如下图所示:
组合
组合是一种更强的关联关系,他也是一种部分与整体的关系,但是部分不能脱离整体而存在。比如这天你又想加薪了,准备写邮件申请,总得用手写吧,手总不能自己独立去写吧,不然想想也怪可怕的。他的表示与聚合类似,只是用的为实心菱形。如下图:
结语
这里只是介绍了UML
图中的类图,且只是介绍了常用的一些,更多的用法需要再实际使用过程中慢慢积累了。
参考维基百科