Java程序设计教程
作者 : Stuart Reges;Marty Stepp
译者 : 陈志
丛书名 : 计算机科学丛书
出版日期 : 2008-09-12
ISBN : 7-111-24661-9
定价 : 85.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 655
开本 : 16开
原书名 : Building Java Programs: A Back to Basics Approach
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

培养算法思维和问题解决能力
  这本书的内容翔实、条理清晰,非常适合大学一年级新生和Java初学者??很显然,作者本身就在教授这门课程,而且了解学生的问题所在。
  ——Eric Matson, 莱特州立大学

  作者从基础开始介绍Java程序设计的方法,给人耳目一新的感觉。本书交谈式的叙述风格和对基础知识的详细介绍深深吸引了我的很多学生,他们认为这比开始就介绍艰深的面向对象内容的那些教材更容易接受。而且我也发现层层推进和强调逻辑解决问题的方法,都让这个计算机专业的第一门程序设计课更有针对性。
  ——Mike Scott ,得克萨斯大学奥斯汀分校

  如果学生在学习基本编程技术的同时还需要学习如何定义对象,他们普遍会感到十分吃力。在本书中,作者向初学者介绍了最基本的程序结构和Java语言中常见的错误,贯彻先使用对象后定义对象的理念,强调先介绍面向过程的程序设计方法,再讲述面向对象的程序设计方法。通过培养算法思维和解决问题的能力来提高学生程序设计的能力。  

  本书特点
  先使用对象再定义对象:学生可以先集中精力掌握面向过程的程序设计技术,并很快写出一些有趣的程序。
  解决问题:从实际问题引入新概念,着重介绍新概念如何解决这个问题、并介绍相关的常见错误以及常见用法。
  强调算法思维:将一个大问题分解为若干个小问题,用伪代码逐步细化解决问题的算法,并努力以算法的方式去描述问题。
  层层推进:一步一步地引入新概念,确保学生能够掌握每一步所介绍的内容。
案例分析:每章的最后都安排一个案例分析,让学生可以了解如何分阶段开发并测试一个复杂的程序

图书特色

图书前言

本书是为计算机专业第一门程序设计课程而编写的一本教材,同样适用于非计算机专业学生学习程序设计。书中所使用的内容经过了2年半的实际教学检验,在此期间上千名华盛顿大学的本科生(大多数不是计算机专业的学生)使用了这本教材。
  一直以来,很多学校计算机专业的第一门程序设计课程都是新生的梦魇。但是道格拉斯·亚当斯在《银河系漫游指南》中告诉大家“不要惊慌”。学生可以逐步掌握课程讲授的内容。
  很多教师尝试了不同的方法来讲授入门课程。最典型的尝试包括“尽早介绍对象”这种方法。但我们感觉这些尝试的最终效果往往不尽如人意。尽管优等生掌握的效果不错,但更多的中等学生都在吃力地应付对象的概念。
  本书采用了“从基础开始”的方法,强调应该先介绍面向过程的程序设计方法。实际的教学经验告诉我们,通过学习面向过程的方法,大多数学生可以更好地掌握程序设计的技能。一旦学生打下了牢固的编程基础,就可以转而学习面向对象的程序设计方法。所以,到课程结束时,学生可以掌握这两种程序设计方法。
下面列出了本书的一些主要特色:
  @先使用对象。Java本身提供了很多功能强大的对象。通过使用这些对象,学生采用传统的面向过程的程序设计技术也能写出很多有趣的程序。尽可能早而且尽可能多地使用这些对象有利于学生们在后面学习如何设计并创建对象。
后定义对象。如果让学生在学习基本的程序设计技巧的同时学习如何定义对象,他们往往会感觉难以消化吸收如此多的内容。我们将这两部分内容分开,先讲授编程的基本知识,然后再讲授如何定义对象。
关注如何解决问题。很多教材将重点放在程序设计语言的各个语法细节上,而我们更关注如何用程序解决问题。如,语言的一种新的功能可以帮助我们解决哪些新的问题?初学者容易犯的错误有哪些?这种新功能的最典型用法是什么?
强调算法思维。在使用面向过程的方法来解决问题时,我们强调如何通过使用算法来解决问题:将一个大问题分解为若干个小问题,用伪代码逐步细化解决问题的算法,并努力以算法的方式去描述问题。
层层推进。采用Java语言编写程序需要同时涉及很多概念,学生不可能在一夜之间就掌握所有这些概念。教授初学者学习Java语言就好像搭积木一样,每一块都要小心翼翼地放置。如果一次放置的积木太多,反而会带来倒塌的危险。我们一步步地引入新概念,确保学生能够掌握每一步所介绍的内容。
全面介绍Java 5的特性。本书介绍的内容以Java 5为基础,全面介绍了这一版引入的一些新特性,例如,Scanner类、泛型、for-each循环、装箱和拆箱等。Java 6是对Java 5的补充和升级,并不会影响本书所介绍的内容,本书的内容与Java 6完全兼容。
案例分析。我们在每章的最后都安排了一个案例分析。通过这部分内容,学生可以了解如何分阶段开发并测试一个复杂的程序。而且我们可以用相对完整的程序代码来具体展示这一章所介绍的新的编程概念,这是书中那些短的代码示例所不能做到的。
补充了绘图内容。我们提供了一个自定义的DrawingPanel类,通过它可以使用Java中丰富的绘图功能。很多学生对输出复杂图形很感兴趣,但本书只将这一部分作为选学内容。
本书的组织结构和各章之间的依赖关系
很多计算机系的入门教材都是面向语言特性来进行介绍,但是我们这本书的前半部分采用了逐层推进的方式。例如,Java语言中有很多控制结构(例如,for循环、while循环、if/else语句),很多教材都把这些内容放到一章进行介绍。当然,这对于了解程序设计的人来说很正常,但对于初学者来说就会感觉很吃力。我们发现将这些控制结构分散到不同章节去介绍的效果很好,这样学生一次只需要专心学习一个内容,而不必一次将所有内容都塞进脑袋中。
下表给出了本书前6章内容之间的顺序关系
章节 控制流程 数据 编程技术 输入/输出
1 方法 String源文本 过程分解 println
2 确定循环(for) 变量,表达式int,double 局部变量、类常量、伪代码 print
3 返回值 使用对象 参数 控制台输入
输出图形(选学)
4 条件执行(if/else) char 前提/后置条件抛出异常 printf
5 不确定循环(while) boolean 断言、程序健壮性
6 Scanner 基于标记的处理 文件输入/输出
基于行的处理
下图是本书各章之间的依赖关系:
应该按照顺序学习本书的前1到6章,从第7章开始可以选择自己感兴趣的内容。
第6章专门讲述文件处理的内容,但是很多Java入门课程都去掉了这部分内容。最主要的原因还是在Java 5之前,用Java程序来处理文件是件很复杂的事情。自从Java 5引入了Scanner类,我们认为入门课程也完全可以把这部分内容包括在内。这样我们就有能力解决一些涉及到大量数据的程序。即便如此,很多教师也不愿意在这个主题上花费太多时间,所以我们将第6章的后半部分也设定为选学部分。
补充材料
我们为教师和学生准备了丰富的补充材料。附录A中提供了自测题的答案。学生还可以登录网站www.aw-bc.com/cssupport获得:
书中出现的源码。
案例分析中使用的数据文件和完整的程序代码。
第3章补充内容中介绍的用于绘制图形的DrawingPanel类。
除此之外,书中的源码和很多Java开发环境,可登录本书的配套网站下载。经过确认采用本书作为教材的教师还可以获得以下资源:
PowerPoint课件
练习题和编程题目的答案
考试样卷
实验手册
补充编程习题(包括答案要点)
要获取这些教师资源,请按书后教学支持申请表中的联系方式联络培生教育出版集团北京代表处。
本书特点
术语定义
书中突出强调了所有重要的术语或概念,便于读者快速参考。
“你知道吗?”
这部分提供了与书中介绍的主题或概念相关的背景知识或趣闻轶事。
“常见编程错误”
这部分提供了一些初学者常犯的错误。
代码
书中提供了大量代码,并且将代码中关键之处用高亮方式显示。代码中的保留字采用了不同的颜色。语法模板中的占位符放在一对尖括号内,而且用灰色高亮显示。
伪代码
书中的伪代码采用了与普通代码不同的字体。
“拇指向下”错误代码图标
有些情况下,书中给出一些有缺陷或错误的代码来说明程序设计中常见的问题或错误。凡带有“拇指向下”标记的代码都含有某些缺陷或错误。
本章小结
每章的最后都给出了一个包含该章主要概念和内容的简单总结。
自测题
每章最后包含了一组自测题,用于检查读者对每一节重点内容的掌握情况。我们在本书的附录A中提供了自测题的答案。
练习题
这部分提供了一些难度适中的练习题,这些题目要求读者必须对本章内容有深入的了解。除此之外,还要进行一些计算、分析并编写代码。教师可以获得这部分习题的答案。
编程练习题
这一部分要求读者设计并编写实际的Java程序。这些题目难度不一,但总的来说,比练习题的难度要大。教师可以获得这部分习题的参考答案。
致谢
首先,我们要感谢选过这门课程的学生和助教,他们为这本书的初稿提出了很多修改意见。没有他们的积极反馈就没有今天这本书。我们要特别感谢Helene Martin,他仔细阅读了本书的初稿并指出了书中存在的一些错误。
其次,我们要感谢华盛顿大学计算机科学与工程系的同事。学术委员会给了我们筹备和讲授这门课程的机会。我们要特别感谢Hank Levy(现任主席),David Notkin(前任主席)和Richard Anderson(负责教学的副主席)对我们的全力支持。我们还要感谢Steve Gribble和Carl Ebeling,他们最早在教学中使用了这本书,并给我们提供了有价值的反馈信息。
第三,我们要感谢参与了本书修订工作的同行,正是在他们的帮助下,我们才能够将最初的一份课件变为今天这样一本完整的教材:
Delroy A. Brinkerhoff,韦伯州立大学;Ed Brunjes,Miramar社团学院;Tom Cortina,卡内基-梅隆大学;H.E. Dunsmore,普度大学;Mary Anne Egan,Siena学院;Ahmad Ghafarian,北佐治亚学院和州立大学;Raj Gill,Anne Arundel社团学院;Michael Hostetler,Park大学;David Hovemeyer,宾夕法尼亚约克学院;Chenglie Hu,卡罗学院;Philip Isenhour,弗吉尼亚工学院;Andree Jacobson,新墨西哥大学;David C. Kamper Sr. ,东北伊利诺伊大学;Simon G.M. Koo,圣地亚哥大学;Evan Korth,纽约大学;Joan Krone,Denison大学;Eric Matson,莱特州立大学;Kathryn S. McKinley,得克萨斯大学奥斯汀分校;Jerry Mead,巴科内尔大学;George Medelinskas,北Essex社团学院;John Neitzke,Truman州立大学;Richard E. Pattis,卡内基-梅隆大学;Frederick Pratter,东俄勒冈大学;Roger Priebe,得克萨斯大学奥斯汀分校;Dehu Qi,拉摩尔大学;Amala V S Rajan,Middlesex大学;Mike Scott,得克萨斯大学奥斯汀分校;Tom Stokke,北达科塔大学;Leigh Ann Sudol,Fox Lane高等学校;Ronald F. Taylor,莱特州立大学;Scott Thede,DePauw大学;Megan Thomas,加州州立大学Stanislaus分校;Jeannie Turner,Sayre学校;Tammy VanDeGrift,波特兰大学;Thomas John VanDrunen,Wheaton学院;Neal R. Wagner,得克萨斯大学圣安东尼奥分校;Jiangping Wang,韦伯斯特大学;Yang Wang,密苏里州立大学;Stephen Weiss,北卡罗来纳大学坎斐尔分校;Laurie Werner,迈阿密大学;Dianna Xu,Bryn Mawr学院;Carol Zander,华盛顿大学Bothell分校。
我们还要感谢本书的编辑Rachel Head,以及Argosy出版社的其他工作人员,包括Nancy Kotary和Kathleen Kenny。
最后,我们要感谢Addison-Wesley的工作人员,他们在过去两年中确保了本书能够最终完成:感谢Michelle Brown传授给我们很多表达方面的技巧,感谢Jeff Holcomb为本书完成了封面设计,感谢Maurene Goo帮助我们处理了很多细节工作,感谢Patty Mahtani把所有内容整理成册,最后要特别感谢本书的编辑Matt Goldstein从第一天开始就给予我们的支持和信任。没有这些人的帮助就不会有这本书。

封底文字

培养算法思维和问题解决能力
  这本书的内容翔实、条理清晰,非常适合大学一年级新生和Java初学者??很显然,作者本身就在教授这门课程,而且了解学生的问题所在。
  ——Eric Matson, 莱特州立大学

  作者从基础开始介绍Java程序设计的方法,给人耳目一新的感觉。本书交谈式的叙述风格和对基础知识的详细介绍深深吸引了我的很多学生,他们认为这比开始就介绍艰深的面向对象内容的那些教材更容易接受。而且我也发现层层推进和强调逻辑解决问题的方法,都让这个计算机专业的第一门程序设计课更有针对性。
  ——Mike Scott ,得克萨斯大学奥斯汀分校

  如果学生在学习基本编程技术的同时还需要学习如何定义对象,他们普遍会感到十分吃力。在本书中,作者向初学者介绍了最基本的程序结构和Java语言中常见的错误,贯彻先使用对象后定义对象的理念,强调先介绍面向过程的程序设计方法,再讲述面向对象的程序设计方法。通过培养算法思维和解决问题的能力来提高学生程序设计的能力。  

  本书特点
  先使用对象再定义对象:学生可以先集中精力掌握面向过程的程序设计技术,并很快写出一些有趣的程序。
  解决问题:从实际问题引入新概念,着重介绍新概念如何解决这个问题、并介绍相关的常见错误以及常见用法。
  强调算法思维:将一个大问题分解为若干个小问题,用伪代码逐步细化解决问题的算法,并努力以算法的方式去描述问题。
  层层推进:一步一步地引入新概念,确保学生能够掌握每一步所介绍的内容。
案例分析:每章的最后都安排一个案例分析,让学生可以了解如何分阶段开发并测试一个复杂的程序

译者简介

陈志:暂无简介

译者序

程序设计是计算机专业的入门课也是必修课。从20世纪40年代计算机诞生以来,程序设计方法先后经历几代发展,从结构化程序设计发展到如今的面向对象程序设计。Java语言凭借完全面向对象的特性,及其特有的跨平台特性和强大的类库支持,逐渐成为程序设计课程的首选语言。但不可忽视的是,Java语言中引入了很多新概念,如对象、类等,对于基础比较薄弱的初学者而言,掌握这部分内容有一定困难。因此,如何能让学生顺利掌握面向对象的程序设计方法并设计程序解决实际问题,就成为教学的难点。
  本书的作者以自己的实际教学经验为依据,创新地采用了“从基础开始”、“从学习面向过程的程序设计开始”的方法,将程序设计的基本知识与面向对象程序设计方法划分为两个阶段并分别进行介绍。当读者具备了扎实的编程基础之后,再学习相对复杂的面向对象程序设计。对初学者来说,这种方式有效地分散了重点和难点,避免了因内容的难度过大而影响教学效果。而且本书在讲授基本编程知识的过程中充分利用了Java语言本身提供的类库支持,使学生在学习过程中可以利用这些预置功能编写出具有实际意义的程序,这也会增加学生学习的乐趣与成就感。总之,“先学习使用对象,再学习定义对象”是本书在安排和组织内容上的一大特色。
  本书的第1~5章由李静翻译,第6~11章和附录由陈志翻译,第12~14章由何亮翻译,并由陈志负责全书翻译的组织工作。由于译者的专业水平和时间的双重限制,错误和不妥之处诚恳地希望读者批评指正。
  本书可以作为计算机专业程序设计课程的教材,也可以作为学习Java语言的入门读物。对于软件工程师、系统集成工程师以及应用和维护等相关人员来说,也不失为一本好的参考读物。


  译  者
  2008年春于南开大学

图书目录

出版者的话
译者序
前言

第1章  Java编程简介 1
1.1  计算的基本概念 1
1.2  现在开始介绍Java 7
1.3  程序中的错误 15
1.4  过程分解 18
1.5  案例分析:输出图形 27
第2章  基本数据类型和确定循环 40
2.1  数据的基本概念 40
2.2  变量 47
2.3  for循环 57
2.4  复杂性管理 64
2.5  案例分析:输出复杂的图形 71
第3章  参数和对象导论 86
3.1  参数 86
3.2  具有返回值的方法 95
3.3  使用对象 100
3.4  交互式程序 112
3.5  案例分析:抛物线轨迹 115
第3章补充  图形(选学) 129
3G.1  图形简介 129
3G.2  图形处理中的过程分解 137
3G.3  案例分析:金字塔 141
第4章  条件执行 149
4.1  循环技术 149
4.2  if/else语句 152
4.3  一些与条件执行相关的问题 161
4.4  文本处理 169
4.5  条件执行的方法 175
4.6  案例分析:计算健康指数 181
第5章  程序逻辑和不确定循环 197
5.1  while循环 197
5.2  布尔类型 203
5.3  用户错误 213
5.4  不确定循环的几种变体 216
5.5  断言和程序逻辑 220
5.6  案例分析:猜数字 226
第6章  文件处理 245
6.1  读取文件的基本方法 245
6.2  基于标记的文件处理 250
6.3  基于行的处理 259
6.4  高级文件处理 263
6.5  案例分析:计算加权平均分(GPA) 270
第7章  数组 280
7.1  数组的基本概念 280
7.2  数组遍历算法 297
7.3  高级数组技巧 305
7.4  多维数组(选学) 310
7.5  案例分析:统计工作时间 315
第8章  类 329
8.1  面向对象程序设计的基本概念 329
8.2  对象的状态:数据成员 331
8.3  对象的行为:方法 333
8.4  对象的初始化:构造函数 338
8.5  封装 341
8.6  更多实例方法 346
8.7  this关键字 354
8.8  更多类 358
8.9  案例分析: 设计一个表示股票信息
的类 364
第9章  继承和接口 378
9.1  继承的基本概念 378
9.2  多态机制 386
9.3  与父类交互 390
9.4  继承和设计 396
9.5  接口 400
9.6  案例分析: 设计一组具有层次关系的
金融类 405
第10章  ArrayList 423
10.1  ArrayList 423
10.2  Comparable接口 436
10.3  案例分析:词汇表比较 443
第11章  Java的集合框架 458
11.1  列表 458
11.2  数学集合 468
11.3  映射 474
第12章  递归 486
12.1  递归的思想 486
12.2  一个更好的递归实例 491
12.3  递归函数 498
12.4  递归图形(选学) 507
12.5  案例分析:求解前序表达式 510
第13章  查找与排序 520
13.1  Java类库中的查找与排序 520
13.2  程序的效率 527
13.3  查找算法的实现 533
13.4  案例分析:归并排序算法的实现 541
第14章  图形用户界面 552
14.1  GUI基础 552
14.2  布局组件 562
14.3  组件间交互 568
14.4  其他组件与事件 575
14.5  2D 图形 582
14.6  案例分析:实现DrawingPanel 587
附录A  自测题答案 597
附录B  Java总结 643
附录C  Javadoc注释和Java API规范 652

教学资源推荐
作者: [美] 托尼·加迪斯(Tony Gaddis) 著
作者: (美)Steven S.Muchnick
作者: 秦维佳 侯春光 孟艳红 伞宏力
参考读物推荐
作者: 李俊阳 杜承垚 胡雪婷 卢力 编著
作者: Andrew Koenig;Barbara E. Moo
作者: Jesus Castagnetto
作者: [美]马特·利博维茨(Matt Liebowitz) 克里斯托弗·库塞克(Christopher Kusek) 吕南德特·施皮斯(Rynardt Spies) 著