UML类图是一种结构图,用于描述一个系统的静态结构。类图以反映类结构和类之间关系为目的,用以描述软件系统的结构,是一种静态建模方法。类图中的类,与面向对象语言中的类的概念是对应的。
1、类结构
(1)UML类图图示:
(2)UML规定属性表示如下:
可见性 名称:类型 [=缺省值]
- 可见性:对应java中public(+)、private(-),package(~) 和protected(#)修饰符
- 名称:表示属性名
- 类型:表示属性的数据类型,如int、String或自定义类型等
- 缺省值:表示属性的初始值,可选
(3)UML规定操作方法表示如下:
可见性 名称(参数列表) [ : 返回类型]
- 可见性:对应java中public(+)、private(-),package(~) 和protected(#)修饰符
- 名称:表示方法名
- 参数类型列表:表示方法参数的数据类型,多个参数的数据类型之间用逗号隔开
- 返回类型:表示方法的返回值数据类型,可选项,如void、int等
(4)UML类图示例:
- User类的定义如下:
public class Person {
private String name;
private int age;
public Person(int age, String name){
}
public void eating() {
}
}
-
User类的UML类图如下:
2、类间关系
(1)依赖关系:是一种“使用”关系,被使用类的改变有可能会影响到其使用类,依赖关系是类与类之间最弱的关系。在代码中体现就是某个类作为另一个类的方法参数或者局部变量,或者另一个类调用其静态方法。
-
依赖关系图示如下:
- 依赖关系的代码示例:
public class People {
public void crossRiver(Ship ship) {
}
}
public class Ship {
}
(2)关联关系:表示类之间的一种持续一段时间的合作关系,包括有自关联、单向关联和双向关联关系,是一种比依赖关系更强的关系。在代码中体现就是被关联类B作为关联类A的属性。比如朋友关系、师徒关系
-
关联关系图示如下:
- 关联关系间的数量表示如下:
表达方式 | 数量说明 |
---|---|
1..1 | 表示另一个类的一个对象只与该类的一个对象有关系 |
0..* | 表示另一个类的一个对象与该类的零个或多个对象有关系 |
1..* | 表示另一个类的一个对象与该类的一个或多个对象有关系 |
0..1 | 表示另一个类的一个对象没有或只与该类的一个对象有关系 |
m..n | 表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n) |
- 关联关系代码示例:
public class Student {
private List<Course> courses;
//设值注入
public void addCourse(Course course) {
if(courses == null){
courses = new ArrayList();
}
course.add(course);
}
}
public class Course {
private List<Student> students;
//设值注入
public void addCourse(Student student) {
if(students == null){
students = new ArrayList();
}
students.add(student);
}
}
(3)聚合关系:是一种“拥有”关系,表示整体与部分的关系,部分可以脱离整体单独存在,他们具有各自的生命周期。在代码中体现就是部分类作为整体类的属性,部分类作为构造方法的参数或通过set方法或业务方法注入到整体对象中。比如汽车与轮胎、汽车与汽油、班级与学生等。
-
聚合关系图示如下:
- 聚合关系代码示例:
public class Car {
private Engine engine;
//构造注入
public Car(Engine engine) {
this.engine = engine;
}
//设值注入
public void setEngine(Engine engine) {
this.engine = engine;
}
}
public class Engine {
}
(4)组合关系:也是一种“拥有”关系,表示整体和部分的关系,但是整体对象可以控制部分的生命周期,整体的生命周期结束也就意味着部分的生命周期结束。在代码中体现就是部分类作为整体类的属性,但是部分类直接在整体类的构造方法中进行实例化。比如人和大脑等
-
组合关系图示如下:
- 组合关系代码示例:
public class People {
private Brain brain;
public People() {
this.brain = new Brain();
}
}
public class Brain {
}
(5)泛化关系:也叫继承关系,用于描述父类与子类之间的关系。在代码中体现就是子类与父类、子接口与父接口之间的关系,在java中通过关键字extends标示。如苹果与水果等。
-
泛化关系图示如下:
- 泛化关系代码示例:
public class HashMap {
}
public class LinkedHashMap extends HashMap {
}
(6)实现关系:在代码中体现就是类与接口之间的关系。在Java中通过关键字implements标识
-
泛化关系图示如下:
- 泛化关系代码示例:
public interface Fruit {
}
public class Apple implements Fruit {
}
参考博客:
https://www.cnblogs.com/xrq730/p/5533019.html
https://justsee.iteye.com/blog/808799