类之间的关系
类间关系有很多种,在大的类别上可以分为两种:纵向关系,横向关系。纵向关系就是继承关系。横向关系按照UML的建议大体可以分为四种:
|
UML表示法 |
关系 |
依赖(Dependency) |
虚线+箭头( - - ->) |
...use a ... 用(为函数中的参数)具有偶然性。表现在代码层面,为类B作为参数被类A在某个method方法中使用;局部变量。单向依赖(--->) |
关联(Association) |
实线+箭头(→) |
...has a ... 有 。具体表现在,成员变量和参数。若类A单向关联指向类B,则在类A中存在一个属性B b。 单向关联(→),双向关联(─),自关联依赖和关联的区别:一个是使用,一个是拥有;关联可以是双向的,而依赖必须是单向的。 |
聚合(Aggregation) |
空心菱形+实线+箭头(◇→) |
... has a ... 有。 聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可以分离的,它们具有各自的生命周期。class A {...} class B { A* a; .....}当类之间有整体--部分关系的时候,要用聚合、组合。 |
组合(Composition) |
实心菱形+实线+箭头(◆→) |
... is a part of ...组成,组合是关联关系的一种特例。整体和部分是不可分割的,它们具有相同的生命周期,组合类要对被组合类负责。class A{...} class B{ A a; ...}。继承:(是一种 a kind of);组合:(一部分 a part of ) |
纵向关系 |
||
继承(Generalization) 又称 泛化关系 |
实线+空三角形(—△) |
...a kind of...是一种。子类继承父类 |
实现(Implementation) |
虚线+空三角形(- - -△) |
子类实现抽象类 |
它们的强弱关系:依赖 < 关联 < 聚合 < 组合。聚合和组合是关联的两种具体关系,关联包含组合和聚合。
继承
继承用一条带空心箭头的直接表示。
实现
实现关系用一条带空心箭头的虚线表示。
组合
与聚合关系一样,组合关系同样表示整体由部分构成的语义。比如公司由多个部门组成,但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了。例如,公司不存在了,部门也将不存在了。
聚合
聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义,例如一个部门由多个员工组成。与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。例如,部门撤销了,人员不会消失,他们依然存在。
关联
关联关系是用一条直线表示的,它描述不同类的对象之间的结构关系,它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的。它一般用来定义对象之间静态的、天然的结构, 所以,关联关系是一种“强关联”的关系。
比如,乘车人和车票之间就是一种关联关系,学生和学校就是一种关联关系,关联关系默认不强调方向,表示对象间相互知道。如果特别强调方向,如下图,表示 A 知道 B ,但 B 不知道 A 。
依赖
依赖关系是用一套带箭头的虚线表示的,如A依赖于B,他描述一个对象在运行期间会用到另一个对象的关系。
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化,依赖关系也可能发生变化。显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生。
转载:https://blog.csdn.net/ouyangshima/article/details/8283705