认识UML类关系——依赖、关联、聚合、组合、泛化
(2023-03-15 17:41:19)https://blog.csdn.net/K346K346/article/details/59582926
文章目录
在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合和泛化这五种关系,耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强。
下面根据个人理解,尝试讲解这五种类关系。以 C++ 给出示例代码。
1.依赖(Dependency)
依赖关系使用虚线加箭头表示,如下图所示:
这里写图片描述
学生在学习生活中经常使用电脑,于是对电脑产生了依赖。依赖关系是五种关系中耦合最小的一种关系。类A要完成某个功能引用了类B,则类A依赖类B。依赖在代码中主要体现为类A的某个成员函数的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。
以 Student 类和 Computer 类为例,示例代码如下:
class Computer {
public:
};
class Student {
public:
};
2.关联(Association)
关联关系使用实线加箭头表示,类之间的关系比依赖要强。学生与老师是关联的,学生可以不用电脑,但是学生不能没有老师。如下图所示:
这里写图片描述
关联与依赖的对比:
相似之处:
关联暗示了依赖,二者都用来表示无法用聚合和组合表示的关系。
区别:
(1)发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。
发生关联关系的两个类,类A成为类B的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。 在代码中的表现如下:
class Teacher;
class Student {
public:
}
(2)从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。相比依赖,关联关系的生存期更长。
关联关系有单向关联、双向关联、自身关联、多维关联等等。其中后三个可以不加箭头。
单向关联:
这里写图片描述
双向关联:
这里写图片描述
自身关联:
这里写图片描述
多维关联:
这里写图片描述
3.聚合(Aggregation)
聚合关系使用实线加空心菱形表示。聚合用来表示集体与个体之间的关联关系。
例如班级与学生之间存在聚合关系,类图表示如下:
这里写图片描述
聚合关系在代码上与关联关系表现一致,类 Student 将成为类 Classes 的成员变量。代码如下:
class Student;
class Classes {
public:
};
4.组合(复合,Composition)
复合(又叫复合)关系使用实线加实心菱形表示,用来表示个体与组成部分之间的关联关系。
例如学生与心脏之间存在复合关系,类图表示如下:
这里写图片描述
组合关系在代码上与关联关系表现一致,类 Heart 将成为类 Student 的成员变量。代码如下:
class Heart;
class Student {
public:
};