UML类图关系理解

简单理解小结

Posted by Jingming on May 12, 2017

UML的类之间有几种关系:泛化Generalization(继承Extend、实现Implementation)、依赖Dependence、关联(聚合Aggregation、组合Composition)。

首先,这几种关系并不是独立的、非此即彼的关系。

他们之间相互关系如下:依赖是最基本的关系,主要体现类之间存在调用的情况;关联关系必然是依赖关系,关联关系主要体现类与类之间的千丝万缕的依赖关系(类之间相互调用形成的一个系统,或者一个类频繁调用另一个类);泛化关系比关联关系之间更加紧密,泛化关系主要体现了类之间的复用(继承、is a kind of)的关系。

泛化关系(Generalization)

体现了一般与特殊的关系,例如鸭子是一种特殊的鸟,说话是人的共同特点,也就是类继承(extends)和接口与实现(implement)两种。接口大部分是实现某些约定的方法,而继承类会复用更多的细节的代码,因此比实现要更加的耦合。

继承使用三角箭头加实线表示,而实现是三角箭头加虚线(比实线要弱的意思)。

依赖关系(Dependency)

简单理解就是服务器和客户端的关系,要注意的是客户端和服务器都不止一个。我们说某个客户端A和某个服务器B之间是依赖关系,因为客户端A会偶尔的调用服务器B。也就是说依赖关系是某个对象单向的、偶然的需要对象B为其服务。依赖关系使用虚线箭头。

关联关系(Association)

关联关系是基于依赖关系的一种更复杂的关系,是一种千丝万缕的关系,比如对象A和对象B是朋友,那么我们很难说是谁为谁服务。关联关系使用实线箭头(如果没有箭头,只有实线,那就是双向关联,PS.有箭头那就是工具人的关系??😨)。

代码上的体现:依赖关系只是import,而关联关系是一个类直接作为另一个的成员变量。

关联关系包含组合(Composition)和聚合(Aggregation)。组合比聚合严格。理解:CPU和一台电脑之间的关系是组合关系,而打印机和电脑之间组成一个打印系统的关系是聚合关系。组合关系意味着两者共存亡,例如器官对于人;聚合关系要松些,部分可以离开整体而存在,整体也可以由于部分离开而存在,例如马刺队和邓肯的关系。所以组合使用菱形实心,而聚合使用菱形空心。

简单的例子作总结:依赖关系好比顾客和商人的关系;关联关系好比朋友关系;而泛化关系好比是父子关系(PS. 父亲有时候也需要调用儿子来帮忙)。

PS.画类图: 类名 + 属性名(访问控制+类型+命名)+ 方法名 步骤:先确定类和类的关系,然后对每个类列举use case,然后对每一个use case,更加详细的理解use case具体在做什么。