当前课程知识点:基于Linux的C++ >  第十一讲 泛型编程 >  11.8 题外话:术语翻译 >  LinuxCPP1108

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP1108在线视频

LinuxCPP1108

下一节:LinuxCPP1109

返回《基于Linux的C++》慕课在线视频列表

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 这个就是“特体化”

简称为“特化”

这样的翻译显然要比实例要好

个人观点

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP1108笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。