UML类图笔记
大学开设的软件设计课程一般都会学习UML类图,大部分关于设计模式的描述都是使用的UML类图,可以说类图的表示是学习设计模式的起点。
UML定义类之间的关系主要有六种:泛化关系、实现关系、依赖关系、关联关系、聚合关系和组合关系。下面分别学习这几种关系。
>>泛化关系(Generalization)
使用带空心三角形的实线表示。
汽车与SUV之间为泛化关系:
泛化关系相当于面向对象中的继承关系。最终代码中,泛化关系表现为继承非抽象类。
>>实现关系(Emlpementation)
使用带空心三角形的虚线表示。
最终代码中,实现关系表现为继承抽象类。
”车”为一个抽象概念,在现实中并无法直接用来定义对象;只有指明具体的子类(汽车还是自行车),才可以用来定义对象:
>>依赖关系(Dependency)
使用带箭头的虚线表示。
依赖是一种最弱的横向关系。假设A类的变化引起了B类的变化,则称B依赖于A。表现在代码上依赖关系一般有如下三种情况:
- A类是B类中(某个方法)的局部变量。
- A类是B类中某个方法的参数。
- A类向B类发送消息,从而影响B类变化。
>>关联关系(Association)
使用实线表示(可带箭头)。
乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;
从依赖——>关联——>聚合——>组合,可以认为是联系逐渐加强的,组合关系最强调依赖。
>>聚合关系(Aggregation)
使用带空心棱形的实线表示。
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义;例如一个部门由多个员工组成。
>>组合关系(Composition)
使用带实心棱形的实线表示。
比如公司由多个部门组成;
相比聚合关系来说,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了;例如, 公司不存在了,部门也将不存在了,
但是聚合关系的依赖性较弱,部门不在了,员工依然存在。
>>一个类图关系的典型示例
以下这个类图,类之间的关系是我们需要关注的:
- 车的类图结构为<<abstract>>,表示车是一个抽象类;
- 它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
- 小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
- 小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
- 学生与班级之间是聚合关系,使用带空心箭头的实线表示;
- 学生与身份证之间为关联关系,使用一根实线表示;
- 学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;