UML图

UML-类图

2018-12-13  本文已影响9人  MoringChen

类图用来做什么

类图,就是一个类的说明,与java、c++的类是一样的,只不过它是用图表示概括,包括了主要的属性、方法等,至于具体的细节需要真正的类来实现。
类图,可以直观的看出各个类之间的关系,到底是关联关系,还是依赖关系,还是继承关系。
类图对于研究设计模式,有着很重要的作用。

类图由哪些组成

看上面类图的组成,是不是和java中的类的组成大致相同。

类名、属性、方法在一个矩形中,分为上中下:


类图.jpg

可见性:

实例


类图实例.jpg

userName 和 passWord 这两个属性是protected修饰的,数据类型都是String;
login() 和 register() 这两个方法是public修饰的,数据类型都是boolean;
关联关系,用实线表示,例如A关联B:


关联关系

接口实例:


接口实例.png

依赖关系,用虚线表示,例如A依赖B:

依赖关系

继承关系,用一个△ + 一条实线表示,例如A继承B:

继承关系

实现关系,用过一个△ + 一条虚线表示,例如A实现B:

实现关系

组合关系:


组合关系.png

聚合关系:


聚合关系.png

类图举例子:

实例

可以看到,有User类,Customer类,Address类,Role类,Payment类,aliPay类,wechatPay类。

其中Customer 继承 User,User类的userName 和 passWord 这两个属性是protected修饰的,数据类型都是String; login() 和 register() 这两个方法是public修饰的,数据类型都是boolean;

Address和Role聚合User;

Customer依赖Payment;

aliPay 和 wechatPay 实现了 Payment!

依赖、关联、聚合、组合

看了上面的讲述,一定有人会对依赖、关联、聚合、组合这四个关系有些疑惑,现在就来讲讲这四个关系

依赖关系

依赖关系,它是耦合度最弱的关联。
比如说一个人(Person)可以买车(Car),也可以买房子(House),Person类依赖于Car类和House类。
在java中依赖关系表现为局域变量、方法的形参、对静态类方法的调用,如下面的例子:

class Car {
    public static void run(){
        System.out.println("汽车在奔跑");
    }
}
 
class Driver {
    //使用形参方式发生依赖关系
    public void drive1(Car car){
        car.run();
    }
    //使用局部变量发生依赖关系
    public void drive2(){
        Car car = new Car();
        car.run();
    }
    //使用静态变量发生依赖关系
    public void drive3(){
        Car.run();
    }
}

关联、聚合、组合关系

为什么要把这三个放在一起来讲呢,这是因为在java中,这三个都是通过成员变量来实现的,无法但从代码结构判断出来这三个的区别,只有结合上下文语义才能判断。
关联关系

关联关系是笼统的描述,组合和聚合如果你判断不出来,可以直接说是关联关系。

聚合关系

聚合关系是比较强的关联关系,聚合是整体和个体的关系,但是个体可以独立于整体存在,比如汽车与轮胎的关系,轮胎可以脱离于汽车独立存在,轮胎可以共享给其他汽车使用,但是汽车的组成又包括轮胎,

组合关系

组合关系是最强的关联关系了,强调了个体是整体不可分割的一部分,个体不能脱离于整体独立存在,个体不能与其他整体共享,整体消失,个体也跟着消失。

四种关联关系的耦合强度

依赖<关联<聚合<关联

关联关系的数量关系

关联关系数量关系.png

数量关系:

表示 含义
0..1 0或多个
1 1个
0..* 0或多个
1..* 1或多个

(开篇)UML-开篇
(下一篇)UML-组件图

上一篇 下一篇

猜你喜欢

热点阅读