幂,你去哪儿了-《分析模式》漫谈37

news/2024/10/7 20:22:00 标签: DDD, 领域驱动设计

DDD领域驱动设计批评文集

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

《软件方法》各章合集


“Analysis Patterns”的第3章的图3.5,原文的图是: 

图片

2004(机械工业出版社)中译本的图是: 

图片

direct翻译成分子,inverse翻译成分母。虽然不是直译,但意思是可以的。

2020(人民邮电出版社)中译本的图是:  

图片

其他部分和2004中译本差不多,除了把direct翻译成正幂,inverse翻译成负幂。这个也不是直译,但意思是错的。原文没有“幂”,译者自行加上“幂”,导致内容出现了错误。

**********

首先我们来回顾“幂”的定义。 

图片

图片

乘方:重复连乘的运算

幂:乘方的结果

b:基数

n:指数

接下来,得从图3.4来说起。

第3章讲的是“观察和测量”,其中有关于单位的模式。图3.4是单位的一个建模方案,原图如下: 

图片

图上的power就是幂。

原子单位如千克(kg)、米(m)、秒(s)等,复合单位可以由原子单位组合而成,例如力的单位牛顿(N)和压强单位帕斯卡(Pa): 

图片

根据刚才回顾的幂的定义,模型需要记住的严格来说不是幂(power),而是指数(exponent),所以Fowler的原文在这里的表达是有点不恰当的,不过这个不是这次讨论的重点,所以后文我还是用“幂”。

我把图3.4转成了如下的类图。“复合单位”的约束,在原文中是自然语言,我把它转成了OCL。 

图片

约束的意思:要么有多于一个的单位引用,例如“千克·米”,如果只有一个单位引用,例如,只有一个“米”,那么这个“米”的幂必须<0或>1,例如,米的-1次方或2次方。

我们把图3.4实例化,填上数据来看一下。 

图片

原子单位,填了3行,千克、米、秒,ID分别1、2、3;

复合单位,填了牛顿、焦耳、瓦特、帕斯卡,ID分别为24、56、66、88。

结合上文的图3.4以及牛顿(N)和帕斯卡(Pa)的定义,“单位引用”的数据如下: 

图片

牛顿和帕斯卡都引用了三个原子单位(千克、米、秒),所以在“单位引用”中都有3行,只是“幂”这一列的值不同。即使复合单位的组合中有米的8次方,“米”在该复合单位的数据中仍然只占1行,只是“幂”的值是8。

我们来看图3.5,也就是刚才说2020中译本搞错了的那个图。

同样,我也把它画成了类图,和原图对比如下: 

图片

此时,已经没有“单位引用”这个类,而是在“复合单位”和“原子单位”之间有两个关联,一个是直接,一个是逆,相当于2004中译本的分子、分母。

“复合单位”的约束和图3.4也不一样了,我用同种颜色圈出它们的对应关系大致如下: 

图片

★建模工具中,在类图的关联某端选中“无序”、“可重复”选项,bag就会出现,不需要输入文字。

★Fowler原书的图,bag和direct、inverse的位置是错的,应该靠近“Atomic Unit(原子单位)”处,类似问题我在之前的文章中已指出。

同样,我们把图3.5实例化,填上数据来看一下。 

图片

上面这个部分和图3.4一样。

不同的是下面这个部分,没有“单位引用”了。取而代之的是两个关联,都是多对多的,于是有两个中间表“复合单位-直接原子单位”和“复合单位-逆原子单位”。 

图片

我们把图3.4的数据和图3.5的数据放在一起看其中的变化: 

图片

图3.4中幂(指数)的正负表示在图3.5的哪个表,绝对值表示在图3.5的表中有几行相同的值,例如,-2表示在“逆”表,占2行。

当然,使用关系数据库来保存,还需要添加标识,不能有完全一样的两行。

这时候,已经没有“幂”的概念了,不存在: 

图片

存在的是 

图片

或者 

图片

同一个原子单位也不一定要凑在一起,反正又不用凑成乘方。

在这一点上,Fowler原文的文字用得很精准。 

图片

你看他的用词,seconds and seconds(秒和秒),并没有说seconds squared(平方秒)之类。

**********

因此,2020中译本这个地方的内容,可以把“幂”去掉,直译“直接”、“逆”,或者按照机械工业出版社的“分子”、“分母”也可以。

还有另外一个小地方,“单元引用”应和上面一致,“单位引用”。 

图片


http://www.niftyadmin.cn/n/5693326.html

相关文章

【移动端】事件基础

一、移动端事件分类 移动端事件主要分为以下几类&#xff1a; 1. 触摸事件&#xff08;Touch Events&#xff09; 触摸事件是移动设备特有的事件&#xff0c;用来处理用户通过触摸屏幕进行的操作。主要的触摸事件有&#xff1a; touchstart&#xff1a;手指触摸屏幕时触发。…

Vue3常用API总结

因为这个月的月初给自己定了个小目标&#xff0c;学完Vue3的基本使用&#xff0c;并使用Vue3亲手做一个小项目&#xff08;稍微透露一下&#xff0c;我制作的是一个小工具&#xff0c;现在已经完成了90&#xff05;了&#xff0c;这个月月底之前会通过博客的形式向大家展示&…

Maven 入门详解

在 Java 世界中&#xff0c;项目依赖管理就像是一张错综复杂的网&#xff0c;稍有不慎就会陷入 “依赖地狱”。而 Maven&#xff0c;就像一位经验丰富的"项目经理"&#xff0c;为我们提供了一套标准化的项目管理方案&#xff0c;将混乱的依赖关系梳理得井井有条。 1.…

Polars简介

1. Polars基础教程 关键概念&#xff1a; Expression API&#xff1a;用于快速灵活的分析。并行计算&#xff1a;易于实现。惰性模式查询优化&#xff1a;自动进行。流处理&#xff1a;处理超过内存大小的数据集。 导入Polars&#xff1a; import polars as pl配置选项设置&…

mongodb光速上手

开始 mongodb是一种nosql数据库&#xff0c;即非关系型数据库。 安装好后将bin目录添加到环境变量。 安装studio-3t&#xff0c;这是可视化编辑器。 启动 mongo --host localhost --port 27017 指令 查看所有库 show dbs 使用或创建并使用库 use school use 数据库名 向…

智慧学生宿舍管理平台|学生宿舍管理平台系统|基于Springboot+VUE的智慧学生宿舍管理平台系统设计与实现(源码+数据库+文档)

智慧学生宿舍管理平台 目录 基于SpringbootVUE的智慧学生宿舍管理平台系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕…

开源跨平台三维模型轻量化软件osgGISPlugins-1、简介

下一篇文章&#xff1a;开源跨平台三维模型轻量化软件osgGISPlugins-2、如何编译 1、仓库地址 github地址&#xff1a;https://github.com/newpeople123/osgGISPlugins gitee地址&#xff1a;https://gitee.com/wtyhz/osg-gis-plugins 2、项目简介 osg引擎的gis插件&#x…

AAA Mysql与redis的主从复制原理

一 &#xff1a;Mysql主从复制 重要的两个日志文件&#xff1a;bin log 和 relay log bin log&#xff1a;二进制日志&#xff08;binnary log&#xff09;以事件形式记录了对MySQL数据库执行更改的所有操作。 relay log&#xff1a;用来保存从节点I/O线程接受的bin log日志…