《面向对象编程导论 原书第3版》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)Timothy A.Budd著;黄明军,李桂杰译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2003
  • ISBN:7111126661
  • 页数:465 页
图书介绍:本书全面介绍了面向对象编程的基本原理。

1.1 为什么OOP这么流行 1

第1章 面向对象思想 1

1.2 语言和思维 2

1.2.1 爱斯基摩人和雪 2

1.2.2 关于计算机语言的一个例子 2

1.2.3 丘奇猜想和沃夫假说 4

1.3 一个新的范例 5

1.4 一种观察世界的方式 6

1.4.1 代理和团体 6

1.4.2 消息和方法 7

1.4.4 类和实例 8

1.4.5 类的层次——继承 8

1.4.3 责任 8

1.4.6 方法绑定与改写 10

1.4.7 面向对象概念总结 10

1.5 模拟计算 11

1.5.1 隐喻的力量 11

1.5.2 避免无限回归 12

1.6 一段简史 13

小结 13

进一步阅读材料 14

自学提问 16

练习 16

第2章 抽象 17

2.1 抽象层次 18

2.2 抽象的其他形式 20

2.2.2 封装和互换性 21

2.2.1 部分分化 21

2.2.3 接口和实现 22

2.2.4 服务视角 22

2.2.5 复合法 23

2.2.6 特化分层 24

2.2.7 模式 26

2.3 抽象机制的发展简史 26

2.3.1 汇编语言 26

2.3.2 过程 27

2.3.3 模块 28

2.3.4 抽象数据类型 29

2.3.5 以服务为中心的观点 30

2.3.6 消息、继承和多态 30

小结 30

进一步阅读材料 31

自学提问 32

练习 32

第3章 面向对象设计 33

3.1 责任意味着无干扰 33

3.2 小项目编程与大项目编程 34

3.3 为什么从行为开始 34

3.4 一个RDD实例 35

3.4.1 交互式智能厨房助手 35

3.4.2 通过场景工作 36

3.4.3 组件的标识 36

3.5 CRC卡——记录责任 37

3.5.1 给组件一个物理表示 37

3.5.2 “什么/谁”循环 37

3.6 组件和行为 38

3.5.3 文档 38

3.6.1 延迟决定 39

3.6.2 为变化做准备 39

3.6.3 继续场景 40

3.6.4 交互图表 41

3.7 软件组件 42

3.7.1 行为和状态 42

3.7.2 实例和类 42

3.7.3 耦合性和内聚性 43

3.7.4 接口和实现——Parnas原则 43

3.8 形式化接口 44

3.9 设计表现 45

3.10 实现组件 45

3.12 维护和升级 46

3.11 组件集成 46

小结 47

进一步阅读材料 47

自学提问 47

练习 48

第4章 类和方法 49

4.1 封装 49

4.2 类定义 50

4.2.1 C++、Java和C#语言 50

4.2.2 Apple Object Pascal和Delphi Pascal语言 51

4.2.3 Smalltalk语言 52

4.2.4 其他语言 53

4.3 方法 54

4.3.2 常量或不可变数据字段 56

4.3.1 类中方法的声明次序 56

4.3.3 定义和实现的分离 57

4.4 关于类主题的变化 60

4.4.1 Oberon语言中不属于类的方法 60

4.4.2 接口 61

4.4.3 属性 61

4.4.4 向前定义 62

4.4.5 内部类(或嵌套类) 63

4.4.6 类的数据字段 66

4.4.7 作为对象的类 67

小结 68

进一步阅读材料 68

练习 69

自学提问 69

第5章 消息、实例和初始化 71

5.1 消息传递语法 71

5.2 静态类型语言和动态类型语言 72

5.3 从方法内部存取接收器 73

5.4 对象的创建 75

5.5 指针和内存分配 76

5.6 构造函数 79

5.6.1 正统规范的类形式 82

5.6.2 常数值 82

5.7 析构函数和终止器 84

5.8 Smalltalk语言中的元类 86

小结 87

练习 88

自学提问 88

进一步阅读材料 88

第6章 案例研究:八皇后问题 91

6.1 八皇后问题 91

6.2 使用生成器 92

6.2.1 初始化 93

6.2.2 找到解决方案 93

6.2.3 前进到下一位置 94

6.3 用几种语言实现八皇后问题 94

6.3.1 用Object Pascal语言实现八皇后问题 95

6.3.2 用C++语言实现八皇后问题 97

6.3.3 用Java语言实现八皇后问题 99

6.3.4 用Objective-C语言实现八皇后问题 102

6.3.5 用Smalltalk语言实现八皇后问题 104

6.3.6 用Ruby语言实现八皇后问题 106

小结 107

进一步阅读材料 107

自学提问 107

练习 107

第7章 案例研究:台球游戏 109

7.1 台球元素 109

7.2 图形对象 109

7.2.1 桌壁图形对象 110

7.2.2 洞口图形对象 111

7.2.3 球图形对象 112

7.3 主程序 115

7.4 使用继承 116

自学提问 118

小结 118

进一步阅读材料 118

练习 119

第8章 继承与替换 121

8.1 关于继承的直观描述 121

8.1.1 “是一个”检验 121

8.1.2 使用继承的原因 122

8.2 不同语言中的继承 123

8.3 子类、子类型和替换 124

8.4 改写和虚拟方法 125

8.5 接口和抽象类 127

8.6.1 特化子类化(子类型化) 128

8.6.2 规范子类化 128

8.6 继承的形式 128

8.6.3 构造子类化 129

8.6.4 泛化子类化 129

8.6.5 扩展子类化 130

8.6.6 限制子类化 130

8.6.7 变体子类化 130

8.6.8 结合子类化 131

8.6.9 各种继承形式小结 131

8.7 关于继承的变体 131

8.7.1 Java语言中的匿名类 131

8.7.2 继承和构造函数 132

8.7.3 虚拟析构函数 133

8.8.5 快速原型法 134

8.8.4 软件组件 134

8.8.3 接口的一致性 134

8.8.2 代码共享 134

8.8.1 软件可复用性 134

8.8 继承的优点 134

8.8.6 多态和框架 135

8.8.7 信息隐藏 135

8.9 继承的代价 135

8.9.1 程序执行速度 135

8.9.2 程序大小 135

8.9.3 消息传递的开销 136

8.9.4 程序复杂性 136

小结 136

进一步阅读材料 136

练习 137

自学提问 137

第9章 案例研究:纸牌游戏 139

9.1 PlayingCard类 139

9.2 数据类和视图类 139

9.3 游戏 141

9.4 牌堆——使用继承 142

9.4.1 缺省牌堆 144

9.4.2 花色堆 144

9.4.3 待用堆 145

9.4.4 丢弃堆 146

9.4.5 桌面堆 147

9.5 多种形式的游戏 148

9.6 图形用户界面 150

练习 153

自学提问 153

小结 153

进一步阅读材料 153

第10章 子类和子类型 155

10.1 可替换性 155

10.2 子类型 155

10.3 可替换性悖论 158

10.4 构造子类化 158

10.5 动态类型语言 160

10.6 前置条件和后置条件 161

10.7 改进语义 162

小结 162

进一步阅读材料 162

自学提问 163

练习 163

11.1 静态类型化和动态类型化 165

第11章 静态行为和动态行为 165

11.2 静态类和动态类 166

11.2.1 运行时类型决定 168

11.2.2 向下造型(反多态) 169

11.2.3 非语言支持的运行时测试 170

11.2.4 检验是否理解消息 171

11.3 静态方法绑定和动态方法绑定 171

小结 174

进一步阅读材料 174

自学提问 174

练习 174

第12章 替换的本质 177

12.1 内存布局 177

12.1.1 最小静态空间分配 178

12.1.3 动态内存分配 180

12.1.2 最大静态空间分配 180

12.2 赋值 182

12.3 复制和克隆 184

12.3.1 Smalltatk语言和Objective-C语言中的复制 184

12.3.2 C++语言中的拷贝构造函数 184

12.3.3 Java语言中的克隆 185

12.4 相同 185

12.4.1 相同和同一 186

12.4.2 相同检验的悖论 186

小结 188

进一步阅读材料 188

自学提问 188

练习 189

13.1 分类化继承 191

第13章 多重继承 191

13.2 多重继承带来的问题 193

13.2.1 名称歧义 193

13.2.2 对替换的影响 195

13.2.3 Eiffel语言中的重定义 196

13.2.4 CLOS语言的类排序解决方案 197

13.3 接口的多重继承 199

13.4 继承于公共祖先 202

13.5 内部类 205

小结 205

进一步阅读材料 206

自学提问 206

练习 206

14.1 编程语言中的多态 207

第14章 多态及软件复用 207

14.2 软件复用机制 208

14.2.1 使用组合 209

14.2.2 使用继承 211

14.2.3 组合和继承的比较 212

14.3 效率和多态 213

14.4 软件复用的普及会成为现实吗 213

小结 214

进一步阅读材料 214

自学提问 214

练习 215

第15章 重载 217

15.1 类型签名和范畴 217

15.2 基于范畴的重载 218

15.3 基于类型签名的重载 219

15.4 重定义 226

15.5 多价 227

15.6 多方法 229

小结 231

进一步阅读材料 232

自学提问 232

练习 232

第16章 改写 235

16.1 标识改写 236

16.2 代替与改进 237

16.2.1 Smalltalk语言中的代替 238

16.2.2 Beta语言中的改进 240

16.2.3 改进与子类/子类型之间的差异 242

16.2.4 CLOS语言中的封装 243

16.3 延迟方法 243

16.4 改写与遮蔽 244

16.5 协方差与反协方差 246

16.6 改写的变体 250

16.6.1 Java语言中的final方法 250

16.6.2 C#语言中的版本化 251

小结 252

进一步阅读材料 252

自学提问 252

练习 253

第17章 多态变量 255

17.1 简单多态变量 255

17.2 接收器变量 256

17.2.1 多态变量在框架中的作用 258

17.2.2 Smalltalk语言中的端点比较 259

17.2.3 self和super 260

17.3 向下造型 261

17.4 纯多态 263

小结 264

进一步阅读材料 264

自学提问 264

练习 264

第18章 泛型 267

18.1 模板函数 267

18.2 模板类 268

18.3 模板参数中的继承 270

18.4 案例研究:结合分离的类 272

小结 275

进一步阅读材料 275

自学提问 276

练习 276

第19章 容器类 277

19.1 动态类型语言中的容器 277

19.2 静态类型语言中的容器 279

19.2.1 类型化和复用之间的关系 279

19.2.2 替换和向下造型 280

19.2.3 使用替换和改写 284

19.2.4 参数化类 286

19.3 限制元素类型 287

19.4 元素遍历 289

19.4.1 迭代器循环 290

19.4.2 访问器方法 291

小结 294

进一步阅读材料 295

自学提问 295

练习 296

第20章 案例研究:标准模板库 297

20.1 迭代器 298

20.2 函数对象 299

20.3 样例程序——库存系统 301

20.4 样例程序——图表 302

20.4.1 最短路径算法 304

20.4.2 开发数据结构 305

20.5 词汇索引 308

进一步阅读材料 310

小结 310

20.6 OOP的未来 310

自学提问 311

练习 311

第21章 框架 313

21.1 复用和特化 313

21.1.1 高级抽象和低级抽象 314

21.1.2 倒置库 316

21.2 样例框架 317

21.2.1 Java Applet API 317

21.2.2 模拟框架 318

21.2.3 事件驱动的模拟框架 319

小结 324

进一步阅读材料 324

练习 325

自学提问 325

第22章 框架实例:AWT和Swing 327

22.1 AWT的类继承层次 327

22.2 布局管理器 329

22.3 监听器 331

22.4 用户界面组件 333

22.5 案例研究:颜色显示 335

22.6 Swing组件库 338

22.6.1 导入库 338

22.6.2 不同的组件 338

22.6.3 不同的绘制协议 338

练习 339

自学提问 339

进一步阅读材料 339

小结 339

22.6.4 为窗口增加组件 339

第23章 对象互连 341

23.1 耦合和内聚 341

23.1.1 耦合的种类 341

23.1.2 内聚的种类 344

23.1.3 德墨特尔法则 345

23.1.4 类级别可视性与对象级别可视性 346

23.1.5 活动值 347

23.2 子类客户和用户客户 347

23.3 存取控制和可视性 348

23.3.1 Smalltalk语言中的可视性 348

23.3.3 C++语言中的可视性 349

23.3.2 Object Pascal语言中的可视性 349

23.3.4 Java语言中的可视性 352

23.3.5 Objective-C语言中的可视性 354

23.4 有意依赖性 354

小结 355

进一步阅读材料 355

自学提问 355

练习 356

第24章 设计模式 357

24.1 控制信息流 357

24.2 描述模式 358

24.3 迭代器 359

24.4 软件工厂 360

24.5 策略 360

24.7 组合 361

24.6 单件 361

24.8 装饰器 363

24.9 双调度模式 363

24.10 享元 365

24.11 代理 365

24.12 外观 366

24.13 观察者 366

小结 367

进一步阅读材料 367

练习 368

25.1.1 类对象 368

自学提问 368

第25章 反射和内省 369

25.1 理解机制 369

25.1.2 字符串形式的类名称 370

25.1.3 检测对象类 371

25.1.4 通过类建立实例 372

25.1.5 检测对象是否理解消息 373

25.1.6 类行为 373

25.2 作为对象的方法 374

25.3 修改机制 375

25.3.1 Smalltalk语言中的方法编辑 375

25.3.2 Java语言中的动态类加载 375

25.4 元类 377

小结 378

进一步阅读材料 379

自学提问 379

第26章 分布式对象 381

26.1 地址、端口和套接字 382

26.2 一个简单的客户/服务器程序 383

26.3 多客户端 384

26.4 通过网络传输对象 389

26.5 更复杂的技术 392

小结 392

进一步阅读材料 392

自学提问 393

练习 393

第27章 实现 395

27.1 编译器和解释器 395

27.2 作为参数的接收器 395

27.3 继承方法 396

27.3.2 裁剪问题 397

27.3.1 多重继承的问题 397

27.4 改写方法 398

27.5 名称编码 400

27.6 分派表 400

27.7 字节码解释器 402

27.8 即时编译 404

小结 404

进一步阅读材料 404

自学提问 405

练习 405

附录A 八皇后问题的源代码 407

附录B 台球游戏的源代码 421

附录C 纸牌游戏的源代码 433

术语表 443

参考文献 455