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

news2024/9/24 17:17:54

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.coloradmin.cn/o/1701378.html

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

相关文章

c# 贪心算法(Greedy Algo)

贪婪是一种算法范式,它逐步构建解决方案,始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性,则可以使用贪心法解决优化问题: 每一步,我们都可以做出当前看来最好的选择&…

Spring Cloud Alibaba 架构-Sentinel熔断降级

Sentinel主要功能 Sentinel 是阿里巴巴开源的一款流量控制、熔断降级组件,它主要用于保护微服务系统。Sentinel 的主要功能包括以下几个方面: 1. 流量控制(Flow Control): Sentinel 通过控制并发请求的数量或速率&am…

【Python】搭建pypi私仓

1. 下载依赖 pip install pypiserver # 命令安装 pypiserver 库 pip install passlib # passlib 包来读取 Apache htpasswd 文件apt-get install -y apache2-utils2. 生成密码 使用htpasswd库在指定路径/path/to/.pypipasswd生成密码文件 htpasswd -c /path/to/.pypipasswd …

Windows64位操作系统安装汇编语言环境

1、下载好MASM工具, 并存放在指定路径 2、再安装一个DOSBox 3、打开DOSBox, 并使用 mount 将刚刚存放MASM的路径挂在到C盘,然后进入C盘就可以使用 MASM的命令工具了。 例如: mount c G:\install\study\MASM C:但是DOSBox默认打开的窗口是很小的&…

Jenkins配置(插件/角色/凭证)

目录 传送门前言一、Jenkins插件管理1、更换为国内下载源2、中文汉化插件下载(不推荐)3、低版本Jenkins爆红插件安装4、低版本Jenkins插件持续报错解决办法 二、Jenkins用户角色三、Jenkins凭证管理(svn/git)1、Username with pas…

Linux的nload/nettraf命令实时网卡流量监测

对于linux的网卡上下行流量监测方法有很多 例如nload 现成的nload命令 现成的有 nload 安装 yum -y install nload 查看所有网卡实时网速 sudo nload -m 按enter/上下翻页键即可切换网卡 查看指定网卡实时网速 sudo nload eth0 -m 基于nettraf编译的rpm包 当然也可以你…

Java计算日期相差天数的几种方法

Java计算日期相差天数的几种方法 🗓️ Java计算日期相差天数的几种方法摘要引言一、使用java.util.Date和java.util.Calendar📅1. 使用java.util.Date示例代码 2. 使用java.util.Calendar示例代码 二、使用java.time.LocalDate📆示例代码 三、…

这13个前端库,帮我在工作中赢得了不少摸鱼时间

前言 平时开发的过程中,常常会使用到一些第三方库来提高开发效率,我总结了自己工作这么久以来经常用到的 13 个库,希望对大家有帮助~ antd 全称应该是Ant Design,这是一个 React 的组件库,旨在提供一套常…

基于springboot实现中国陕西民俗网系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现中国陕西民俗网系统演示 摘要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c…

内网安全--域渗透准备知识

目录 知识点: 0x01 0x02 0x03 系列点: Linux主机信息收集 windows主机信息收集 知识点: 0、域产生原因 1、内网域的区别 2、如何判断在域内 3、域内常见信息收集 4、域内自动化工具收集 -局域网&工作组&域环境区别 -域…

第一节:Redis的数据类型和基本操作

最近整理了关于Redis的一些文档,分享给大家,后续会持续更新...... Redis的数据类型 字符串String String:字符串,可以存储String、Integer、Float型的数据,甚至是二进制数据,一个字符串最大容量是512M 列表…

我理解的“财富真相”……

我理解的“财富真相” 人生富贵一途,年轻时会认为钱特别重要,因为要啥没啥,所以整台好车,或有个安乐窝基本是极限目标理解,其实也想有更多钱,但往远了说就具体目标模糊了,咬牙切齿的谈理想&…

618购物节值得入手哪些数码?值得入手的宝藏数码好物安利!

随着618购物节的到来,数码爱好者们纷纷摩拳擦掌,期待在这个年中大促中寻觅到心仪的数码好物,那么在这个618购物节,有哪些数码产品值得我们入手呢?接下来,就让我们一起盘点那些值得入手的宝藏数码好物吧&…

靠AI创意,变现20w!

文章首发于公众号:X小鹿AI副业 大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 之前X小鹿一直在各…

注册表Windows兼容性设置(AppCompatFlags)

属性 - 兼容性 EXE文件属性中有兼容性标签,当有些老版本软件不能正常运行时经常会调整这里的设置。 image.png 上面的所有选项都写在注册表中,其中“更改所有用户的设置”保存在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppC…

一步步实现知乎热榜采集:Scala与Sttp库的应用

背景 在大数据时代,网络爬虫技术发挥着不可或缺的作用。它不仅能够帮助我们快速地获取互联网上的信息,还能处理和分析这些数据,为我们提供深刻的洞察。知乎,作为中国领先的问答社区,汇聚了各行各业的专家和广大用户的…

Selenium探险家:驾驭Web自动化的秘籍与实战

Hi,我是阿佑,今天将带大伙们学会如何使用Selenium进行高效的网站测试,如何配置Selenium Grid实现分布式测试,以及如何预测和拥抱自动化测试的未来! 文章目录 1. 引言2. 背景介绍2.1 Selenium概览2.2 Python与Selenium的…

力扣刷题--268. 丢失的数字【简单】

题目描述🍗 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1: 输入:nums [3,0,1] 输出:2 解释:n 3,因为有 3 个数字,所以…

YOLOv5 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 轻量级卷积神经网络由于其低计算预算限制了CNNs的深度(卷积层数)和宽度(通道数),…

广义线性chirplet变换【附MATLAB代码】

文章来源:微信公众号:EW Frontier 摘要 时频分析方法是一种刻画信号时变特征的有效工具,在相当长的一段时间内受到了广泛的关注。随着TF算法的发展,许多先进的方法被提出,可以提供更精确的TF结果。但是,不…