uml对类之间的表示关系分为以下几种:
- 依赖
- 关联
- 聚合
- 组合
- 泛化/继承
- 实现
以下借用 https://www.jianshu.com/p/6b634106a7ba 中的代码和示意图进行详细说明。
1.依赖
用虚线箭头表示,这是一种最弱的关系,当B的方法中调用了A的时候(局部变量或者形参),则B类依赖了A类,表示为:B---->A。两个类的生命周期没有什么依赖关系。
public class Car {
public void run(){
}
}
---
public class Driver {
public void driver(Car car){
car.run();
}
}
2.关联
关联用实线箭头表示,表示两个类之间的关系又近了一步,为啥更近一步呢,这次不是函数调用了,而是属性中,假如B类的属性中含有A类的对象,则B ——>A。
public class Address {
}
---
public class Student {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
还有一种关系是双向关联,如果A和B类互为对方属性,那A和B就是双向关联,用实线表示:A——B
在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。
3.聚合
如果一个类中(主类)包含另一个类的对象作为属性,并且构造函数中含有该类的对象作为形参传入赋值,那就认为两个类构成聚合关系。用空心菱形(主类)和实线表示。
public class Engine {
public void start(){
System.out.println("发动机发动");
}
}
---
public class Wheel {
public void run(){
System.out.println("轮子转动");
}
}
public class Car {
private Engine engine;
private Wheel wheel;
public Car(Engine engine, Wheel wheel) {
this.engine = engine;
this.wheel = wheel;
}
public void run(){
engine.start();
wheel.run();
}
}
4.组合
组合相对聚合更进一步,用实心菱形(主类)和实线表示。当主类包含一个类的对象作为参数,并且构造函数中new实例化了对象的时候,则两个类构成组合关系。两个类的生命周期紧密相关。
public class Eye {
}
public class Face {
}
public class Person {
private Eye eye;
private Face face;
public Person() {
eye = new Eye();
face = new Face();
}
}
5.泛化/继承
用实线和空心箭头表示,学过面向对象都知道继承,这个不多说了。
public class Person {
private String name = "Jack";
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
protected void playBasketball()
{
pass();
}
private void say()
{
}
}
-----
public class Student extends Person {
//学号。。
private String studentNo;
public void study(){
System.out.println("上课的方法");
}
}
---
public class Teacher extends Person {
private String teacherNo;
public void teach(){
System.out.println("教学");
}
}
6.实现
用虚线和空心箭头表示,表示对接口的实例化。
public interface Fly {
void fly();
}
---
public class Bird implements Fly {
@Override
public void fly() {
}
}
总结
名称 | 特征 | 表示 |
---|---|---|
依赖 | B中方法调用A | |
关联 | B中含有A的对象作为属性 | |
聚合 | B中含有A的对象作为属性,构造函数有A的形参赋值 | |
组合 | B中含有A的对象作为属性,构造函数中new实例化了A的对象 | |
泛化 | B继承了A | |
实现 | B实现了接口A |