一. UML初识
定义(Unified Modeling Language)
统一建模语言UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。
UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
分类
UML 2.2中一共定义了14种图示。
1. 结构性图形(Structure diagrams)
强调的是系统式的建模:
2. 行为式图形(Behavior diagrams)
强调系统模型中触发的事件:
3. 交互性图形(Interaction diagrams)
属于行为图形的子集合,强调系统模型中的资料流程:
二. UML类图
为什么用类图
类图是软件工程的统一建模语言一种静态结构图,该图描述了系统的类集合,类的属性和类之间的关系。
帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。学习好类图的绘制,是一位合格的软件工程师应有的技能。
类图组成
分析一段代码的类图,例如最简单的一个类Person 类有两个属性分别是name和age,并提供对应的get和set方法。java类代码如下:
public class Person {
private String name = "datiangou";
private int age = 24;
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;
}
}
可以看出类图由三部分组成,类名,属性和操作方法。
类名
顾名思义就是类的名字,对应于Java类中的类名,如果该类是抽象类的话,在类名右下角会有一个(Abstract)表示,假如Person是一个抽象类的话,
成员
可见性
UML提供机制,以代表类的成员,如属性和方法,对他们的其他信息。
指定一个类成员(即任何属性或方法)的可见性有下列符号,必须摆在各成员的名字之前:
可见性 | 符号 |
---|---|
public | + |
private | - |
protected | # |
default | ~ |
属性名
通用表示方式:
可见性 名称:类型 [ = 默认值 ]
方法
通用表示方式:
可见性 名称(参数列表) [ : 返回类型]
三. 类图关系
主要有三类,继承关系,整体与部分关系,和相互联系。
1. 继承相关
继承有两种形式 : 泛化(Generalize)和实现(Realize),表现为 IS-A 关系。
泛化关系 (Generalize)
从具体类中继承。
实线+空三角
。
实现关系 (Realize)
从抽象类或者接口中继承。
虚线+空三角
2. 整体和部分
聚合关系 (Aggregation)--非强依赖
表示整体由部分组成,但是整体和部分不是强依赖的,整体不存在了部分还是会存在。以下表示 B 由 A 组成:
实线+空菱形(部分指向整体)
组合关系 (Composition)--强依赖
和聚合不同,组合中整体和部分是强依赖的,整体不存在了部分也不存在了。
实线+实菱形(部分指向整体)
比如公司和部门,公司没了部门就不存在了。但是公司和员工就属于聚合关系了,因为公司没了员工还在。
3. 相互联系
关联关系 (Association)
表示不同类对象之间有关联,这是一种静态关系,与运行过程的状态无关,在最开始就可以确定。因此也可以用 1 对 1、多对 1、多对多这种关联关系来表示。
实线+实箭头
比如学生和学校就是一种关联关系,一个学校可以有很多学生,但是一个学生只属于一个学校,因此这是一种多对一的关系,在运行开始之前就可以确定。
依赖关系 (Dependency)
和关联关系不同的是,依赖关系是在运行过程中起作用的。依赖通常作为类的构造器或者方法的参数传入。双向依赖是一种不好的设计。
虚线+实箭头
参考文章
维基百科类图
Java利器之UML类图详解
面向对象的思想
UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖