《面向对象数据结构与软件开发 Java版》PDF下载

  • 购买积分:26 如何计算积分?
  • 作  者:Jean-Paul Tremblay,Grant A.Cheston著;李晔,林波,詹文军译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2005
  • ISBN:7302099502
  • 页数:1036 页
图书介绍:本书全面地介绍了面向对象的编程技术,提供了全面的算法分析的基本内容,比较了算法和数据结构,以及用于面向对象分析和大型信息系统设计的基本软件工程原则。它是第一本在中级水平上介绍软件设计和开发的数据结构书籍。

目录 1

1.1 介绍 1

第1章 软件开发 1

1.2 软件开发过程 2

1.3 评估软件质量 4

1.3.1 软件产品中的质量因素 4

1.3.2 衡量软件质量 7

1.4 软件设计原则 8

1.4.1 模块化和本地化 8

1.4.2 抽象和信息隐藏 9

1.4.3 松散耦合度和高内聚度 10

1.5 软件设计方法 11

1.5.1 自上而下的设计方法 12

1.5.2 组合式(自下而上)设计 13

1.5.3 面向对象设计 14

1.6 小结 14

第2章 Java基础 15

2.2 注释和空白 15

2.1 简介 15

2.3 命名约定 16

2.4 数据类型 16

2.4.1 基本类型 16

2.4.2 引用类型 17

2.5 字面量和常量 18

2.6 运算符 18

2.6.1 算术运算符 18

2.6.2 增量和减量运算符 18

2.6.3 关系运算符 19

2.6.4 布尔运算符 19

2.6.5 运算的面向对象表示法 20

2.6.6 字符串运算 20

2.7.1 赋值语句 22

2.7 基本语句 22

2.7.2 用于控制台输入和输出的语句 23

2.7.3 声明语句 24

2.7.5 if语句 25

2.7.4 复合语句或块 25

2.7.6 While语句 26

2.7.7 for语句 27

2.7.8 Switch语句 28

2.8 方法 30

2.9 类声明 31

2.10 Java程序 33

2.11 对象 34

2.11.1 打印对象 35

2.11.2 对象等同性 36

2.11.3 this对象 37

2.11.4 可访问性 37

2.12 继承性 38

2.13 实参传递 41

2.14 修复程序错误 43

2.14.1 编译时错误 44

2.14.2 运行时错误 44

2.14.3 针对错误输出的调试技术 45

2.15 I/O到文本文件 46

2.16 Java虚拟机 47

2.17 图形用户界面I/O 48

2.18 小结 50

第3章 对象和类 52

3.1 介绍 52

3.2 模型和建模 52

3.3 对象 53

3.3.1 什么是对象 54

3.3.2 状态 55

3.3.3 行为 56

3.3.4 接口 57

3.3.6 对象类型 58

3.3.5 标识 58

3.4 类和实例 59

3.5.1 继承 61

3.5 描述类交互作用的关系 61

3.5.2 聚合 64

3.5.4 类图 65

3.5.3 关联 65

3.5.5 由语言支持的关系 66

3.6 小结 67

第4章 数组和字符串 68

4.1 一个数组应用程序和问题分析 68

4.2 Java中的数组 69

4.3 问题解决方案 72

4.4 引用类型的存储结构、赋值和等同性 74

4.5 字符串 77

4.6 StringBuffer类 79

4.7 小结 80

4.8 Java的新特性 80

第5章 数组算法及其分析 83

5.1 算法分析 83

5.1.1 时间复杂度分析 84

5.1.2 从实验角度比较时间复杂度 104

5.1.3 空间复杂度比较 104

5.2.1 线性搜索 105

5.2 查找 105

5.2.2 折半查找 107

5.3 排序 109

5.3.1 冒泡排序 109

5.3.2 归并排序 110

5.4 对象比较、接口以及对象类简介 115

5.5 数组字典 120

5.5.1 基本字典 120

5.5.2 基本关键字字典 129

5.6 小结 135

5.7 Java的新特性 135

第6章 抽象数据类型及其实现 137

6.1 简介 137

6.2 数据类型 137

6.3 抽象数据类型 139

6.3.1 简介 139

6.3.2 公理法 140

6.3.3 构建法 147

6.3.4 后置条件法 151

6.4 Java中的抽象数据类型及实现 154

6.4.1 Java中抽象数据类型的语法描述 155

6.4.2 Java中抽象数据类型的语义描述 156

6.4.3 Java中抽象数据类型的实现 161

6.5 断言检查和异常 164

6.6 类和类成员的可见性 173

6.7 契约式设计简介 175

6.8 小结 177

6.9 Java的新特性 178

第7章 列表基础 179

7.1 一个简单的列表应用程序 179

7.2 列表抽象数据类型 180

7.3 实现 184

7.3.1 数组的实现 184

7.3.2 链表实现 189

7.3.3 处理异常 196

7.4 链接操作实例 200

7.4.1 列表中的最大值 200

7.4.2 列表中某个特定值的位置 201

7.4.3 在一个值的前面插入另外一个值 202

7.4.4 toString()、equals()和clone()方法 203

7.5 有序简单列表 207

7.6 列表变量 215

7.6.1 尾指针 215

7.6.2 双向链表 216

7.6.3 带头结点的链表以及循环链表 218

7.7 小结 219

7.8 Java的新特性 219

第8章 高级列表概念和Uos数据结构库 220

8.1 列表工具 220

8.1.1 指针 220

8.1.2 迭代器 221

8.1.3 遍历器 231

8.2 字典和列表数据结构库 234

8.3.1 大学图书馆应用程序 246

8.3  应用 246

8.3.2 内存管理 258

8.4 多态列表和异质列表 264

8.5 小结 272

8.6 Java的新特性 273

第9章 堆栈 275

9.1 简介 276

9.2 堆栈ADT 276

9.3 实现 278

9.4 应用 283

9.4.1 括号匹配 283

9.4.2 Java动态模型 285

9.5 小结 293

第10章 递归 294

10.1 递归的数学定义 294

10.2 递归方法 295

10.3 开发和校验递归程序 298

10.4 简单递归程序的时间分析 301

10.5 递归列表方法 303

10.6 小结 312

10.7 Java的新特性 312

11.1.1 队列ADT 315

11.1 队列 315

第11章 队列和优先队列 315

11.1.2 实现 317

11.1.3 应用 321

11.2.1 优先队列ADT 322

11.2 优先队列 322

11.2.2 实现 324

11.3 应用:离散模拟 325

11.4 小结 345

11.5 Java的新特性 346

12.2 面向对象开发生命周期 347

12.1 简介 347

第12章 面向对象开发:一个实例 347

12.3 软件开发的责任人 348

12.4 一种面向对象的开发方法 349

12.5 一个简化的银行的实例 353

12.5.1 确定系统需求 353

12.5.2 确定系统边界 354

12.5.3 标识对象和类 359

12.5.4 标识类之间的交互和类的特征 362

12.5.5 把类分组成子系统 379

12.5.6 确定高层系统体系结构 381

12.5.7 发现更多类的细节并完成类的详细设计 384

12.5.8 为第一个工作原型写代码 390

12.5.10 给第一个工作原型优化代码并完成测试 409

12.5.9 从质量角度考虑重新检查系统 409

12.5.11 系统的输出样本 410

12.6 设计警告 413

12.7 无缝软件开发 415

12.8 对象模型的优点 416

12.9 小结 416

12.10 Java的新特性 417

13.1 介绍和应用 421

第13章 树 421

13.2 二叉树的抽象数据类型 425

13.3.1 实现 428

13.3 二叉树 428

13.3.2 遍历 435

13.3.3 二叉排序树 444

13.3.4 树的工具 455

13.3.5 Uos库中的二叉树数据结构 458

13.4 一般树 461

13.5.1 更好的字典 465

13.5 应用 465

13.5.2 语言、语法和分析 467

13.5.3 表达式求值 481

13.6 小结 482

14.2 静态系统结构建模 483

第14章 基本问题建模及系统设计 483

14.1 简介 483

14.2.1 生成上下文模型 484

14.2.2 如何发现类 485

14.2.3 使用关系描述类交互 493

14.2.4 子系统(包) 503

14.2.5 在系统设计中使用分层结构 508

14.3 系统行为建模 510

14.3.1 用户、参与者和用例 510

14.3.2 事件 511

14.3.3 时序图 512

14.3.4 协作图 514

14.4.1 确定系统需求 517

14.4 学生注册系统的分析和结构设计 517

14.4.2 确定系统边界 520

14.4.3 确定对象和类 525

14.4.4 确定类继承和特性 527

14.4.6 确定高层系统结构 533

14.4.5 将类组成子系统 533

14.5 小结 537

15.1 简介 544

第15章 软件设计的原则 544

15.2.1 回顾 545

15.2 契约式设计 545

15.2.2 客户-供应商契约 546

15.2.3 分包契约和继承 547

15.2.4 预处理设计 551

15.2.5 其他类型的断言支持 553

15.2.6 使用断言的目的 554

15.3 异常处理 555

15.3.1 异常处理的概念 555

15.3.2 基本的异常处理 557

15.3.3 预定义的异常类 564

15.3.4 定义并引发你自已的异常 566

15.3.5 异常处理的策略 568

15.3.6 继承对异常处理的影响 571

15.3.7 总结以及异常的指导原则 571

15.4 类设计 572

15.4.1 类生命周期 573

15.4.2 类的状态空间和行为 574

15.4.3 函数中的副作用 575

15.4.4 方法中有多少参数 576

15.4.5 保持类的简单性 577

15.4.6 处理异常情况:类的健壮性 578

15.5 建立继承分类 579

15.5.1 一些继承分类的概览 579

15.4.7 类级别的设计原则 579

15.5.2 继承与聚合 580

15.5.3 继承分类的一些特性 583

15.5.4 建立优秀继承分类的原则 585

15.6 面向对象软件的耦合和内聚 585

15.6.1 耦合 586

15.6.2 内聚 592

15.7 软件设计中使用模式 596

15.7.1 简介 596

15.7.2 回顾前面介绍的模式 599

15.7.3 体系结构模式 602

15.7.4 设计模式 604

15.8 子系统设计 609

15.8.1 耦合和内聚 610

15.8.2 子系统的边界类 610

15.9 一个学生注册系统的详细设计 611

15.10 小结 615

第16章 软件测试 617

16.1 软件测试基础 617

16.1.1 基本术语 617

16.1.2 测试的基本概念 618

16.1.3 确定测试用例 619

16.1.4 测试的层次 620

16.1.5 测试的心理 621

16.1.6 测试的原则 621

16.2 人工测试 622

16.2.1 代码阅读 622

16.2.2 结构化走查方式 622

16.3 黑盒测试 623

16.3.1 边界值测试 623

16.3.2 等价类测试 625

16.4 白盒(基于程序的)测试 629

16.5 面向对象的测试 633

16.5.1 测试面向对象软件中存在的问题 634

16.5.2 方法测试 635

16.5.3 测试递归方法 637

16.5.4 基于状态的类测试 638

16.5.5 继承对测试的影响 642

16.5.6 面向对象的集成测试 643

16.5.7 面向对象的系统测试 644

16.6 找出并修改动态错误 646

16.6.1 计划调试 646

16.6.2 强力调试 646

16.6.3 回溯调试 647

16.6.4 归纳调试 647

16.6.5 演绎调试 648

16.6.6 调试示例 649

16.7 小结 651

第17章 包、集合和词典 652

17.1 简介 652

17.2 位向量的实现 656

17.3 哈希表 658

17.3.1 简介 659

17.3.2 设计哈希函数 659

17.3.3 冲突解决技术 662

17.4 专用查找树 673

17.4.1 简介和动机 673

17.4.2 平衡二叉树 675

17.4.3 2-3树 687

17.4.4 高效率的数据结构 704

17.4.5 trie树 709

17.5 更好的优先队列 713

17.6 小结 713

18.1 简介 714

第18章 排序 714

18.2 复习基本排序算法 715

18.3 递归归并排序 715

18.4 快速排序 718

18.5.1 递归关系推导 721

18.5 使用递归关系表示时间要求 721

18.5.2 利用重复替换解决递归关系 727

18.5.3 解决分治递归关系 730

18.6 堆排序 735

18.7 基数排序 742

18.8 地址-计算排序 746

18.9 小结 749

第19章 图 750

19.1 图建模简介和示例 750

19.2 图论的基本定义 758

19.3 图的ADT 762

19.4 路径、可到达性和连通性 767

19.5 图的表示方法 771

19.5.1 邻接矩阵表示法 778

19.5.2 邻接表表示法 782

19.5.3 可查找的图 785

19.6 根据图的矩阵计算路径 787

19.6.1 使用矩阵乘法计算可到达性 788

19.6.2 有效的到达性算法 790

19.6.3 所有节点对最短路径算法 792

19.6.4 单源点最短路径算法 795

19.7 无向图遍历 800

19.7.1 广度优先搜索 801

19.7.2 深度优先搜索 805

19.8 应用 811

19.8.1 连通性和分量 811

19.8.2 展开树 813

19.8.3 拓扑排序 817

19.8.4 调度网络 820

19.8.5 测试中的图 824

19.9 小结 830

20.1 简介 831

第20章 文件 831

20.2.1 磁带 832

20.2 外存储设备 832

20.2.2 磁盘 833

20.3 定义和概念 836

20.4 Java中的永久存储支持 837

20.4.1 简介 837

20.4.2 基本的字节输入/输出 838

20.4.3 输入/输出流小结 840

20.4.4 对象序列化 843

20.4.5 随机访问文件 846

20.4.6 Java缓冲流概述 852

20.4.7 ObjectFileUos类 853

20.5.1 顺序文件的结构 858

20.5 顺序文件 858

20.5.2 处理顺序文件 861

20.6 直接文件 868

20.7 索引顺序文件 874

20.7.1 索引顺序文件表示法 874

20.7.2 索引顺序文件的实现 875

20.8 B-树文件 876

20.9 多关键字访问 880

20.10 小结 883

附录A Java附录 884

附录B Java数据结构库 1000

附录C 数学基础知识 1018