UML 表示类之间的关系有如下几种:
-
泛化关系(generalization)
泛化关系其实就是说在面向对象编程中继承这个概念,表示的是 is-a 关系,即表示 A 是 B 的关系。
-
实现关系(realization)
实现关系从字面就可以知道它表示的是面向对象编程中对接口实现这个概念。
-
聚合关系(aggregation)
聚合关系是用一条带空心的菱形箭头的直线表示,如下图表示 A 聚合到 B 上,也可以说是 B 是由 A 组成。
聚合关系用于表示实体对象之间的关系,**表示整体由部分构成的语义。它与接下来说的组合关系不同的地方在于整体和部分不是强依赖的,即使整体不存在了,部分依然可以继续存在,不受整体的影响。**例如一个班级由多个学生组成,假如班级不存在,但是学生依然还是存在的。 -
组合关系(composition)
组合关系是用一条带实心的菱形箭头的直线表示,如下图表示 A 组成 B,也可以说是 B 是由 A 组成的。
组合关系跟聚合关系一样,也是表示实体对象之间的关系,表示整体由部分构成的语义。但组合关系跟聚合关系有区别的地方是整体和部分是一种强依赖的特殊聚合关系,即当整体不存在了,部分也就跟着消失了。例如一个公司由多个部门构成,当公司倒闭了,旗下部门肯定也就跟着消失了。覆巢之下,安有完卵! -
关联关系(association)
关联关系是用一条直线表示的,它描述不同类的对象之间的结构关系。它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的,它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系。
-
依赖关系
依赖关系是用一条带箭头的虚线表示的。如下图表示 A 依赖于 B;它描述一个对象在运行期间会用到另一个对象的关系。
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化,依赖关系也可能发生变化。
显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;