类图用来做什么
类图,就是一个类的说明,与java、c++的类是一样的,只不过它是用图表示概括,包括了主要的属性、方法等,至于具体的细节需要真正的类来实现。
类图,可以直观的看出各个类之间的关系,到底是关联关系,还是依赖关系,还是继承关系。
类图对于研究设计模式,有着很重要的作用。
类图由哪些组成
- 类名
- 属性
- 方法
- 可见性
- 数据类型
- 关联关系
- 依赖关系
- 继承关系
- 实现关系
- 组合关系
- 聚合关系
看上面类图的组成,是不是和java中的类的组成大致相同。
类名、属性、方法在一个矩形中,分为上中下:
类图.jpg
可见性:
- private的时候在前方用 - 表示
- public的时候在前方用 + 表示
- protected的时候在前方用 # 表示
实例
类图实例.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或多个 |
网友评论