UML类图详解

2019-03-01  本文已影响0人  CarsonCao

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();
    }


}

image.png

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;
    }
}
image.png

还有一种关系是双向关联,如果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();
    }
}
image.png

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();
    }
}
image.png

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("教学");
    }

}
image.png

6.实现

用虚线和空心箭头表示,表示对接口的实例化。

public interface Fly {

    void fly();

}
---
public class Bird implements Fly {
    @Override
    public void fly() {

    }
}
image.png

总结

名称 特征 表示
依赖 B中方法调用A A<---B
关联 B中含有A的对象作为属性 B——>A
聚合 B中含有A的对象作为属性,构造函数有A的形参赋值 B(菱形)—A
组合 B中含有A的对象作为属性,构造函数中new实例化了A的对象 B(菱形)—A
泛化 B继承了A
实现 B实现了接口A
上一篇 下一篇

猜你喜欢

热点阅读