Java程序设计与数据结构导论
作者 : John Lewis Peter J. DePasquale;Joseph Chase;
译者 : 辛运帏 饶一梅
丛书名 : 计算机科学丛书
出版日期 : 2008-07-18
ISBN : 7-111-24177-5
定价 : 56.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 411
开本 : 16开
原书名 : Java Foundations: Introduction to Program Design & Data tructures
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书作者颇具匠心地将程序设计、数据结构等相关课程内容有机地包容在一本书中,解决了这两门专业基础课不能很好衔接的问题,可作为程序设计、数据结构等相关课程的教材。

本书特点
  ●全面介绍了程序设计基础、对象和数据结构,可作为Java程序设计相关课程的入门教材使用。
  ●先介绍控制结构和程序设计的基本语句,再介绍类的编写。
  ●代码示例丰富,既有就事论事而编写的小程序,也有较大的、易于理解的实用的示例。
  ●用单独一章全面介绍图形用户界面,包括一些有意思的图形示例。
  ●第11章“创建、测试和调试”的学习有助于读者构建大规模的程序。
  ●本书附赠光盘,光盘中除包括书中所有程序的源代码、Java软件开发工具包、各种Java开发环境外,还包括本书中文版的附录部分。

图书特色

图书前言

欢迎阅读本书。本书可作为导论性课程的教材,教学内容从最基本的程序设计概念到复杂数据结构的设计和实现,这种统一的教学方法能让这些重要的内容自成体系,并且更易让学生理解。
  我们借鉴了业界领先的教材《Java Software Solutions》中的最精华内容作为介绍资料,重新组织后作为本书大纲的有效补充。例如,我们没有将图形用户界面的内容分散在好几章中,而是将这些内容很好地组织在一章内。
  在后面的几章中,有关集合和数据结构的介绍基本上参照了《Java Software Structures》一书,但重新组织了相关资料,使得条理更清晰。这样,程序设计概念的介绍范围更全面、更集中,相互的衔接也更自然。
关于对象
  “对象”概念的引入时机,一直是由计算机教师自由掌握的,事实上导论性课程的教学不可能是相关知识的简单叠加。这里我们有机会说明我们的方法。
  首先,本书是纯面向对象的,所以采用了循序渐进的自然方式来介绍。在过程式程序设计方法中也存在的一些概念,如方法和它们的调用,我们使用的是面向对象的术语来讨论的。所以,没有由多个方法组成单个类的例子。事实上,在我们的例子中,包含main方法的类不再包含其他的方法。
  我们从一开始就使用对象这个术语,并且始终使用面向对象的术语来讨论所有的内容。在第1章中给出了面向对象概念的概述,并在本书中始终强化并充实这些概念。之后立即介绍了Java标准类库中的类,实例化了这些类中的对象,并使用了它们提供的各种服务。在前4章中,学生们学习编写的程序只由单个的类组成,并且其中只含有单一的main方法,不过这些程序在介绍如表达式和条件等这些程序设计的基本概念之外,都有效地使用了标准库中预定义的类和对象。
  在编写例子时完全没有使用第三方的类。那些方法的使用方式与标准类库中(总是可用)的类是有区别的,所以容易给学生带来疑惑,因此本书的作者没有选用这些内容。凡是例子中使用的非类库中的每个类都在本书中给出了全面介绍,不留下任何不可思议的隐晦的地方。
  要解决的问题仍然是:是在详细介绍如何编写类之前介绍控制结构的内容,还是把次序倒过来。事实是,哪种方法都有好处,教师可以使用任一种方式。如果先介绍类,就会先揭示对象的本质及它们的使用方法。但是,缺乏基本的控制结构的驾驭能力,此时的例子常常是无趣且没有实用意义的。本书先介绍控制结构,然后再介绍类的概念。第4章使用小的、单个的方法示例来介绍条件和循环的细节,为第5章多个类的示例打下坚实基础。
  各章安排
  第1章(绪论)介绍了Java程序设计语言和基本的程序开发过程。介绍了面向对象的开发方法,包括相关的概念和术语。这一章还介绍了帮助学生熟悉开发环境所适用的主要参考资料。
  第2章(数据和表达式)探讨了Java程序中使用的数据基本类型及执行计算时表达式的使用。讨论了数据类型之间的转换,及如何借助于Scanner类交互地从用户读入输入。
  第3章(类及对象的使用)探讨了预定义的类及由它们而创建的对象的使用。类和对象用来操作字符串、产生随机数、执行复杂的计算,及格式化的输出。讨论了包、枚举类型和包装类。
  第4章(条件和循环)介绍了用于判定的布尔表达式的使用。讨论了与条件及循环相关的所有语句,包括for循环的增强版本。为了分析并读入文本文件中的重复输入,再次讨论了Scanner类。
  第5章(编写类)探讨了与编写类及方法相关的基本问题。内容包括实例数据、可见性、作用域、方法参数及返回值类型。也涉及了构造方法、方法设计、静态数据和方法重载等内容。
  第6章(图形用户界面)全面研究了Java GUI处理,重点是组件、事件和监听器。使用许多GUI例子讨论了不同类的组件和事件。另外,也介绍了布局管理器、包含层次、边界、工具提示和助记符等内容。
  第7章(数组)涉及数组和数组的处理。内容包括边界检查、初值表、命令行参数、变长参数表和多维数组等。
  第8章(继承)讨论了类的派生及相关的概念,包括类层次、重写及可见性等。重点是强调在软件设计中继承的正确使用及它的作用是什么。
第9章(多态)探讨了绑定的概念,及它与多态的关系。之后研究了如何使用继承或接口完成多态引用。与多态相关的设计问题也在这一章内介绍。
  第10章(异常)介绍了异常处理及不捕获异常时的后果。探讨了try-catch语句,讨论了异常的传播。本章还介绍了处理输入输出时的异常使用,给出了一个写文本文件的例子。
  第11章(创建、测试和调试)详细介绍了Java包机制,介绍了辅助开发中、大规模程序的创建文件的使用。另外,本章讨论了通过JUnit进行测试、测试用例开发和单元测试的概念。也介绍了程序调试方面的内容。本章的例子创建了一个定制的邮件客户端,学生们可以对此有所扩展。
  第12章(递归)介绍了递归的概念、递归的实现和其正确的用法。讨论中精心选择了几个示例,包括迷宫遍历和经典的汉诺塔问题。
  第13章(查找与排序)探讨了线性查找和二分查找算法,还介绍了5个排序算法。本章还讨论了包括递归算法在内的算法复杂度分析技术。
  第14章(集合和链表)讨论了集合的用法,确定了接口与实现分离的重要性。本章介绍了泛型,详细介绍了它们在集合类中的作用。也介绍了动态实现、静态实现和动态链表的知识。
  第15章(栈和队列)介绍了两个经典的集合,讨论了它们的实现。在两个例子中,都是先从概念上介绍集合,然后把它们用作解决问题的工具,最后探讨数据结构。最后讨论了基于数组的实现和基于动态链表的实现。
  第16章(树)介绍了树的术语和相关概念。讨论了不同的实现策略,详细介绍了递归的链式的实现方法。还给出了一个二叉决策树的示例。
  第17章(查找树和堆)介绍了二叉查找树及其链式实现。也讨论了树的旋转算法。本章还探讨了堆和它们的实现。
  第18章(图)讨论了有向图和无向图。此外,还介绍了带权图、广度优先遍历和深度优先遍历之间的差别。介绍了最小生成树,讨论了它的实现策略。
  学生CD
  随书附带的CD包括以下内容:
  ·书中所有程序的源代码。
  ·Java软件开发工具包(SDK)。
  ·各种Java开发环境,包括NetBeansTM、EclipseTM、Dr.Java、jGRASPTM、JCreator液蚑extPadTM。
  教师资源
  下列补充材料只为老师提供。可以咨询如何得到下列这些资源。
  ·各章的PowerPoint格式的幻灯片。
  ·练习及程序设计项目的全部答案。
  ·功能强大的测验生成软件Test Bank—包括大量的自由回答题、多选题及判断题。
  ·配合书中讲授内容的相关实验资料。
  致谢
  感谢世界各地的教师和学生们给我们反馈意见,以让本书更加完善。欢迎您的任何意见和建议。
Addison-Wesley公司的工作团队的才干和付出总是让我们很吃惊。我们的编辑Michael Hirsch先生,总能把握出版的方向,我们非常感谢他的合作方式。他的助手Lindsey Triebel一直在帮助我们。市场部经理Michelle Brown让教师们了解本书的优点。Joyce Wells负责封面及内部的设计。Marilyn Lloyd负责出版。Addison-Wesley又受由Megan Schwenke领导的出色的Argosy Publishing所支持。我们的文稿编辑Bill McManus先生的慧眼和技术背景也让我们很吃惊。我们感谢为确保本书以最高标准面世而做出努力的所有人员。
  我们想要感谢世界各地数百位教授和学生为本书提供的原始资料。这些人太多了,恕我们不能一一列出他们的姓名,但你们为《Java Software Solutions》和《Java Software Structures》所提的所有建议,都体现在本书中了。
特别要感谢新泽西大学的Jason Snyder先生的测试代码和很多其他的帮助。Jason就要从事计算机教育方面的工作了,他未来的同事与他共事是非常幸运的,不过玩牌时可不要和他打对手。
  一些团体,如ACM Special Interest Group on Computer Science Education(SIGCSE)、Consortium for Computing Sciences in Colleges(CCSC)和Computer Science Teachers Association(CSTA),也提供了很出色的资源。他们的会议和网上的活动为远方的各类学校的教师提供了机会,让人们可以共享他们的思路和资料。如果你是一名计算机的教师,但还没有参加这些组织的话,那你错失了很多。
最后,感谢我们的家人对我们的支持和耐心。

封底文字

本书作者颇具匠心地将程序设计、数据结构等相关课程内容有机地包容在一本书中,解决了这两门专业基础课不能很好衔接的问题,可作为程序设计、数据结构等相关课程的教材。

本书特点
  ●全面介绍了程序设计基础、对象和数据结构,可作为Java程序设计相关课程的入门教材使用。
  ●先介绍控制结构和程序设计的基本语句,再介绍类的编写。
  ●代码示例丰富,既有就事论事而编写的小程序,也有较大的、易于理解的实用的示例。
  ●用单独一章全面介绍图形用户界面,包括一些有意思的图形示例。
  ●第11章“创建、测试和调试”的学习有助于读者构建大规模的程序。
  ●本书附赠光盘,光盘中除包括书中所有程序的源代码、Java软件开发工具包、各种Java开发环境外,还包括本书中文版的附录部分。

译者简介

辛运帏 饶一梅:暂无简介

译者序

我们非常高兴这次有机会翻译这本教材。这本书的内容非常丰富,篇幅也较多。作者在前言里也强调,如此多的内容,适合作为两到三个学期的教材使用。这样的内容安排,是作者深思熟虑之后的结果。实际上,高等学校计算机专业的课程体系中,很多课程是紧密联系的,但在讲授中,各位教师往往不能兼顾自己的讲授内容与其他课程的关系。这是由现行的教学体制所决定的。限于各种情况,学生们也不能主动地去思考本课与其他课程的衔接关系。本书在这方面做出了很好的尝试。作者颇具匠心地将两门甚至三门相关课程的内容包容在一本书中,各部分的内容既独立又相关。教师在讲授时可以兼顾前后内容的呼应,学生们也能领会知识点之间的关系,真正做到知识的融会贯通。
  具体来说,程序设计语言课程被安排为各高校计算机专业大学一年级新生的入门课程,数据结构多安排在二年级。这两门课程往往由不同的教师担任,这在一定程度上割裂了两者间的联系。作为它们之间的重要关联内容—面向对象的设计思路和方法,既没能在一年级学习语言的时候深入理解,也不能等到二年级学习数据结构课程时再去介绍。一年级的学生把学习重点放在了语言的语法上,此时他们缺乏编制较大例题的能力,教师也没有机会借助有具体背景的实际例子向他们介绍面向对象的编程技巧。这样的现状导致学生们在二年级学习数据结构时不知道如何运用面向对象的思想去解决相关的实际问题。本书作者对这样的难题给出了令人满意的解答。作者先详细介绍了Java语言的语法,在学生们掌握了基本编程能力之后,重点介绍类及对象的知识,这些内容不局限于Java语言,而是一般的面向对象编程语言都具备的。这些内容的介绍是充分的,对学生们来说是非常必要的,也正是我们目前在程序设计课程所欠缺的。同时,作者使用Java语言作为实现面向对象思想的工具,使学生们自然而然地提高了驾驭Java语言的能力。之后,作者使用一个实际的例子,全面详细地向学生介绍如何编写、调试一个程序。这个环节是体现本书实践性的一个典型代表。作者还使用数据结构中的内容作为问题导引,在向学生介绍经典算法的同时,也全面介绍了如何用前面学到的技能来解决实际问题。
  本书不同于国内很多教材的另一个特色是,它是一本资源性的教材。本书是关于Java语言的,在介绍语言本身的同时,也全面介绍了学习这个语言重要的相关资料,包括下载资料的网站、调试工具的使用、编写程序用到的测试知识等。特别是书后的附录内容,相信对教师和学生都非常有用。
  本书还提供了大量的代码,这些代码对学生们理解课程内容非常有益。每章后面列出的各类习题可以检验学生的学习效果。
  在此,译者非常感谢机械工业出版社华章分社给我们提供了这个翻译机会。我们不仅学习了作者的编写思想,更见识了作者的敬业精神。书中反映出的作者的认真态度,使我们在翻译过程中不敢有丝毫的懈怠。也非常感谢各位编辑们。正是他们的认真工作,才让本书顺利地和读者见面。
  虽然我们在翻译时非常认真努力,期望呈现给读者的译本能准确地反映原作思想,但限于译者的水平,很多地方并不能完全体现作者的隐意,翻译过程中更是难免会有错误之处,敬请广大读者批评指正。您的任何意见和建议都是我们进一步完善本书的动力。
  再次感谢您选择了本书。
  译者
  2008年1月
  于南开园

图书目录

出版者的话
译者序
前言
第1章  绪论 1
1.1  Java程序设计语言 1
1.1.1  Java程序 2
1.1.2  注释 3
1.1.3  标识符和保留字 4
1.1.4  空白 5
1.2  程序开发 6
1.2.1  程序语言等级 7
1.2.2  编辑器、编译程序和解释程序 8
1.2.3  开发环境 9
1.2.4  语法和语义 9
1.2.5  错误 10
1.3  问题求解 11
1.4  软件开发活动 11
1.5  面向对象程序设计 12
知识点摘要 14
习题 15
第2章  数据和表达式 18
2.1  字符串 18
2.1.1  print及println方法 18
2.1.2  字符串连接 19
2.1.3  转义字符 21
2.2  变量和赋值 22
2.2.1  变量 22
2.2.2  赋值语句 23
2.2.3  常量 24
2.3  基本数据类型 25
2.3.1  整型和浮点型 25
2.3.2  字符类型 26
2.3.3  boolean类型 27
2.4  表达式 27
2.4.1  数学运算符 27
2.4.2  运算符优先级 28
2.4.3  增量及减量运算符 30
2.4.4  赋值运算符 31
2.5  数据转换 31
2.6  读输入数据 33
知识点摘要 36
习题 36
第3章  类及对象的使用 41
3.1  创建对象 41
3.2  String类 43
3.3  包 45
3.4  Random类 47
3.5  Math类 49
3.6  格式化输出 51
3.6.1  NumberFormat类 51
3.6.2  DecimalFormat类 52
3.6.3  printf方法 53
3.7  枚举类型 54
3.8  包装类 55
知识点摘要 56
习题 57
第4章  条件和循环 61
4.1  布尔表达式 61
4.1.1  相等及关系运算符 62
4.1.2  逻辑运算符 62
4.2  if语句 63
4.2.1  if-else语句 65
4.2.2  使用块语句 66
4.2.3  条件运算符 68
4.2.4  嵌套的if语句 69
4.3  数据比较 70
4.3.1  浮点数比较 70
4.3.2  字符比较 70
4.3.3  对象比较 71
4.4  switch语句 72
4.5  while语句 74
4.5.1  无限循环 77
4.5.2  嵌套的循环 77
4.5.3  其他的循环控制 80
4.6  迭代器 80
4.7  do语句 82
4.8  for语句 84
4.8.1  迭代器和for循环 86
4.8.2  循环语句的比较 87
知识点摘要 87
习题 87
第5章  编写类 93
5.1  再谈类和对象 93
5.1.1  类和对象的确定 94
5.1.2  分配职责 95
5.2  类的剖析 95
5.2.1  实例数据 98
5.2.2  UML类图 99
5.3  封装 100
5.3.1  可见性修饰符 100
5.3.2  访问方法和修改方法 101
5.4  方法的剖析 104
5.4.1  return语句 108
5.4.2  参数 108
5.4.3  局部数据 109
5.4.4  再次讨论构造方法 110
5.5  静态类成员 110
5.5.1  静态变量 110
5.5.2  静态方法 110
5.6  类关系 112
5.6.1  依赖 112
5.6.2  同一个类中各对象之间的依赖 113
5.6.3  聚合 117
5.6.4  this引用 117
5.7  方法设计 118
5.7.1  方法分解 118
5.7.2  再次讨论方法参数 121
5.8  方法重载 124
知识点摘要 126
习题 126
第6章  图形用户界面 132
6.1  GUI元素 132
6.1.1  框架和面板 134
6.1.2  按钮和动作事件 135
6.1.3  判定事件源 136
6.2  更多的组件 138
6.2.1  文本域 138
6.2.2  复选框 140
6.2.3  单选按钮 142
6.2.4  滑动条 145
6.2.5  组合框 148
6.2.6  计时器 151
6.3  布局管理器 153
6.3.1  流布局管理器 155
6.3.2  边界布局管理器 157
6.3.3  网格布局管理器 159
6.3.4  盒子布局管理器 160
6.3.5  包含层次 162
6.4  鼠标和键盘事件 162
6.4.1  鼠标事件 162
6.4.2  键盘事件 167
6.4.3  继承适配器类 170
6.5  对话框 170
6.5.1  文件选择器 172
6.5.2  颜色选择器 173
6.6  一些重要细节 174
6.6.1  边界 174
6.6.2  工具提示和助记符 177
6.7  GUI设计 180
知识点摘要 181
习题 181
第7章  数组 186
7.1  数组元素 186
7.2  数组的声明及使用 187
7.2.1  边界检查 188
7.2.2  两种数组语法 191
7.2.3  初值表 191
7.2.4  数组作为参数 192
7.3  对象数组 193
7.4  命令行参数 199
7.5  变长参数表 199
7.6  二维数组 202
知识点摘要 205
习题 205
第8章  继承 209
8.1  创建子类 209
8.1.1  protected修饰符 212
8.1.2  super引用 213
8.1.3  多重继承 215
8.2  方法覆盖 215
8.3  类层次 217
8.3.1  Object类 218
8.3.2  抽象类 219
8.4  可见性 220
8.5  设计继承 221
知识点摘要 222
习题 223
第9章  多态 226
9.1  后绑定 226
9.2  通过继承实现多态 227
9.3  接口 234
9.3.1  接口层次 237
9.3.2  Comparable接口 237
9.3.3  Iterator接口 238
9.4  通过接口实现多态 238
知识点摘要 240
习题 240
第10章  异常 243
10.1  异常处理 243
10.2  不捕获异常 244
10.3  try-catch语句 244
10.4  异常传播 247
10.5  异常类层次 249
10.6  I/O异常 251
知识点摘要 253
习题 253
第11章  创建、测试和调试 256
11.1  创建大型应用程序:JFMail 256
11.2  包 258
11.2.1  通过包来组织代码 258
11.2.2  创建自己的包 258
11.2.3  使用CLASSPATH 259
11.2.4  Java存档(Jar)文件 261
11.2.5  使用其他开发人员的包 262
11.3  建立Java工程 263
11.3.1  IDE和Classpath 263
11.3.2  创建工具和Ant 263
11.4  测试 265
11.4.1  审核 266
11.4.2  缺陷测试 266
11.4.3  单元测试 267
11.4.4  集成测试 267
11.4.5  系统测试 267
11.4.6  JUnit 268
11.4.7  JUnit的进一步讨论 271
11.4.8  测试驱动的开发 273
11.4.9  关于测试及JFMail的最后注释 273
11.5  调试 274
11.5.1  使用print语句进行简单调试 274
11.5.2  调试概念 274
11.5.3  Java调试程序(JDB) 275
11.5.4  调试JFMail程序 277
11.5.5  基于GUI的调试程序 279
知识点摘要 279
习题 280
第12章  递归 282
12.1  递归思想 282
12.1.1  无穷递归 283
12.1.2  数学中的递归 283
12.2  递归程序设计 283
12.2.1  递归与迭代 285
12.2.2  直接递归与间接递归 285
12.3  使用递归 286
12.3.1  走迷宫 286
12.3.2  汉诺塔 289
知识点摘要 292
习题 292
第13章  查找与排序 295
13.1  查找 295
13.1.1  线性查找 297
13.1.2  二分查找 298
13.2  排序 300
13.2.1  选择排序 303
13.2.2  插入排序 304
13.2.3  起泡排序 305
13.2.4  快速排序 305
13.2.5  归并排序 306
13.3  算法分析 308
13.3.1  增长函数和大O()符号 308
13.3.2  比较增长函数 309
13.3.3  分析循环的执行 310
13.3.4  分析递归程序 310
13.4  分析查找及排序算法 311
13.4.1  比较查找算法 311
13.4.2  比较排序算法 312
知识点摘要 313
习题 314
第14章  集合和链表 317
14.1  集合简介 317
14.1.1  独立于实现的接口 317
14.1.2  Java Collections API 318
14.1.3  泛型 318
14.2  包集合 319
14.3  使用数组实现包 322
14.4  链表 327
14.4.1  链表的管理 328
14.4.2 没有链的元素 330
14.5  包的链式实现 330
知识点摘要 333
习题 334
第15章  栈和队列 337
15.1  栈 337
15.2  计算后缀表达式 338
15.3  使用数组实现栈 343
15.4  使用链表实现栈 345
15.5  java.util.Stack类 347
15.6  队列 347
15.7  基数排序 349
15.8  使用数组实现队列 351
15.9  使用循环数组实现队列 354
15.10  使用链表实现队列 357
15.11  栈与队列实现的分析 359
知识点摘要 359
习题 360
第16章  树 364
16.1  树 364
16.2  树的遍历 365
16.2.1  先序遍历 366
16.2.2  中序遍历 366
16.2.3  后序遍历 367
16.2.4  层序遍历 367
16.3  树的实现策略 368
16.3.1  在数组中计算链 368
16.3.2  在数组中保存链 368
16.3.3  链式结点 368
16.4  二叉树实现 369
16.5  决策树 375
知识点摘要 377
习题 378
第17章  查找树和堆 381
17.1  二叉查找树 381
17.1.1  在二叉查找树中添加元素 382
17.1.2  从二叉查找树中删除元素 382
17.2  二叉查找树的实现 384
17.3  平衡的二叉查找树 388
17.3.1  右旋转 389
17.3.2  左旋转 389
17.3.3  右-左旋转 389
17.3.4  左-右旋转 390
17.4  堆 390
17.4.1  向堆中添加元素 391
17.4.2  从堆中删除最大元素 391
17.5  堆的实现 392
17.6  堆排序 396
知识点摘要 397
习题 397
第18章  图 401
18.1  无向图 401
18.2  有向图 402
18.3  带权图 402
18.4  常用的图算法 403
18.4.1  遍历 403
18.4.2  测试连通性 406
18.4.3  最小生成树 406
18.4.4  判定最短路径 408
18.5  图的实现策略 408
18.5.1  邻接表 408
18.5.2  邻接矩阵 409
知识点摘要 410
习题 410
附录

教学资源推荐
作者: [美] 凯·霍斯特曼(Cay Horstmann) 著
作者: [美] 卢博米尔·佩尔科维奇(Ljubomir Perkovic) 著
作者: [美] 罗伯特·塞奇威克(Robert Sedgewick) 凯文·韦恩(Kevin Wayne) 罗伯特·唐德罗(Robert Dondero) 著
作者: [美] 陆永祥(Yung-Hsiang Lu) 著
参考读物推荐
作者: 小象学院 杨磊 著
作者: 黄灯桥 徐会生 著
作者: 程墨 编著
作者: [美]凯·S.霍斯特曼(Cay S. Horstmann) 著