[基础概念]UML类之间的关系

类之间的关系

类间关系有很多种,在大的类别上可以分为两种:纵向关系,横向关系。纵向关系就是继承关系。横向关系按照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,他描述一个对象在运行期间会用到另一个对象的关系

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化,依赖关系也可能发生变化。显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生。

UML中的类之间关系实例图

发布了449 篇原创文章 · 获赞 180 · 访问量 87万+

猜你喜欢

转载自blog.csdn.net/ouyangshima/article/details/8283705