一张图看懂UML类图

面向对象中我们经常使用UML类图演示类之间的关系,记得以前在学《软件工程》的时候那几个符号硬是没记住,今天回过头看看,理一理,见下图:

一张图看懂UML类图

------------------------------------------------------------------ 我是分割线 ------------------------------------------------------------

一张图看懂UML类图

类(Class),如果是抽象类则为斜体,第一行表示类名,第二行:属性/字段,第三行:方法/行为;“+”代表:public,“#”代表:protect,“-”代表:private;代码表现为:

public class A {
    private int age;
    private String name;
    
    private void play(){
        System.out.print("我会玩");
    }
}

public abstract class Animals {
    private int lifeCycle;
    public abstract Life metabolism (O2 o2, H2O h2o);
}

一张图看懂UML类图

接口(interface),标签是“《interface》”  +  接口名,第三行:属性/字段,第四行:接口方法,代码显示如下:

public interface SpeakLikeHuman {
    boolean alive = true;
    void speak();
}

------------------------------------------------------------------ 我是分割线 ------------------------------------------------------------

这些概念东西不赘述了,百度一下。

继承关系

关系示意图:

一张图看懂UML类图

一张图看懂UML类图

代码表示如下:

public abstract class Bird extends Animals {
    private Feather feather;//羽毛
    private Tooth tooth;//牙齿

    @Override
    public Life metabolism(O2 o2, H2O h2o) {
        return new Life();
    }

    public abstract Egg DownEgg ();
}

public class Duck extends Bird {
    protected void Swiming(){
        System.out.print("鸭子在游泳...");
    }

    @Override
    public Egg DownEgg() {
        return null;
    }
}

实现接口

关系示意图:

一张图看懂UML类图

一张图看懂UML类图

代码表示如下:

public class DuckTang extends Duck implements SpeakLikeHuman {

    @Override
    public Egg DownEgg() {
        return null;//唐老鸭是男的,不会下蛋,重写下蛋方法
    }

    protected void Swiming() {
        System.out.print("鸭子在游泳...啪啪啪");
    }

    @Override
    public void speak() {
        System.out.print("我是唐老鸭...嘎嘎~");
    }
}

关联关系

关系示意图:" ... has a ..."
一张图看懂UML类图
一张图看懂UML类图

代码表示如下:

public class Penguin extends Bird {//企鹅

    private Climate climate;//关联关系,包含别的类的引用,各自不影响生命周期

    private void Swiming() {
        System.out.print("我企鹅也会游泳~");
    }

    @Override
    public Egg DownEgg() {
        if (new Climate().isVeryCold)
        return new Egg("企鹅蛋");
        return new Egg("蛋碎一地");
    }

}

public class Climate {
    private boolean isVeryCold;

    public boolean isVeryCold() {
        return isVeryCold;
    }
}

public class Egg {
    Egg(String name) {

    }
}

聚合关系

关系示意图:" ... owns a ..."
一张图看懂UML类图
一张图看懂UML类图
代码表示如下:
public class WildGoose extends Bird {

    @Override
    public Egg DownEgg() {
        return new Egg("大雁蛋");
    }

    private void fly() {
        System.out.print("大雁--我飞咯~~");
    }
}

public class WildGooses {
    private ArrayList<WildGoose> gooses = new ArrayList<WildGoose>();//雁群由大雁聚合而成

    private void V_Fly() {
        //...
    }

    private void  _Fly() {
        //...
    }
}

组合(泛化)关系

关系示意图:" ... is a part of  ..."
一张图看懂UML类图
一张图看懂UML类图

代码表示如下:
public abstract class Bird extends Animals {
    private Feather feather;//羽毛,是鸟的一部分
    private Tooth tooth;//牙齿

    @Override
    public Life metabolism(O2 o2, H2O h2o) {//生命依赖于O2 + H2O,作为参数他们的改变影响另外一个类的活动
        return new Life();
    }

    public abstract Egg DownEgg ();
}

public class Feather {
    //...
}
public class Tooth {
    //...
}

依赖关系

关系示意图:" ... uses a ..."
一张图看懂UML类图
一张图看懂UML类图
代码表示如下:
public abstract class Bird extends Animals {
    private Feather feather;//羽毛
    private Tooth tooth;//牙齿

    @Override
    public Life metabolism(O2 o2, H2O h2o) {//生命依赖于O2 + H2O,作为参数他们的改变影响另外一个类的活动
        return new Life();
    }

    public abstract Egg DownEgg ();
}

public class O2 {
    //...
}
public class H2O {
    //...
}
public class Feather {
    //...
}
public class Tooth {
    //...
}
public class Life {
    //...
}
转载。 https://blog.****.net/luzhenyuxfcy/article/details/51273670