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

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.mzph.cn/diannao/55597.shtml

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

相关文章

Linux聊天集群开发之环境准备

一.windows下远程操作Linux 第一步&#xff1a;在Linux终端下配置openssh&#xff0c;输入netstate -tanp,查看ssh服务是否启动&#xff0c;默认端口22.。 注&#xff1a;如果openssh服务&#xff0c;则需下载。输入命令ps -e|grep ssh, 查看如否配有&#xff0c; ssh-agent …

VirtualBox Ubuntu22.04 NOI linux2.0 Terminal无法打开 终端打不开 两步解决法儿

新安装的虚拟机无法打开Terminal&#xff0c;从应用列表中单击Terminal&#xff0c;左上角任务栏会出现Terminal&#xff0c;并且鼠标转圈&#xff0c;但是过一会左上角Terminal消失&#xff0c;就像一切都没有来过。 解决办法&#xff1a; CTRL ALT F3 进入命令行模式&…

004集—— txt格式坐标写入cad(CAD—C#二次开发入门)

如图所示原始坐标格式&#xff0c;xy按空格分开&#xff0c;将坐标按顺序在cad中画成多段线&#xff1a; 坐标xy分开并按行重新输入txt&#xff0c;效果如下&#xff1a; 代码如下 &#xff1a; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; us…

pytorch导入数据集

1、概念&#xff1a; Dataset&#xff1a;一种数据结构&#xff0c;存储数据及其标签 Dataloader&#xff1a;一种工具&#xff0c;可以将Dataset里的数据分批、打乱、批量加载并进行迭代等 &#xff08;方便模型训练和验证&#xff09; Dataset就像一个大书架&#xff0c;存…

trans-cinnamate 4-monooxygenase肉桂酸4-羟化酶C4H的克隆和功能鉴定-文献精读62

Cloning and functional characterization of two cinnamate 4-hydroxylase genes from Pyrus bretschneideri 两种从白梨&#xff08;Pyrus bretschneideri&#xff09;中克隆和功能鉴定的肉桂酸4-羟化酶基因 摘要 肉桂酸4-羟化酶&#xff08;C4H&#xff09;是植物苯丙素类…

SpringBoot+ElasticSearch7.12.1+Kibana7.12.1简单使用

案例简介 本案例是把日志数据保存到Elasticsearch的索引中&#xff0c;并通过Kibana图形化界面的开发工具给查询出来添加的日志数据&#xff0c;完成从0到1的简单使用 ElasticSearch职责用法简介 ElasticSearch用在哪 ElasticSearch在我这个案例中&#xff0c;不是用来缓解增…

GPU Puzzles讲解(二)

GPU-Puzzles项目是一个很棒的学习cuda编程的项目&#xff0c;可以让你学习到GPU编程和cuda核心并行编程的概念&#xff0c;通过一个个小问题让你理解cuda的编程和调用&#xff0c;创建共享显存空间&#xff0c;实现卷积和矩阵乘法等 https://github.com/srush/GPU-Puzzleshttp…

NVIDIA Hopper 架构深入

在 2022 年 NVIDIA GTC 主题演讲中,NVIDIA 首席执行官黄仁勋介绍了基于全新 NVIDIA Hopper GPU 架构的全新 NVIDIA H100 Tensor Core GPU。 文章目录 前言一、NVIDIA H100 Tensor Core GPU 简介二、NVIDIA H100 GPU 主要功能概述1. 新的流式多处理器 (SM) 具有许多性能和效率…

leetcode58:最后一个单词的长度

给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大 子字符串 。 示例 1&#xff1a; 输入&#xff1a;s "Hello World" 输出&#xff…

浅谈汽车智能座舱如何实现多通道音频

一、引言 随着汽车智能座舱的功能迭代发展&#xff0c;传统的 4 通道、6 通道、8 通道等音响系统难以在满足驾驶场景的需求&#xff0c;未来对于智能座舱音频质量和通道数会越来越高。接下来本文将浅析目前智能座舱如何实现音频功放&#xff0c;以及如何实现多路音频功放方案。…

C语言文件操作(上)(27)

文章目录 前言一、为什么要用文件&#xff1f;二、什么是文件&#xff1f;程序文件数据文件文件名文件类型文件缓冲区文件指针 三、流流的概念标准流 总结 前言 C语言可以直接操作文件&#xff0c;如果你是第一次听说这个特性&#xff0c;可能会眼前一亮&#xff0c;感到惊奇  …

MongoDB的安装与增删改查基本操作

MongoDB是一种非关系型数据库,是NoSQL语言,但是又是最接近关系型数据库的。内部存储不是表结构,但是可以对数据进行表结构的操作。 一、安装 在官网:Download MongoDB Community Server | MongoDB下载系统对应的版本进行安装即可 二、编辑器 在安装MongoDB后会自带一个编…

图片格式入门

主要参考资料&#xff1a; 常见的图片格式介绍: https://blog.csdn.net/cnds123/article/details/127165291 目录 像素图与矢量图像素图&#xff08;pixel image&#xff09;矢量图&#xff08;Vector graphics&#xff09; 像素图与矢量图 像素图&#xff08;pixel image&…

D3.js中国地图可视化

1、项目介绍 该项目来自Github&#xff0c;基于D3.js中国地图可视化。 D3.js is a JavaScript library for manipulating documents based on data. It uses HTML, SVG, and CSS to display data. The full name of D3 is "Data-Driven Documents," which means it a…

话术挂断之后是否处理事件

文章目录 前言联系我们解决方案方案一方案二 前言 流程&#xff1a;自动外呼进入机器人话术。问题&#xff1a;在机器人放音时用户挂断后&#xff0c;话术还会继续匹配流程&#xff0c;如果匹配上的是放音节点&#xff0c;还会进行放音&#xff0c;那么在数据库表conversation…

Redis 缓存策略详解:提升性能的四种常见模式

在现代分布式系统中&#xff0c;缓存是提升性能和减轻数据库负载的关键组件。Redis 作为一种高性能的内存数据库&#xff0c;被广泛应用于缓存层。本文将深入探讨几种常用的 Redis 缓存策略&#xff0c;包括旁路缓存模式&#xff08;Cache-Aside Pattern&#xff09;、读穿透模…

阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

作者&#xff1a;胡志广(独鳌) 背景 Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件&#xff0c;这个事件是 K8s 原生的事件&#xff0c;其实绝大多数的用户并不会关心&#xff0c;同时也可能看不懂。而事件中心&#xff0c;是希望能够…

SpringBoot MyBatis连接数据库设置了encoding=utf-8还是不能用中文来查询

properties的MySQL连接时已经指定了字符编码格式&#xff1a; url: jdbc:mysql://localhost:3306/sky_take_out?useUnicodetrue&characterEncodingutf-8使用MyBatis查询&#xff0c;带有中文参数&#xff0c;查询出的内容为空。 执行的语句为&#xff1a; <select id&…

Tensorflow2.0

Tensorflow2.0 有深度学习基础的建议直接看class3 class1 介绍 人工智能3学派 行为主义:基于控制论&#xff0c;构建感知-动作控制系统。(控制论&#xff0c;如平衡、行走、避障等自适应控制系统) 符号主义:基于算数逻辑表达式&#xff0c;求解问题时先把问题描述为表达式…

【Kubernetes】常见面试题汇总(五十三)

目录 118. pod 状态为 ErrlmagePull &#xff1f; 119.探测存活 pod 状态为 CrashLoopBackOff &#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。…