对象揭秘:Java、Eiffel和C++

对象揭秘:Java、Eiffel和C++
作 者: Ian Joyner 鲍志云
出版社: 人民邮电出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 面向对象语言 程序设计
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  IanJoyner是澳大利亚Macquarie大学微软研究院的对象技术组织的成员。他从1979年起,开始从事面对对象软件的实践和评估工作。1992年,Joyner将自己收集的有关C++缺陷的问题写成一篇名为C++??ACritiqueofC++andProgrammingandLanguageTrendsofthe1990s的论文发表在新闻组上,引起很大反响,促使作者增补、修改并相继推出了论文第二版和第三版;最终,作者将这篇文章扩充为本书。

内容简介

毫无疑问,你现在正站在书店里,犹豫着有何充分理由要舍弃书架上充拆视野的其余关于C++、Java的书,以及(较少量的)Eiffel的书而购买本书。另一种可能性是你已经买了这本书,而正在考试是不是该读下去。本书共14章,分别从对象、类、模块,特性和接口,继承和泛型以及并行机制和垃圾收集等诸多方面,细致比较了C++语言和其他两种语言伯异同,分析了它们各自的优劣。由于本书是由作者最初分析C++语言缺陷的一篇论文扩展而来,所以,本书所收集的关于C++语言的缺陷,也可以理解为“避免这样使用C++”的建议,对于C++程序员颇有助益。

图书目录

第1章 语言原则 1

1.1 程序设计 3

1.2 交流、抽象和精确性 6

1.3 表示法 8

1.4 工具集成 9

1.5 正确性 9

1.6 类型 14

1.7 灵活性、正确性和复用性 16

1.8 冗余和检查 19

1.9 封装和实现隐藏 21

1.10 安全性和代码品质的考虑 25

1.11 实现和部署的考虑 26

1.12 为什么要面向对象 27

1.13 关于程序设计语言的演化 27

1.14 数学的用途 28

1.15 遗产系统 28

第2章 实体和类型 31

2.1 从位到语义 31

2.2 基本结构:类 37

2.3 文法的用处 45

2.4 类和类型 48

2.5 结构(C++) 49

2.6 Typedef(C++) 49

2.7 全局环境 50

2.8 类的元数据 51

2.9 Obsolete (Eiffel) 54

2.10 不变式(Eiffel) 56

2.11 组件 58

第3章 模块与导入 63

3.1 命名空间 (C++) 64

3.2 群集 (Eiffel) 67

3.3 包 (Java) 69

3.4 头文件 (C++) 69

3.5 导入(Java) 73

3.6 ACE说明(Eiffel) 73

3.7 分离还是整合 74

第4章 成员和特性 77

4.1 基本结构 77

4.2 成员 (C++和Java) 88

4.3 类定义中的匿名参数 (C++) 88

4.4 缺省参数 (C++) 90

4.5 本地实体声明 (Java 和 C++) 92

4.6 内联(C++) 93

4.7 指针和引用 (C++) 98

4.8 声明和定义 (C++) 98

4.9 作用域 100

4.10 常量 100

4.11 静态(C++) 103

4.12 单次子程序 104

4.13 类变量和重定义 105

第5章 类型扩展:继承与虚拟 107

5.1 基本结构:继承和派生类 109

5.2 继承的本性 116

5.3 多重继承 121

5.4 虚类(C++) 129

5.5 嵌套类(Java和C++) 132

5.6 多态与继承 138

5.7 联合 139

5.8 枚举类型 143

5.9 名字重载 146

5.10 虚函数(C++) 152

5.11 纯虚函数(C++) 159

5.12 函数重载 (C++和Java) 162

5.13 虚拟与内联 168

第6章 类型扩展:泛型和模板(C++和Eiffel) 171

6.1 基本结构 173

6.2 C++语法 176

6.3 受束泛型 176

6.4 泛型和代码膨胀 177

6.5 泛型的替代形式 178

6.6 Java和泛型 182

6.7 一些关于泛型的理论 186

6.8 泛型和协变 189

第7章 接口和访问控制 191

7.1 基本结构 191

7.2 友元 (C++) 193

7.3 受控导出与友元 195

7.4 多接口 200

7.5 外部赋值(C++和Java) 201

7.6 导出控制和嵌套 202

7.7 可变常量(C++) 204

7.8 一般化 205

第8章 构造函数、析构函数和其他操作符 207

8.1 无名构造函数(C++) 207

8.2 缺省构造函数(C++和Java) 208

8.3 构造函数继承 208

8.4 扩展的初始化(Eiffel) 209

8.5 构造函数初始化(C++) 209

8.6 析构函数(C++) 211

8.7 Dispose(Eiffel) 211

8.8 =操作符(C++) 211

8.9 . 和 - (C++) 212

8.10 Delete和Delete [] (C++) 215

8.11 前缀和后缀运算符(C++) 216

8.12 || 和 && (C++) 217

8.13 运算符重载(C++和Eiffel) 218

8.14 隐式转换和重载(C++) 219

8.15 调用父类的特性 220

8.16 调用子类的特性 223

8.17 条件表达式 224

第9章 类型转换 225

9.1 类型转换(C++) 225

9.2 运行时类型识别和类型转换(C++) 228

9.3 新的类型转换(C++) 232

9.4 类型推导 232

9.5 Java和类型转换 233

9.6 签名变化(Eiffel) 233

第10章 编译时刻 247

10.1 全局分析 247

10.2 类型安全链接(C++) 249

10.3 类接口 251

第11章 运行时刻 253

11.1 并行——是时间了 253

11.2 垃圾收集 266

11.3 构造函数和临时变量(C++) 273

11.4 不良删除(C++) 274

11.5 切割(C++) 275

11.6 程序执行 276

11.7 动态链接 277

11.8 异常处理 279

11.9 链接错误(Java) 283

第12章 其他细节 285

12.1 注释 285

12.2 十六进制常量(Eiffel) 287

12.3 Double, double toil和trouble 288

12.4 类头部声明(C++) 290

第13章 项目、设计和其他因素 293

13.1 契约式设计 293

13.2 先验条件、类型、不变式 296

13.3 软件生命周期 297

13.4 CASE工具 301

13.5 复用性和交流 303

13.6 复用性和信任 304

13.7 复用性和兼容性 305

13.8 复用性和可移植性 307

13.9 复用性和尺寸 308

13.10 模式化编程 308

13.11 低级编码 309

13.12 知道正确的结构 310

13.13 效率与优化 310

13.14 标准化、稳定性和成熟度 312

13.15 复杂性 314

13.16 C++:面向对象语言的压倒多数选择 318

第14章 一般问题 321

14.1 指针 322

14.2 布尔类型 324

14.3 逻辑运算符和位运算符 326

14.4 数组 327

14.5 函数参数 331

14.6 void和void* 332

14.7 NULL 与0 338

14.8 char;signed和unsigned 339

14.9 void fn () 340

14.10 fn () 341

14.11 fn (void) 344

14.12 return 344

14.13 Switch语句 346

14.14 字符串中的元数据 347

14.15 ++, -- 348

14.16 赋值运算符 350

14.17 赋值表达式 352

14.18 宏定义 354

14.19 大小写敏感性 356

14.20 分号 359

14.21 注释 361

14.22 耦合因素(Cpaghe++i) 362

参考书目 365

术语表 375

索引 385