《软件方法(下)》8.3.4.5和《设计模式》中用语的区别

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集


8.3 建模步骤C-2 识别类的关系

8.3.4 识别关联关系

8.3.4.4 类关系再整理

有了前面的知识,我们需要再整理一下类的关系。用类图表示类的关系如图8-134。

图片

图8-134 “类的关系”各概念之间的关系

从图8-134可以看到,泛化、关联和依赖在一个抽象级别,普通关联和聚合在一个抽象级别,共享聚合和组合(即独占聚合)在一个抽象级别。因此,我们在表达的时候要注意,说“泛化和关联”可以,但说“泛化和聚合”、“泛化和组合”或“继承和组合”是不合适的。

本书的观点是取消“共享聚合”的概念,将其合并到“普通关联”中。此时,“组合”就等同于“聚合”,于是,“聚合”的概念也可以取消,得到图8-135。

图片

图8-135 本书观点的类关系

8.3.4.5 和《设计模式》用语的区别

GoF所写的”Design Patterns: Elements of Reusable Object-Oriented Software”(《设计模式》),第1章中有一句被广为流传的话:

Favor object composition over class inheritance.

优先使用对象组合而不是类继承。

这句话常让人误解组合和继承是一个级别的,其实,根据GoF《设计模式》的用词,这句话中的“组合”应该近似于UML中的“关联”。

如图8-136,在GoF《设计模式》中,给出这句话之后,作者接下来讨论了aggregation(聚合)和acquaintance(认识)的区别,并且说acquaintance有时也被称为association(关联)或using(使用)。然而,在后面的内容中,作者把这几个词全部抛弃,一律使用composition。

图片

图8-136 摘自Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma , et al. , 1995

根据GoF书中内容猜测,其中用语和UML以及本书的用语的对应关系可能如图8-137,图中我用相同颜色标出对应用语。

图片

图8-137 《设计模式》、UML和本书用语的对应

以上仅属推测,而且书中的叙述也是有矛盾的,例如这一句:

Consider the distinction between object aggregation and acquaintance and how differently they manifest themselves at compile- and run-times.

考虑对象聚合和认识之间的区别,以及它们在编译时和运行时如何不同地展现自己。

这句话好像是在说“聚合”和“认识”在编译时和运行时有所不同,这和图8-131中的对应③和④矛盾。

另外,图8-136的片段中,把association(关联)和using(使用)说成同一个意思,这个也是让人困惑的。using听起来更像是UML话语中的“依赖”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何进行硬件监控

在复杂的技术环境中,人们很容易忘记硬件资源的重要性,IT 行业的爆炸性增长使得监控各种硬件资源变得越来越重要,在处理运行关键业务应用程序并在日常基础上启用全局操作的大型网络时,保护这些网络环境的基本构建块至关重要。硬件监…

苗情灾情监控系统—提高农业生产效率

TH-MQ2苗情灾情监控系统是一种用于监测农作物生长状况和灾情的设备,通过实时监测和数据分析,帮助农民及时了解作物生长情况,采取相应的管理措施,提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…

IDEA软件和插件安装

安装IDEA版本:IDEA windows 2021.1.3 使用该版本的IDEA,并且安装下面插件后,个人认为非常好用,并且可以不用破解,无限使用企业版,了解具体方法可以留言或私信。 记录几个好用的IDEA插件,后续持…

安装appium自动化测试环境,我自己的版本信息

教程来自:Appium原理与安装 - 白月黑羽 我的软件的版本: 安装是选择为自己安装而不是选all user pip install appium-python-client命令在项目根目录下安装appium-python-client sdk的话最简单的安装方式就是去Android官网下一个android studio然后在…

在美国小众电商平台通过AI+马克杯月入15万,AI副业赚钱思路大揭秘

AI时代,怎么在小众赛道借助AI做好跨境电商生意?今天跟大家分享POD(Print On Demand)定制赛道的案例。在美国小众手工艺电商平台Etsy通过AI马克杯月入15万,这篇文章会跟大家分享具体的副业案例,商业模式,AIPOD模式具体流…

学会这4个Word打印技巧,让你工作效率翻倍!

作为打工人,我们经常需要打印各种Word文档,以下分享的6个Word打印技巧,如果你不知道就太可惜了,一起来看看吧! 技巧1:打印当前页 如果Word文档有很多页,但只需要打印其中的一页,可以…

matplotlib---气泡图

气泡图简介: 气泡图(Bubble Chart)是一种数据可视化图形,主要用于展示多个数据点之间的关系。 气泡图通过气泡的大小,位置和颜色可以展示数据之间的关系。在气泡图中,横轴和纵轴通常表示数据的两个维度&a…

太狠了,凌晨5点面试。。

(关注数据结构和算法,了解更多新知识) 网上看到一网友发文说收到面试邀请,面试时间竟然是早晨5点,这是要猝死的节奏。有的网友说应该是下午 5 点,如果是下午 5 点直接写下午 5 点就行了,或者写 17 点也行,直…

[企业级高效系统工具]短视频矩阵系统 ,一站式管理新媒体账号,短视频精准获客,一键管理上千个短视频账。

一、做项目为什么要搭建一款属于自己的系统? 在讲这个短视频矩阵系统前,我们聊聊做项目的时候为什么要搭建一款属于自己的系统。 1.拥有自己的系统,就意味着你可以随时随地进行源码部署和更新。你的项目就能紧跟时代潮流,始终保持…

具身人工智能:人工智能机器人如何感知世界

什么是具身人工智能 虽然近年来机器人在智能城市、工厂和家庭中大量出现,但我们大部分时间都在与由传统手工算法控制的机器人互动。这些机器人的目标很狭隘,很少从周围环境中学习。相比之下,能够与物理环境互动并从中学习的人工智能 (AI) 代理(机器人、虚拟助手或其他智能系…

强化学习——学习笔记

一、什么是强化学习? 强化学习 (Reinforcement Learning, RL) 是一种通过与环境交互来学习决策策略的机器学习方法。它的核心思想是让智能体 (Agent) 在执行动作 (Action)、观察环境 (Environment) 反馈的状态 (State) 和奖励 (Reward) 的过程中,学习到…

单片机方案开发个性定制

酷得智能是玩具企业合作方案商,致力于为玩具企业提供一站式的智能化解决方案。我们拥有丰富的行业经验和技术实力,能够根据客户的需求和市场趋势,为其量身定制最适合的智能玩具产品和解决方案。 主营业务: 东莞市酷得智能科技有限…

Sping源码(九)—— Bean的初始化(非懒加载)— ConversionService

序言 经过前面一系列的加载、解析等准备工作,此刻refresh方法的执行已经来到了尾声,接下来我们用几篇文章着重的介绍一下Bean的初始化 代码 着重看refresh()主流程中的finishBeanFactoryInitialization()方法。 finishBeanFactoryInitialization 方法…

JAVA开发 利用代码生成奖状

通过java实现用模板生成奖状 1、图片模板2、实现代码3、生成模板 1、图片模板 2、实现代码 import javax.imageio.ImageIO; import java.awt.*; import java.awt.font.TextAttribute; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;…

三坐标测量机在汽车零部件质量控制中的应用

高质量的零部件能够确保汽车的性能达到设计标准,包括动力性能、燃油效率、操控稳定性等,从而提供更好的驾驶体验,建立消费者对汽车品牌的信任;也推动了汽车行业的技术创新,制造商不断研发新材料、新工艺,以…

Java 登录错误次数限制,用户禁登1小时

手机号验证码登录,验证码输入错误次数超5次封禁 Overridepublic boolean checkCaptcha(String phoneNum, String captcha) {String codeNum (String) redisTemplate.opsForValue().get(UserCacheNames.USER_CAPTCHA phoneNum);if (codeNum null) {throw new Wan…

怎么图片转excel表格免费?介绍三个方法

怎么图片转excel表格免费?在日常工作中,我们经常需要将图片中的表格数据转化为可编辑的Excel格式。幸运的是,市面上有多款软件支持这一功能,并且部分软件还提供免费使用的选项。本文将为您详细介绍几款可以免费将图片转换为Excel表…

Java 异步编程——Java内置线程调度器(Executor 框架)

文章目录 Java多线程的两级调度模型Executor 框架Executor 框架的组成概念Executor 框架中任务执行的两个阶段:任务提交和任务执行 在 Java1.5 以前,开发者必须手动实现自己的线程池;从 Java1.5 开始,Java 内部提供了线程池。 在J…

Python代码:十九、列表的长度

1、题目 描述: 牛牛学会了使用list函数与split函数将输入的连续字符串封装成列表,你能够帮他使用len函数统计一些公输入了多少字符串,列表中有多少元素吗? 输入描述: 输入一行多个字符串,字符串之间通过…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 驾校预约平台 的设计与实现

一.项目介绍 系统角色:管理员、教练、学员 小程序(仅限于学员注册、登录): 查看管理员发布的公告信息 查看管理员发布的驾校信息 查看所有教练信息、预约(需教练审核)、评论、收藏喜欢的教练 查看管理员发布的考试信息、预约考试(需管理…