Loading

UML图

UML类图

UML图示例

  • 车是个抽象类;
  • 小轿车和自行车派生自车这个抽象类,它们和车之间是实现关系,使用虚线和空心三角箭头表示;
  • SUV派生自小轿车类,它和小轿车间的关系是泛化关系,使用实线和空心三角箭头表示;
  • 小轿车由轮胎和发动机等组成,而轮胎和发动机不会脱离轿车存在,所以是组合关系,使用实线和实心菱形表示;
  • 班级会有多个学生,没有了这个学生,班级也会存在,即班级是由学生聚合而成的,它们之间是聚合关系,使用实线和空心菱形表示;
  • 学生上学需要骑自行车,即学生依赖自行车才能实现上学的目的,它们之间是依赖关系,使用虚线和普通箭头表示;
  • 学生和身份证之间是关联关系,仅使用实现表示。

实现关系

车是个抽象的概念,而小轿车可以认为对应现实中的某一类具体的车,是个具体的实体。这种实体对概念具象化的关系,就认为是实现关系,放到代码中就是子类派生于抽象基类,抽象基类是不能实例化的,而子类重载了父类的所有虚函数,可以被实例化。

泛化关系

泛化关系和实现关系都属于类的继承关系(is-a),上述实现关系是派生自抽象类,而泛化关系是派生自一个可实例化类,或者说是对一个可实例化类的特化。
放到示例中理解,小轿车可以有很多种,比如跑车、越野车、电车等等,这取决于对其特性的进一步约束,按照SUV的特性就是具有更宽敞、更有运动感,接近于越野车等特性的一种小轿车特化车型。

组合关系

小轿车是由轮胎、发动机、离合器等多个零部件组成的,如果没有这个小轿车,我们不会去谈论这个轿车上的轮胎怎么样,发动机怎么样。
专业一点的表述,组合关系是一种强依赖的聚合关系,整体的存在决定了部分的存在。小轿车和轮胎、发动机等是强关联关系,只有小轿车这个实例存在,我们才会去分析该小轿车实例上的轮胎或发动机的性能怎么样,即轮胎和发动机部分实例存在与否取决于小轿车这个整体实例的存在。
组合关系和下面提到的聚合关系都是has-a关系的一种。

聚合关系

聚合关系像是示例中班级和学生的关系,班级是由学生组成的,班级是整体,学生是部分,如果班级这个整体消失了,并不会影响学生的存在。

关联关系

关联关系,表示的是一种静态的关系,被关联的两者之间不存在什么依赖关系,而往往是被一些定义或是常识等附加的关联属性。比如学生和身份证,身份证可以确定一个人的身份,这是我们的常识或者说法律规定的约束,而不是天生的。
关联关系也可以有方向,使用实现加箭头表示,A指向B表示A知道B而B不知道A。

依赖关系

依赖关系是一种use-a的关系,使用者和被使用者间仅存在着使用的关系。学生上学依赖自行车这种交通工具,同样他也可以依赖公交车或电动车等等。两者之间产生的是一种临时的关系,为了完成某一特定目的而产生的关联,在完成目的后可以取消这种关系而不会有任何副作用。

参考文章

看懂UML类图和时序图
继承、实现、依赖、关联、聚合、组合的联系与区别

posted @ 2025-02-16 22:13  cwtxx  阅读(33)  评论(0)    收藏  举报