一、UML 基本介绍
- UML—-Unified modeling language UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果
- UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,比如类、接口、实现、泛化、依赖、组合、聚合等
- 使用 UML 来建模,常用的工具有 Rational Rose、Astah Professional,也可以使用一些插件来建模
二、UML 图
画 UML 图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,UML图分类:
- 用例图(use case)
- 静态结构图:类图、对象图、包图、组件图、部署图
- 动态行为图:交互图(时序图与协作图)、状态图、活动图
**说明: **类图是描述类与类之间的关系的,是 UML 图中最核心的
三、UML类图
- 用于描述系统中的类(对象)本身的组成和类(对象)之间的各种静态关系。
- 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合。
1. 为什么要用UML?类图的作用
UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效。
类图的作用:
- 在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解;
- 类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型。
2. UML 类图可见性符号的表示
- 可见性
- 公有(public) “+”
- 受保护(protected) “#”
- 私有(private) “-”
类与类之间的关系主要有六种:继承、实现、组合、聚合、关联 和 依赖,这六种关系的箭头表示都不一样

3. 类的UML的介绍和画法
类的UML使用包含类名、属性、方法名以及参数。使用带分割线的长方形表示。
代码演示:
public class Person {
public String name;
protected int age;
private String accommodation = "Earth";//住所
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 String getAccommodation() {
return accommodation;
}
public void setAccommodation(String accommodation) {
this.accommodation = accommodation;
}
}
UML类图
如上这个类图,Person类有三部分组成,分别是类名、属性和操作方法,下面一一进行介绍:
类名
就是Java类的名字, 如果是类是抽象类则类名显示为斜体! 其他地方不做改动。
Person
属性名
就是java中的成员变量,一个类可以零到多个属性,java中属性(成员变量)的修饰符,类型和默认值都可以在UML中体现出来。通常用的表达式如下:
可见性 名称:类型[=默认值]
在Java中可见性分为三类,分别是public、private和protected,在类图分别用+、-和#表示;
名称为属性的名称;
类型在java中有八种基本的数据类型(byte、short、 int、long、 float、 double、 char、 boolean)及String和一些自定义的类型。默认值如变量 accommodation 有初始值为 Earth!
操作方法
在java中类的操作方法也是有个通用的表达式如下:
可见性 名称([参数列表:参数1,参数2]):返回类型[:void]
可见性如上名称表达式的介绍,名称就是方法名,参数列表是可选的项,多参数的话参数直接用英文逗号隔开;返回值也是个可选项,返回值类型可以说基本的数据类型、用户自定义类型和void。如果是构造方法,则无返回类型!
4. 类之间关系UML的介绍和画法
4.1 泛化(Generalization)关系
泛化(Generalization)关系 :空心箭头实线表示,箭头指向个人
泛化关系表示类与类之间的继承关系,类和类,接口和接口都可以是继承关系,父类称为基类或者超类,子类称为派生类。子类继承父类实现父类的所有功能,并拥有父类没有的功能!
**示例代码:**两个子类继承Person类
public class Person {
public String name;
protected int age;
private String accommodation = "Earth";//住所
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 String getAccommodation() {
return accommodation;
}
public void setAccommodation(String accommodation) {
this.accommodation = accommodation;
}
}
public class USAMan extends Person {
private String language = "English";
public void sayHello(){
System.out.println("Welcome to USA !");
}
}
public class ChineseMan extends Person {
private String skinColor = "yellow";
public void sayHello() {
System.out.println("欢迎来中国 !");
}
}
UML图
4.2 实现(Realization)关系
实现(Realization)关系 :空心箭头虚线表示,箭头指向约定的元素
实现关系就是java中的一个类和接口之间的关系,接口中一般是没有成员变量。所有操作都是抽象的,只有声明没有具体的实现。
示例代码
public interface Car {
//车的牌子
public void brand();
}
public class LandRover implements Car{
public void brand() {
System.out.println("This is a LandRover");
}
}
UML类图
4.3 依赖(Dependence)关系
依赖(Dependence)关系:虚线箭头表示,箭头指向被依赖的对象
依赖关系是类与类之间最弱的关系,A元素变化会影响B元素,反之不成立。说简单点就是一个类使用了另一个类,这种关系具有临时性特征,一个类的改变由于另一类而受影响。
示例代码
public class ChineseMan extends LandRover {
private String skinColor = "yellow";
public void sayHello(){
System.out.println("欢迎来中国 !");
}
public void useCar(LandRover car){
car.brand();
}
}
UML类图
4.4 关联(Association)关系
关联关系:实线箭头表示,箭头指向(也可以双向)被依赖元素
关联关系表示一个类和另一类有联系,它使一个类知道另一个类的属性和方法,被关联的元素间通常可以被独立的考虑。
- 关联具有导航性:即双向关系或单向关系
- 关系具有多重性:如“1”(表示有且仅有一个),“0…”(表示0个或者多个),“0,1”(表示0个或者一个),“n…m”(表示n到m个都可以),“m…*”(表示至少m个)
一对一的关联关系
public class YanAnMan {
public ChineseMan cm;
}
一对多的关联关系
public class YanAnMan {
public List<ChineseMan> manList;
}
说明:
1…1表示另一个类的一个对象只与该类的一个对象有关系
0…* 表示另一个类的一个对象与该类的零个或多个对象有关系
1…* 表示另一个类的一个对象与该类的一个或多个对象有关系
0…1表示另一个类的一个对象没有或只与该类的一个对象有关系
4.5 聚合(Aggregation)关系
聚合(Aggregation)关系:带空心菱形头的实线表示,菱形头指向整体
聚合关系是整体和部分的关系,是一种强的关系,但是部分可以脱离整体而存在。是关联关系的一种。
例如电脑与鼠标, 显示器就是一种聚合关系
示例代码:
public class Computer {
private Mouse mouse; //鼠标可以和computer分离
private Moniter moniter;//显示器可以和Computer分离
public void setMouse(Mouse mouse) {
this.mouse = mouse;
}
public void setMoniter(Moniter moniter) {
this.moniter = moniter;
}
}
public class Moniter {
}
public class Mouse {
}
4.6 组合(Composition)关系
组合(Composition)关系:带实心菱形头的实线表示,菱形头指向整体
组合关系是聚合关系的一种变种,便是了更强的组合关系,它要求整体的对象代表部分对象的生命周期。
例如没个人都有头和脚, 那么头和脚与人之间就是组合关系
示例代码
public class Person {
private Head head = new Head();
private Foot foot = new Foot();
}
public class Head {
}
public class Foot {
}
四、常用的UML绘图工具
Visual Paradigm, ProcessOn, Microsoft Visio, 百度脑图
本篇使用了 百度脑图
和 Visual Paradigm
参考链接
https://learnku.com/articles/30316
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 george_95@126.com