1 基本介绍
UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等。
对于继承(泛化)、实现(实现)
这两种关系比较简单,它们体现的是一种类与类、或者类与接口之间的纵向关系
。 其他的四种关系则体现的是类与类、或者类与接口之间的引用/横向关系
。这四种关系所表现的强弱程度来看,从强到弱依次为:组合
>聚合>关联>依赖。
- 泛化(Generalization):表示继承关系,子类继承父类的功能,用带空心三角形的实线表示,箭头指向父类。
- 实现(Realization):表示类实现接口,用带空心三角形的虚线表示,箭头指向接口。
- 依赖(Dependency):表示类之间的使用关系,用带箭头的虚线表示,箭头从使用者指向被使用者。
- 关联(Association):表示对象之间的结构关系,用实线箭头表示,双向关联可不带箭头。
- 聚合(Aggregation):表示弱的拥有关系,用带空心菱形的实线表示,菱形指向整体。
- 组合(Composition):表示强的拥有关系,用带实心菱形的实线表示,菱形指向整体。
2 类之间的关系
2.1 依赖关系(Dependence)
只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了。
public class PersonServiceBean {
private PersonDao personDao;// 类
public void save(Person person){}
public IDCard getIDCard(Integer personid){}
public void modify(){
Department department = new Department();
}
}
public class PersonDao{}
public class IDCard{}
public class Person{}
public class Department{}
2.2 泛化关系 (generalization)
泛化关系实际上就是继承关系,他是依赖关系的特例
public abstract class DaoSupport{
public void save(Object entity){
}
public void delete(Object id){
}
}
public class PersonServiceBean extends Daosupport{
}
小结:
-
泛化关系实际上就是继承关系
-
如果 A 类继承了 B 类,我们就说 A 和 B 存在泛化关系
2.3 实现关系(Implementation)
实现关系实际上就是 A 类实现 B 接口,他是依赖关系的特例
public interface PersonService {
public void delete(Integer id);
}
public class PersonServiceBean implements PersonService {
public void delete(Integer id){}
}
2.4 关联关系(Association)
依赖和关联区别
我用锤子修了一下桌子,我和锤子之间就是一种依赖,我和我的同事就是一种关联。依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不是太明显的时候(可以说是“uses”了那个类),就可以把这种关系看成是依赖,依赖也可说是一种偶然的关系,而不是必然的关系。关联是类之间的一种关系,例如老师教学生,老公和老婆这种关系是非常明显的。依赖是比较陌生,关联是我们已经认识熟悉了。
2.5 聚合关系(Aggregation)
聚合关系(Aggregation)表示的是整体和部分的关系,整体与部分可以分开。聚合关系是关联关系的特例,所以他具有关联的导航性与多重性。
如:一台电脑由键盘(keyboard)、显示器(monitor),鼠标等组成;组成电脑的各个配件是可以从电脑上分离出来的,使用带空心菱形的实线来表示:
public class Computer{
private Mouse mouse;
private Monitor monitor;
public void setMouse(Mouse mouse){
this.mouse = mouse;
}
public void setMonitor(Monitor mouse){
this.monitor = monitor;
}
}
2.6 组合关系(Composition)
组合关系:也是整体与部分的关系,但是整体与部分不可以分开。
public class Person{
private IDCard card;
private Head head = new Head();
}
public class IDCard{}
public class Head{}
public class Computer {
// 鼠标可以和 computer 不能分离
private Mouse mouse = new Mouse();
// 显示器可以和 Computer 不能分离
private Moniter moniter = new Moniter();
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMoniter(Moniter moniter) {
this.moniter = moniter;
}
}
public class Mouse {}
public class Moniter {}
3 绘制类图的工具
- processon:是我常用的一种专业强大的作图网站,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制。
- draw.io:我个人觉得挺好用的一款开源的流程图绘制工具,有很多素材和模板,可以绘制流程图,UML图,时序图,组织架构图等。
- UMLet:一款简单易用的UML绘图工具,可以快速绘制类图和其他UML图形。
- Rational Rose:一种广泛使用的专业绘图工具,支持多种UML图的创建和管理。
4 总结
UML类图在系统设计中具有重要作用,通过合理应用类图,开发者可以清晰地表达系统的静态结构和类之间的关系,从而促进软件设计和开发的效率。掌握UML类图的基本概念和绘制技巧对任何软件开发人员来说都是一项宝贵的技能。