当前位置: 首页 > article >正文

类的关联、依赖、聚合和组合关系的思考(一)

最近在看《设计模式》这本书,发现对类之间的关系还没搞的很明白,而类之间的关系对读书、阅读代码和代码设计都非常重要,因此边看书边查阅了一些资料,感觉有些理解了。下面是我的一些思考,分享一下。

查阅了很多博客,类的关系一般就分为关联、依赖、组合、聚合和继承。继承关系很清楚,这里不谈。

在《设计模式》中,类图使用的OMT表示法,而主流使用UML表示法,两者关于类的关系的表示大部分是相同的,只有一些小的区别,然而,正是这些“区别”让人醍醐灌顶。

1、关联关系:看了很多资料,都将关联关系与聚合、组合关系并列,但实际上,聚合、组合关系都应是关联关系的一种。而如果真的要区分的话,可以这样理解:关联关系范指聚合、组合关系之外的关联关系。

        聚合与组合是一样的,都是指类A中聚集了类B。聚合与组合的区别在于:类A与类B两者的生命周期是否相同。如果类B与类A的生命周期相同,则是组合,反之就是聚合。

        举个栗子:汽车和轮子的关系,汽车聚集了四个轮子,两者的关系是聚合还是组合呢,我认为这和我们的需求和设计有关。假设我们的需求是,汽车对象消亡了,轮子对象依然存在且可以用在其他汽车对象或飞机对象上,此时两者的关系就是聚合。如果我们需求是,汽车对象消亡了,轮子对象也必须一同消亡,汽车不存在轮子也就不存在了,也就谈不上将轮子用到其他汽车上,此时两者的关系就是组合。

         因此,组合是一种比聚合要更紧密的关系(关联关系)。两个对象不可能既是组合又是聚合。

        对于关联关系怎么说呢,很多资料里都写的是类A中有一个成员是类B,虽然是一对一,但本质上也是一种聚合或组合的关系。所以,在一般情况下,设计代码的、绘制类图的时候,就要明确是聚合还是组合,在UML中关联关系一般是指类A中有一个成员是类B,这是一种单向的关联关系,如果同时类B中有个成员是类A, 此时就是双向的关联关系。

2、依赖关系

      依赖关系一般是指类A中的成员函数的形参是类B的引用,或类A成员函数返回类B的引用。


http://www.kler.cn/news/335025.html

相关文章:

  • VRRP协议
  • ORB-SLAM复现时遇到的问题(复现失败,切莫当做教程)
  • [RabbitMQ] Spring Boot整合RabbitMQ
  • 一台手机可以登录运营多少个TikTok账号?
  • 【前端】前端数据转化为后端数据
  • 南昌网站建设让你的企业网站更具竞争力
  • 字节跳动收购Oladance耳机:强化音频技术,加速VR/AR生态布局
  • 云原生化 - 工具镜像(简约版)
  • 微服务swagger解析部署使用全流程
  • 鸿蒙开发(NEXT/API 12)【应用间消息通信】手机侧应用开发
  • 【中间件学习】Nginx快速入门(为了配置一个项目)
  • 一个月学会Java 第2天 认识类与对象
  • C++中对象的构造与析构
  • 微知-梅林系统设置无线桥接模式后如何登录梅林路由器?
  • 使用PaddleHub智能生成,献上浓情国庆福
  • 机器人技术基础(1-3章坐标变换)
  • css 简单网页布局——浮动(一)
  • 无源有损耗导电介质的平面电磁波——复数介电常数带来复波数k(导致幅度衰减)和复波阻抗(带来磁场电场相位不同)
  • Java:插入排序
  • ASCII码、Unicode编码和UTF-8编码介绍