幂,你去哪儿了-《分析模式》漫谈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.rhkb.cn/news/440598.html

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

相关文章

Python 从入门到实战33(使用MySQL)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…

M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?

该文章前面三节主要介绍M3u8视频是什么&#xff0c;视频播放错误(找不到地址)的解决方法在后面 M3U8是一种多媒体播放列表文件格式&#xff0c;主要用于流媒体播放。 一、文件格式特点 1. 文本文件&#xff1a;M3U8是一个采用 UTF-8 编码的文本文件&#xff0c;这意味着它可…

CSS基础-盒子模型(三)

9、CSS盒子模型 9.1 CSS常用长度单位 1、px&#xff1a;像素&#xff1b; 2、em&#xff1a;相对元素font-size的倍数&#xff1b; 3、rem&#xff1a;相对根字体的大小&#xff0c;html标签即是根&#xff1b; 4、%&#xff1a;相对于父元素进行计算。 注意&#xff1a;CSS样…

基于OpenCV的实时年龄与性别识别(支持CPU和GPU)

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

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

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

四.网络层(上)

目录 4.1网络层功能概述 4.2 SDN基本概念 4.3 路由算法与路由协议 4.3.1什么是路由协议&#xff1f; 4.3.2什么是路由算法&#xff1f; 4.3.3路由算法分类 (1)静态路由算法 (2)动态路由算法 ①全局性 OSPF协议与链路状态算法 ②分散性 RIP协议与距离向量算法 4.3.…

Python手绘五星红旗,庆75周年

环境 pip install matplotlib pip install numpy 代码 import matplotlib.pyplot as plt import numpy as np# 中国国旗的标准尺寸比例是 3:2 width, height 300, 200 # 这里可以调整为任何满足3:2比例的尺寸# 创建一个新图形 fig, ax plt.subplots(figsize(width/100, h…

快速熟悉Nginx

一、Nginx是什么&#xff1f; ‌Nginx是一款高性能、轻量级的Web服务器和反向代理服务器。‌ ‌特点‌&#xff1a;Nginx采用事件驱动的异步非阻塞处理框架&#xff0c;内存占用少&#xff0c;并发能力强&#xff0c;资源消耗低。‌功能‌&#xff1a;Nginx主要用作静态文件服…

JS 介绍/书写位置/输入输出语法

目录 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS 的组成 2. JS 书写位置 2.1 内部 JS 2.2 外部 JS 2.3 内联 JS 3. JS 注释和结束符 4. JS 输入输出语法 4.1 输入语法 4.2 输入语句 4.3 执行顺序 5. 字面量 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS …

网 络 安 全

网络安全是指保护网络系统及其所存储或传输的数据免遭未经授权访问、使用、揭露、破坏、修改或破坏的实践和技术措施。网络安全涉及多个方面&#xff0c;包括但不限于以下几个方面&#xff1a; 1. 数据保护&#xff1a;确保数据在传输和存储过程中的完整性和保密性&#xff0c;…

Python3 爬虫 中间人爬虫

中间人&#xff08;Man-in-the-Middle&#xff0c;MITM&#xff09;攻击是指攻击者与通信的两端分别创建独立的联系&#xff0c;并交换其所收到的数据&#xff0c;使通信的两端认为其正在通过一个私密的连接与对方直接对话&#xff0c;但事实上整个会话都被攻击者完全控制。在中…

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接&#xff1a;https://sysin.org/blog/macOS-Sequoia/ 查看最新版。原创作品&#xff0c;转载请保留…

vsomeip用到的socket

概述&#xff1a; ​ vsomeip用到的socket的代码全部都在implementation\endpoints目录下面&#xff0c;主要分布在下面六个endpoint类中&#xff1a; local_client_endpoint_impl // 本地客户端socket&#xff08;UDS Socket或者127.0.0.1的socket&#xff09;local_server…

解决ros2 rviz Fixed Frame No TF data问题

新建一个终端&#xff0c;然后输入 &#xff1a;map后的数字可以任意&#xff0c;100也可以。注意map与框架名称一致。 rosrun tf2_ros static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 map 5

(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第1关Linux 基础知识

关卡任务 闯关任务需要在关键步骤中截图&#xff1a; 任务描述 完成所需时间 闯关任务 完成SSH连接与端口映射并运行hello_world.py 10min 可选任务 1 将Linux基础命令在开发机上完成一遍 10min 可选任务 2 使用 VSCODE 远程连接开发机并创建一个conda环境 10min 可选任务 3 创…

`git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支

git restore 和 git checkout 都可以用于丢弃工作区的改动 但它们有一些区别&#xff0c;尤其是在 Git 2.23 引入了新的命令后。 主要区别 git checkout 是一个多用途命令&#xff1a; 它用于切换分支。它还可以用于恢复工作区中特定文件的更改。由于功能过于复杂&#xff0c…

html中的文本标签(含标签的实现案例)

目录 1.标题标签 2.标题标签的align属性 3.段落标签 4.水平线标签hr 5.换行标签br 6.文本样式标签font ​编辑7.文本格式化标签 8.文本语义标签 1&#xff09;时间time标签 2&#xff09;文本高亮Mark标签 3&#xff09;cite标签 9.特殊字符标签 10.图像标签img 附录&#xff…

安卓使用memtester进行内存压力测试

memteser简介 memtester 是一个用于测试内存可靠性的工具。 它可以对计算机的内存进行压力测试&#xff0c;以检测内存中的错误&#xff0c;例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行&#xff0c;并且可以针对不同大小的内存进行测试。 下载源码 m…

【Python】Python知识总结浅析

Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年首次发布。它以简洁的语法和强大的功能著称&#xff0c;适用于多种应用场景&#xff0c;包括Web开发、数据分析、人工智能、自动化脚本等。 易于学习和使用&#xff1a;Python的语法简洁明了&#xff0c;适合初…

【Windows】在任务管理器中隐藏进程

在此前的一篇&#xff0c;我们已经介绍过了注入Dll 阻止任务管理器结束进程 -- Win 10/11。本篇利用 hook NtQuerySystemInformation 并进行断链的方法实现进程隐身&#xff0c;实测支持 taskmgr.exe 的任意多进程隐身。 任务管理器 代码&#xff1a; // dllmain.cpp : 定义 …