目录 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