UML中常见的类关系你了解吗?
阅读原文时间:2023年07月11日阅读:1

  最近老大给我设计了一个微信扫码登录的通过工具包流程图,设计过程中使用了模板模式、面向接口编程等设计思路,让我很享受整个过程;下来我就接触了一下Java的设计模式,很是懵懂,听说这也是要靠经验来喂,才能有设计架构的思想,所以先从简单的做起,先了解了解UML中类与类之间的关系:

UML中常见的关系包括:泛化(Generalization)、实现(Realization)、依赖(Dependency)、关联(Association)、聚合(Aggregation)、组合(Composition)六种关系

(1)泛化关系是指子类继承父类、子接口继承父接口的功能,并可以增加新功能的能力,继承是类与类 或 接口与接口最常见的关系,Java中关键字描述:extends

  

(2)实现关系是指类实现接口(一个类可以实现1 ~ n 个接口),重写接口包含所有的抽象方法,Java中关键字描述:implements

  

(3)依赖关系是指类与类之间的连接,表示一个类依赖于另外一个类的定义,依赖关系时是单向的。简单理解就是类A使用到了类B,这种依赖具有偶然性、临时性,是非常弱的关系。但是类B的变化会影响到类A。举个例子,如某人要过河,则人与船的关系就是依赖,人过河之后,与船的关系就解除了,因此是一种弱的连接。在代码层面,类B作为参数出现在类A在某个方法中;

  在java中,依赖表现为:局部变量,方法中的参数和对静态方法的调用。

  

(4)关联关系是指类与类之间的连接,使得一个类知道另外一个类的属性和方法。

  关联可以使用单箭头表示单向关联,使用双箭头表示双向关联,不建议使用双向关联,关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。

  a)0..1 表示可以有0个或者1个实例

  b)0..* 表示对实例的数目没有限制

  c)1     表示只能有一个实例

  d)1..* 表示至少有一个实例

  关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。

  在Java中,关联关系是使用实例变量来实现。

  

(5)聚合是关联关系的特例,是强的关联关系,聚合是整体与个体的关系,即has-a关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU,公司与员工的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。

  a)聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次(同级关系),而聚合则明显的在两个不同的层次(上下级关系);

  b)A 中拥有一个 B,但 B 脱离于 A 仍然可以独立存活;

  

(6)组合关系也是关联关系的一种特例,体现的是一种 contain-a 关系,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。

  a)体现在代码层面与关联是一致的,使用实例变量来实现,只能从语义来区分;

  b)组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不能脱离“整体”单独存在,其生命周期应该是一致的;

  c)A 中拥有一个 B,B 脱离 A 后在系统中没有任何存活的意义;

   

(7)总结:

  类与类之间的关联关系要注意强弱,由弱到强次序:依赖 < 关联 < 聚合 < 组合

  继续前进!

热门专题

程序监控centos的内存,cpu,磁盘

jQuery怎么实现点击空白弹窗消失

BN MINIBATCH BATCH SIZE 误差反向传播

loadrunner11关联url转义

centos7 如何卸载旧的openssl

pg数据库查看 sql查询情况

puppeteer Headless模式下如何全屏

命令行 maven 通过jar生成pom

maven 修改远程仓库

sim900a连接onenet

k8s deployment定义

mybatis xml 枚举

oracle 批量给表加字段

机器学习模型for循环寻找最优参数

ubuntu libbcc.so 安装

C#中一个窗体中数据如何传递到其他窗体的LABEL中

jsonview插件

ios 创建scheme 不同名称 不同icon

shell读取文件去掉换行

weblogic受管服务启动命令

Home

Powered By WordPress

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器