当前课程知识点:基于Linux的C++ > 第十一讲 泛型编程 > 11.8 题外话:术语翻译 > LinuxCPP1108
讲到这个地方 就想说几句题外话
本来不准备讨论这个问题
但是讲面向对象的时候
有些概念用起来确确实实地听上去
不太那么让人舒服
不顺溜 最主要就是不顺溜
所以就说一说
计算机领域里面有一些术语翻译的问题
我最不满意的就是 dereference 这个词
此前 就是面向对象技术出现之前
在 C 语言代码里边就频繁地使用
reference 和 dereference 这两个词
那个时候 我们就把 reference 翻译成引用
dereference 就翻译成了解引用
名字有点怪
“de”那个英文前缀就是“解”、“脱”的意思
比如说“脱水(dehydration,dewatering)”
像这个词
但是 reference 是“引用”
dereference 是一个“解引用”
弄了三个汉字来表达这个概念
不爽利 听着不像那么一回事
后来我就把它翻译成“引领”
引领是什么意思 引领就是伸颈远望
就是伸直了脖子向远处看
还有一个带领 两个意思
你看 当我们使用指针来访问目标数据对象的时候
你看 当我们使用指针来访问目标数据对象的时候
一个“*”做的就是 dereference
就是引领 伸直了脖子向远处看
访问目标数据对象 多形象
我就用它 dereference
用引领来翻译它
有了 C++ 这个概念之后
reference 因为产生了一个引用传递
reference 就有了一个特别的意义
就和只使用指针的情况就不太一样了
所以如果我们频繁地在指针上面
说“引用、引用、引用”
那会搞糊涂的
到了 C++11 里面以后
那不仅有左值引用了 还有右值引用了
那会更会让人糊涂的
所以在这里 这个词再翻译成“解引用”
实际上更加不妥当了
第二个 type
type 原先翻译成什么东西呢
翻译成“类型”
翻译成类型行不行呢
其实挺好的 我也一直这么用
但是到了面向对象技术以后
我用了总觉得怪
我们说一个 int
它是什么呢 它是一个整数类型
我们简称什么呢 简称整型
一个 class 呢 它是一个类
所以我们称它为类类型
你可以说是一个 class type
它叫类类型
它简称什么呢 简称类类型
你不觉得累吗 我觉得累
所以我把它翻译成型式
“式”是什么
“式”是“公式”、“分子式”、“方程式”
型式比类型好一些
最主要地 int 可以简称为整型
class 可以简称为类型
这一下就区分开了
少了那么一个“类”字 就不累了
第三个 constructor
有人把它翻译成构造函数
也有人把它翻译成建构函数
下面第四个 destructor
相对应地话
如果 destructor 翻译成析构函数
那么实际上把 constructor 翻译成
建构函数其实更妥当
不过建构函数也好 构造函数也好
这两个翻译都不差 都可以用
destructor 弄成析构函数
或解构函数其实都可以
我们已经习惯于使用析构函数了
那就使用析构函数
最重要的就是我们这一讲
要用到的那个词 叫 instance
以前的翻译叫什么呢 叫“实例”
我有时候习惯了也用
但是我一直觉得这个翻译实际上是很不好
但是我一直觉得这个翻译实际上是很不好
instance 用在我们程序设计里边
它表示什么意思呢
我们首先来看这个词的英文本意
它说的是
“a particular example or occurrence of something”
“a particular example or occurrence of something”
表示一个东西的一个特定的例子或者一次发生
我们在面向对象的程序设计中
根据类的型构造一个对象
就表示构造它的一个 instance
我们通过模板构造一个函数 构造一个类
那也是构造一个 instance
这个 instance 不是 example 是 occurrence
这是非常重要一个地方
我们用的那个“例”只是前面那个 example
没有精确地表达 occurrence 这个概念
例是什么 例是可以做依据的事物
调查或统计时指合于某种条件的
具有代表性的事情
比如讲事例、案例、病例
这个东西 叫例
我们构造那个东西是可以依据的事物吗
其实严格讲起来不是 那个类才是
那个模板才是可以依据的事物
我们构造的那个东西反而不是
那你说它是“合于某种条件的具有代表性的东西”
那这个说法其实也是不太妥当的
因为我们构造它
并不是为了让它代表什么
我们也没做统计 也没做调查
所以这个地方用“例”来表达它是不对的
至少是不精确的
那我们实际上构造的是什么东西呢
是一个体
是一个真正存在的活生生的东西
是一个事物的本身和全部
是物质存在的状态和形状 这个叫体
所以我把 instance 翻译成“定体”
表示固定不变的形态性质、体例和体式
那你说我通过类构造一个对象
我通过模板构造一个函数或一个类
那么构造出来的那不是一个实体吗
是的 那是一个实体
但是实体并不仅仅这些
所以我们尽量不使用“实体”
来表达这个 instance 这个概念
否则的话就容易
和我们那个 entity 的翻译混淆的
entity 那个词我们翻译成了实体
所以在这里我把它翻译成了定体
表示一经构造完毕
那个东西就固定不变了
它的格式是固定不变的
并不意味那个对象的值不变
而是它的形式就固定不变了
所以如果你通过一个类构造一个对象
那生成对象的定体或者对象的实体
我就把它称之为象体
那么你通过一个函数模板
构造了一个函数定体或函数实体
你可以称它为函体
一个类模板构造的那样一个类的
一个定体或类的实体
你就可以称为类体
相应地 instantiation 这个词
我就把它翻译成“定体化”
直接把它简称“体化”
要好于原来说的那个“实例化”
specialization 这个就是“特体化”
简称为“特化”
这样的翻译显然要比实例要好
个人观点
-1.1 提纲
-1.2 程序设计的基本概念
-1.3 简单C/C++程序介绍
-1.4 程序设计的基本流程
-1.5 基本语法元素
-1.6 程序设计风格
-1.7 编程实践
-第一讲 C/C++基本语法元素--编程实践提交入口
-2.1 提纲
-2.2 结构化程序设计基础
-2.3 布尔数据
-2.4 分支结构
-2.5 break语句
-2.6 循环结构
-2.7 编程实践
-第二讲 程序控制结构--编程实践提交入口
-3.1 提纲
-3.2 函数声明、调用与定义
-3.3 函数调用栈框架
-3.4 编程实践
-第三讲 函数--编程实践提交入口
-4.1 提纲
-4.2 算法概念与特征
-4.3 算法描述
-4.4 算法设计与实现
-4.5 递归算法(一)
-4.6 递归算法(二)
-4.7 容错与计算复杂度
-4.8 编程实践
-第四讲 算法--编程实践提交入口
-5.1 提纲
-5.2 库与接口
-5.3 随机数库(一)
-5.4 随机数库(二)
-5.5 作用域与生存期
-5.6 典型软件开发流程(一)
-5.7 典型软件开发流程(二)
-5.8 编程实践
-第五讲 程序组织与开发方法--编程实践提交入口
-6.1 提纲
-6.2 字符
-6.3 数组(一)
-6.4 数组(二)
-6.5 结构体
-6.6 编程实践
-第六讲 复合数据类型--编程实践提交入口
-7.1 提纲
-7.2 指针基本概念
-7.3 指针与函数
-7.4 指针与复合数据类型(一)
-7.5 指针与复合数据类型(二)
-7.6 字符串
-7.7 动态存储管理(一)
-7.8 动态存储管理(二)
-7.9 引用
-7.10 编程实践
-第七讲 指针与引用--编程实践提交入口
-8.1 提纲
-8.2 数据抽象(一)
-8.3 数据抽象(二)
-8.4 链表(一)
-8.5 链表(二)
-8.6 链表(三)
-8.7 链表(四)
-8.8 函数指针(一)
-8.9 函数指针(二)
-8.10 抽象链表(一)
-8.11 抽象链表(二)
-8.12 编程实践
-第八讲 链表与程序抽象--编程实践提交入口
-9.1 提纲
-9.2 程序抽象与面向对象
-9.3 类类型
-9.4 对象(一)
-9.5 对象(二)
-9.6 类与对象的成员(一)
-9.7 类与对象的成员(二)
-9.8 类与对象的成员(三)
-9.9 继承(一)
-9.10 继承(二)
-9.11 继承(三)
-9.12 多态(一)
-9.13 多态(二)
-9.14 编程实践
-第九讲 类与对象--编程实践提交入口
-10.1 提纲
-10.2 四则运算符重载(一)
-10.3 四则运算符重载(二)
-10.4 关系与下标操作符重载
-10.5 赋值操作符重载(一)
-10.6 赋值操作符重载(二)
-10.7 赋值操作符重载(三)
-10.8 赋值操作符重载(四)
-10.9 赋值操作符重载(五)
-10.10 流操作符重载(一)
-10.11 流操作符重载(二)
-10.12 流操作符重载(三)
-10.13 操作符重载总结
-10.14 编程实践
-第十讲 操作符重载--编程实践提交入口
-11.1 提纲
-11.2 泛型编程概览
-11.3 异常处理机制(一)
-11.4 异常处理机制(二)
-11.5 运行期型式信息(一)
-11.6 运行期型式信息(二)
-11.7 模板与型式参数化
-11.8 题外话:术语翻译
-11.9 泛型编程实践(一)
-11.10 泛型编程实践(二)
-11.11 泛型编程实践(三)
-11.12 泛型编程实践(四)
-11.13 泛型编程实践(五)
-11.14 泛型编程实践(六)
-11.15 泛型编程实践(七)
-11.16 泛型编程实践(八)
-11.17 泛型编程实践(九)
-11.18 泛型编程实践(十)
-11.19 编程实践
-第十一讲 泛型编程--编程实践提交入口
-12.1 提纲
-12.2 程序执行环境(一)
-12.3 程序执行环境(二)
-12.4 程序执行环境(三)
-12.5 程序执行环境(四)
-12.6 输入输出(一)
-12.7 输入输出(二)
-12.8 文件系统
-12.9 设备
-12.10 库(一)
-12.11 库(二)
-12.12 makefile文件(一)
-12.13 makefile文件(二)
-12.14 makefile文件(三)
-12.15 编程实践
-第十二讲 Linux系统编程基础--编程实践提交入口
-13.01 提纲
-13.02 进程基本概念
-13.03 信号
-13.04 进程管理(一)
-13.05 进程管理(二)
-13.06 进程管理(三)
-13.07 进程间通信(一)
-13.08 进程间通信(二)
-13.09 进程间通信(三)
-13.10 进程间通信(四)
-13.11 进程池
-13.12 编程实践
-第十三讲 进程编程--编程实践提交入口
-14.1 提纲
-14.2 线程基本概念
-14.3 线程管理(一)
-14.4 线程管理(二)
-14.5 线程管理(三)
-14.6 线程管理(四)
-14.7 线程同步机制(一)
-14.8 线程同步机制(二)
-14.9 C++11线程库(一)
-14.10 C++11线程库(二)
-14.11 C++11线程库(三)
-14.12 C++11线程库(四)
-14.13 C++11线程库(五)
-14.14 编程实践
-第十四讲 线程编程--编程实践提交入口
-15.1 提纲
-15.2 Internet网络协议
-15.3 套接字(一)
-15.4 套接字(二)
-15.5 编程实践
-第十五讲 网络编程--编程实践提交入口