一、UML是什么?
UML,即Unified Modeling Language,翻译的意思是统一建模语言,是一种为面向对象系统的产品进行说明、可视化和编制文档的建模工具,独立于任何程序设计语言,包括Java语言。
UML描述和反映是事物的实体、性质、关系、结构、状态和动态变化过程,同时作为建模语言,它也有着严格的语法和语义规范。
UML采用一组图形符号来描述软件模型,这些图形符号具有简单、直观和规范的特点,开发人员学习和掌握起来比较简单。所描述的软件模型,可以直观地理解和阅读,由于具有规范性,所以能够保证模型的准确、一致。
推荐一款名为process on的免费在线作图、实时协作的可视化编辑工具,它包含了UML的图例类型及组成要素,如图所示:
本文重点说明UML类图,顾名思义它是用来表示类或接口,及类或接口之间关系的一种图例类型。
二、UML类图的成员表示
先举个例子,创建一个Producer类,它有若干个成员属性和成员方法,代码如下:
public class Producer{
/** 成员属性 */
public String name;
protected Integer number;
private Order order;
/** 构造方法 */
public static int save(Order order){
return order
}
/** 其他方法 */
protected String getName(){
return name;
}
protected void setName(String name){
this.name = name;
}
}
用UML类图来描述上面的代码:
使用UML类图中的“接口或类”组件来表示Producer类,说明如下:
- 组成结构:第一层表示接口或类的名称,接口名称需要用<<>>表示,第二层表示“修饰符 属性变量名称 数据类型”,第三层表示“修饰符 属性方法名称(c参数列表) 返回值类型”;
- 修饰符:+ 指public、# 指protected、- 指private ;
- 默认值:若成员变量有默认值,写法为 —— # number:Integer = 1 。
三、UML类图的类之间关系表示
在软件系统中,类并不是孤立存在的,它们之间存在各种关系。根据类之间的耦合度,可以从弱到强进行排列,大致有以下六种,如图所示:
1、依赖(Dependence)
含义:体现了类之间的弱作用关系,是一种临时性的使用关系,通常用虚线+箭头表示。
举例:依赖关系是类之间最弱的关系,比如,类A的一些方法参数中使用了类B的实例;类A的一些方法逻辑中调用了类B的方法或变量等等。
2、关联(Association)
含义:体现了类之间的强作用关系,通常用实线或实线+箭头表示,这里的关联关系指的是一般关联关系,后面的聚合和组合也属于关联关系。
举例:关联关系是类之间的引用关系,生活中的常见,比如有:手机和充电线,老师和学生,生产者和消费者等。可以通过成员变量来实现关联关系,比如类A中使用了类B的对象引用,A和B之间就是一种关联关系。
类型:一般关联关系又可以分为单向关联、双向关联、自关联,画图表示。
3、聚合(Aggregation)
含义:体现了类之间的强作用关系,也属于关联关系的一种,是整体和局部之间的关系,是 has-a 的关系,通常用实线+虚心菱形箭头表示。
举例:聚合关系强调了整体和局部的关系,比如学校和教师,工厂和工人等,注意的是局部可以独立于整体而存在,比如工厂没了但工人还是可以存在的!通过成员属性来实现聚合关系。
4、组合(Composition)
含义:体现了类之间的强作用关系,也属于关联关系的一种,也是整体和局部之间的关系,是 cxmtains-a 的关系,通常用实线+实心菱形箭头表示。
举例:组合关系是一种耦合度更高的聚合关系,整体对象可以控制部分对象的生命周期,部分对象不能脱离整体对象而存在,比如电脑和CPU,如果CPU没了,电脑就失去了基本的运算能力等同于电脑报废。
5、泛化(Generalization)
含义:体现了类之间的继承关系,是一种耦合度最高的关系,是 is-a 的关系,通常用实线+空心三角箭头表示。
举例:泛化关系强调了一般与特殊的关系,通过Java的类继承机制实现类之间的泛化关系,比如:手机工厂,与华为手机工厂,小米手机工厂之间的关系。
6、实现(Realization)
含义:体现了接口和类之间的关系,通常用虚线+空心三角箭头表示。
举例:实现关系,通过Java的实现机制实现的,比如:手机工厂接口,与华为手机工厂实现类,小米手机工厂实现类之间的关系。
参考:
- 百度百科
- C语言中文网