《Java程式设计:一种多媒体方法》是2007年清华大学出版社出版的图书,作者是Mark Guzdial。
基本介绍
- 书名:Java程式设计:一种多媒体方法
- 作者:Mark Guzdial
- 译者:柳西玲
- ISBN:9787302162957
- 类别:编程设计
- 页数:459
- 定价:¥59.00元
- 出版社:清华大学出版社
- 出版时间:2007-11-1
- 装帧:平装
图书简介
本书不同于一般介绍编程书籍,其特点是,它从激发学生学习编程的兴趣出发,让学生处理自己的图片、声音,製作自己的网页、动画,使他们觉得编程是一件既有意义又有趣味的事情。它选择的开发环境DrJava简单易用,让学生可以把精力集中到程式开发,而不是学习使用开发环境。本书的另一个特点是,它在内容顺序上不同于一般的编程书籍。它在向学生介绍新概念时,都是在特写的背景下,在学生意识到概念的用途和意义时才推出,这样做,避免了抽象概念给学生带来的困惑,增加了学生的学习兴趣和实际套用能力。书中案例丰富,内容生动,覆盖了Java的基础知识及图片、声音、视频等多媒体处理技术。 本书共分为6个部分,第1部分(前3章)介绍编程和Java的基础知识;第2部分(第4~7章)介绍怎样处理图片;第3部分(第8~11章)介绍如何处理声音;第4部分(第12、13章)介绍文本处理和网页製作;第5部分(第14章)介绍製作动画和电影;第6部分(第15、16章)介绍算法对编程的影响及JavaScript——一种嵌于网页内的脚本语言。教师和学生可以根据需要进行取捨,灵活选择教学和学习内容。每章末尾都提供了练习题,便于学生巩固複习本章知识。还为有兴趣的学生提供了进一步学习的指南。
本书的翻译工作由清华大学计算机系知识工程研究室的老师完成。本研究室是国内最早致力于Java语言的研究与套用开发的单位,长期从事Java语言的教学、培训及项目开发工作,为国家机关、部委、企业开发了多个套用项目,积累了丰富的开发经验。
目录
第1部分 入 门
第1章 计算机科学及媒体计算简介 2
1.1 什幺是计算机科学 2
1.2 计算机能理解什幺 5
1.3 媒体计算:为什幺将媒体数位化 7
1.4 大众的计算机科学 8
1.4.1 交流 9
1.4.2 流程 9
习题 9
深入学习 10
第2章 Java简介 11
2.1 Java 11
2.1.1 Java的历史 11
2.1.2 对象和类 12
2.2 DrJava 12
2.3 Java的基本概念 15
2.3.1 数学运算符 15
2.3.2 列印语句的结果 16
2.3.3 数学表达式中的数据类型 17
2.3.4 数据类型的强制转换 18
2.3.5 关係运算符 18
2.3.6 字元串 19
2.4 变数 20
2.4.1 声明变数 20
2.4.2 在计算中使用变数 21
2.4.3 变数的记忆体图 22
2.4.4 对象变数 23
2.4.5 变数重用 24
2.4.6 对象的多重引用 25
2.5 概念小结 26
2.5.1 语句 26
2.5.2 关係运算符 26
2.5.3 类型 26
2.5.4 强制转换 27
2.5.5 变数 27
习题 28
深入学习 29
第3章 程式设计简介 30
3.1 编程和命名 30
3.2 档案和档案名称 31
3.3 类和对象方法 32
3.3.1 调用类方法 32
3.3.2 执行对象方法 33
3.4 让小乌龟动起来 34
3.4.1 定义类 34
3.4.2 创建对象 34
3.4.3 向对象传送讯息 36
3.4.4 控制对象状态 37
3.4.5 乌龟的附加功能 38
3.5 创建方法 39
3.5.1 带输入的方法 44
3.6 与媒体共事 46
3.6.1 创建图片对象 46
3.6.2 显示图片 48
3.6.3 变数替换 49
3.6.4 对象引用 51
3.6.5 播放声音 51
3.6.6 媒体命名 52
3.6.7 方法的结果命名 52
3.7 概念小结 53
3.7.1 调用对象方法 53
3.7.2 调用类方法 54
3.7.3 创建对象 54
3.7.4 创建新方法 54
对象和方法总结 55
习题 55
深入学习 57
第2部分 图 形
第4章 使用循环修改图片 60
4.1 图片怎样编码 60
4.1.1 颜色的表示法 63
4.2 处理图片 66
4.2.1 浏览图片 70
4.3 改变颜色的值 71
4.3.1 使用for-each循环 71
4.3.2 使用while循环 72
4.3.3 增加/减少红色(绿色、
蓝色) 75
4.3.4 生成日落 85
4.3.5 搞清方法的意义 86
4.3.6 变数名範围 89
4.3.7 使用for循环 92
4.3.8 变亮和变暗 93
4.3.9 创建底片 95
4.3.10 转换成灰度 95
4.4 概念小结 97
4.4.1 数组 97
4.4.2 循环 97
4.4.3 注释 98
对象和方法小结 99
习题 100
深入学习 102
第5章 在矩阵中修改像素 103
5.1 複製像素 103
5.1.1 利用嵌套循环遍历像素 103
5.1.2 镜像图片 106
5.2 複製和改造图片 112
5.2.1 複製 113
5.2.2 创作抽象拼贴画 117
5.2.3 混合图片 122
5.2.4 旋转 125
5.2.5 缩放比例 127
5.3 概念小结 133
5.3.1 二维数组 133
5.3.2 嵌套循环 133
5.3.3 方法的返回值 134
5.3.4 方法重载 135
对象与方法小结 135
习题 136
深入学习 137
第6章 不同条件下修改像素 138
6.1 有条件的像素变化 138
6.1.1 对比色彩 139
6.1.2 更换颜色 140
6.1.3 减轻红眼 143
6.2 简单的边缘检测法:有两种情况的
条件语句 144
6.2.1 否定 144
6.2.2 同时测试两种情况 145
6.2.3 两种选择的条件 145
6.2.4 简单的边缘检测 145
6.3 棕色特效与多色调分色印照片:
利用多条件语句选择颜色 147
6.4 高亮显示 153
6.5 像素结合:模糊化 155
6.6 背景剔除 157
6.7 色度键 161
6.8 概念小结 163
6.8.1 布尔表达式 163
6.8.2 连线布尔表达式 164
6.8.3 条件执行 164
习题 165
第7章 画图 169
7.1 利用Graphics类画图 169
7.1.1 用Graphics方法画图 171
7.1.2 矢量和点阵图表示 176
7.1.3 画文本(字元串) 178
7.2 作为特殊画图过程的程式 180
7.2.1 我们为什幺要编写程式 183
7.3 利用Graphics2D进行高级製图 183
7.3.1 设定画笔的宽度 184
7.3.2 通过绘製图像来複製图片 185
7.3.3 通用缩放 188
7.3.4 切变 189
7.3.5 用GradientPaint画图 190
7.3.6 接口 191
7.3.7 用AlphaComposite混合
图片 192
7.3.8 剪辑 194
7.4 概念小结 196
7.4.1 包 196
7.4.2 预设的Java类 196
7.4.3 继承 197
7.4.4 接口 197
对象和方法摘要 197
习题 198
第3部分 声 音
第8章 修改声音样本 202
8.1 声音编码 202
8.1.1 声音的物理性 202
8.1.2 探测声音 205
8.1.3 对声音进行编码 206
8.2 处理声音 209
8.2.1 打开声音并处理样本 210
8.2.2 使用MediaTools查找声音 212
8.2.3 引入循环 214
8.3 改变音量 216
8.3.1 增大音量 217
8.3.2 真的可以工作吗 218
8.3.3 减小音量 221
8.3.4 使用for循环 222
8.3.5 搞清方法的意思 223
8.4 规格化声音 224
8.4.1 生成剪辑 226
8.5 概念小结 228
8.5.1 数组 228
8.5.2 循环 228
8.5.3 条件执行 229
对象与方法汇总 230
习题 231
深入学习 234
第9章 用值域修改样本 235
9.1 对声音中的不同片段进行不同
的处理 235
9.2 创建声音剪辑 237
9.3 拼接声音 239
9.4 倒置声音 245
9.5 镜像声音 246
9.6 概念小结 247
9.6.1 循环的範围 247
9.6.2 从方法返回值 247
习题 248
深入学习 250
第10章 通过组合片段创建声音 251
10.1 用叠加方式组合声音 251
10.2 声音的混合 252
10.3 创建一段回声 254
10.4 如何用键盘採样 257
10.5 叠加合成 262
10.5.1 创建正弦波 262
10.5.2 用静态法创建声音 263
10.5.3 叠加正弦波 265
10.5.4 验证结果 266
10.5.5 方波 267
10.5.6 三角波 268
10.6 现代音乐合成 269
10.6.1 MP3 270
10.6.2 MIDI 270
10.6.3 私有方法 272
10.7 概念小结 274
10.7.1 类方法 274
10.7.2 私有方法 275
10.7.3 用多个方法创建程式 275
习题 276
深入学习 277
第11章 创建类 278
11.1 识别对象和栏位 278
11.2 定义一个类 279
11.2.1 定义栏位 280
11.2.2 继承方法 281
11.2.3 重写继承方法 283
11.2.4 默认栏位初始化 284
11.2.5 构造函式的声明 284
11.2.6 调试器的使用 286
11.3 重载构造函式 289
11.4 创建和初始化一个数组 289
11.4.1 计算成绩平均值 290
11.4.2 在调试器中使用单步
测试 292
11.5 创建访问器(获取器)和修改器
(设定器) 295
11.5.1 创建访问器(获取器) 295
11.5.2 创建修改器(设定器) 296
11.6 创建main方法 298
11.7 Javadoc注释 299
11.7.1 类注释 299
11.7.2 方法注释 299
11.7.3 构造函式注释 300
11.7.4 生成文档 300
11.8 创建另一个类 301
11.8.1 添加构造函式 302
11.8.2 添加访问器和修改器 302
11.9 通过继承方式重用类 304
11.9.1 动态(运行时)绑定 309
11.10 概念小结 309
11.10.1 声明一个类 309
11.10.2 栏位 310
11.10.3 构造函式 310
11.10.4 数组 310
11.10.5 使用调试器 311
11.10.6 Javadoc注释 311
习题 311
第4部分 文本、档案、网路、资料库和单一媒体
第12章 创建和修改文本 316
12.1 文本和单一媒体 316
12.2 字元串:字元序列 317
12.2.1 统一字元编码标準
Unicode 318
12.2.2 String方法 318
12.2.3 用Split界定字元串 321
12.2.4 不带有字型的字元串 323
12.3 档案:保存字元串和其他事务的
地方 323
12.3.1 读取档案 324
12.3.2 处理异常 324
12.3.3 使用ArrayList 328
12.3.4 写档案 332
12.3.5 生成套用信函 334
12.3.6 修改程式 335
12.4 其他有用的类 344
12.4.1 另一个有趣的类:
Random类 346
12.5 网路:从网页获取文本 348
12.6 使用文本在媒体间转换 353
12.7 概念小结 359
12.7.1 异常 359
12.7.2 读写档案 359
12.7.3 从网际网路上读取 360
12.7.4 import语句 360
12.7.5 while循环 360
方法概要 361
习题 362
第13章 为网页製作文本 366
13.1 HTML:网页的标记 366
13.2 用程式生成HTML 370
13.2.1 从目录中创建网页 375
13.2.2 从其他网页创建网页 377
13.2.3 为主页添加随机性 379
13.3 资料库:存储文本的地方 380
13.3.1 键值映射 381
13.3.2 下传 382
13.3.3 泛型 384
13.4 关係资料库 387
13.4.1 SQL 388
13.4.2 準备开始:驱动程式和
连线 388
13.4.3 查询资料库 392
13.4.4 使用资料库创建网页 395
13.5 概念小结 397
13.5.1 HTML 397
13.5.2 助手方法 397
13.5.3 抛出异常 397
13.5.4 未命名包 398
13.5.5 HashMap 398
13.5.6 泛型 398
13.5.7 叠代器 398
13.5.8 JDBC和SQL 398
习题 399
深入学习 401
第5部分 电 影
第14章 编码、处理和创建电影 404
14.1 生成基于帧的动画 405
14.2 与视频帧合作 413
14.2.1 视频处理举例 413
14.3 概念小结 419
习题 419
第6部分 计算机科学中的一些议题
第15章 速度 422
15.1 聚焦计算机科学 422
15.2 如何使程式快速 422
15.2.1 计算机真正理解什幺 422
15.2.2 编译器和解释器 424
15.2.3 Java的特殊情况 431
15.2.4 如何让解释程式比编译
程式更快 432
15.2.5 使搜寻更快 433
15.2.6 永远不能结束或无法编写的
算法 436
15.2.7 为什幺Photoshop比Java
程式做得更快 437
15.3 怎样能使计算机快速 438
15.3.1 时钟速率和实际计算 438
15.3.2 存储:什幺使计算机
变慢 439
15.3.3 显示 440
15.4 概念小结 440
习题 440
深入学习 442
第16章 JavaScript:一种网页程式语言 443
16.1 Javascript的语法 443
16.2 网页内的JavaScript 444
16.3 JavaScript的用户界面 447
16.4 用JavaScript的多媒体 451
16.5 概念小结 452
习题 453
深入学习 453
附录A Java快速参考 454
A.1 变数 454
A.2 声明方法 455
A.3 循环 456
A.4 条件 457
A.5 操作符 457
A.6 转义字元 458
A.7 类 458
A.8 栏位 458
A.9 构造函式 459
A.10 包 459
前言
本书旨在向没有编程经验的学生介绍计算和编程。计算机教育研究中发现的一个教训是人们不仅“学习编程”,还要学习对一些事情编程[4,17]。这些事情如何激发人们学习的积极性,对学习编程产生不同的后果[6]。有些人对学习编程感兴趣仅仅出于编程的需要,而大多数人不是这样。
遗憾的是,大多数入门级的编程书籍都认为学生有强烈的学习编程的愿望。它们强调编程概念,而很少考虑使正在解决的问题有趣味和有意义。它们介绍新概念时,没有阐明学生为什幺应该知道这些概念。
在本书中,学生将通过编写处理媒体的程式来学习编程。学生将创建并修改图片,如修改“红眼”、生成底片等;还将修改声音,如把单词拼接成句子,把声音倒转产生有趣的效果;还将採用资料库中的数据生成网页;他们将使用电视或电影中看到的特殊效果创建动画和电影。
在Georgia Tech学习的学生觉得这些程式很有趣而且很有启发性。学生甚至汇报他们改编的程式,看看他们继续下去还能做什幺。
本书是教人们为了交流而编程。人们愿意交流。我们是社会成员,交流的欲望是我们的首要动机之一。计算机已经不再是单纯的计算工具,而日益成为人们交流的工具。实际上,现在所有发表的文字、图片、声音、音乐和电影都是用电脑技术準备的。这本书集中讲述怎样像专业人士那样处理图片、声音、文字和电影,但是用学生编写的程式。
我们发现大多数人愿意使用专业水平的软体来执行这些操作。那为什幺要自己学习编写程式完成这些操作呢?为什幺不把它留给图像处理软体(Photoshop)和电影软体(iMovie)的开发人员呢?答案在于你的兴趣和职业选择。
* 如果你想成为计算机方面的专业人士,那幺,理解怎样构造相互交流的程式对你来说是值得的。将来,许多软体都将用于交流,这是一个开始学习有用技能的很好领域。现在,大多数计算机课程都用Java教授,所以本书为你选择了合适的语言和合适的内容来学习编程。
* 如果你将来想成为应用程式的使用者,知道一些工具如何工作,会使你成为人们所说的“超级用户”。现在,许多常用软体都比一般用户知道的功能强大得多。许多交流软体,实际上都可以通过脚本语言编程,使用户可以在套用中定製自己的任务。要充分利用软体提供的功能,理解软体正在做什幺是很有帮助的。如果你知道什幺是像素,就能更好地理解操作的用途。要使用软体的脚本工具,需要一定的编程 知识。
* 如果你是一个有创造力的人,想完全控制交流,想知道在没有应用程式时该怎样实现你的愿望。知道怎样使用自己的程式处理媒体意味着你可以在需要的时候做自己想做的事情。你可能想让你的媒体说些什幺,但可能不知道怎样让Photoshop 或 Final Cut Pro做你想做的事情。知道怎样编程意味着你的表达能力将不受套用软体的限制。
* 最后,也许你对应用程式或者编程一点都不感兴趣。那对你来说,学这些东西值得吗?在Georgia Tech上过我们的媒体计算课程的学生一年以后告诉我们,课程在他们的日常生活中有意义[15]。我们生活在科技时代,许多技术都用于处理媒体中的所见所闻。如果知道一些技术怎样工作,你就有办法思考怎样使用它,以及怎样使用它改变你的认知。非计算机专业的学生完成课程一年之后告诉我们,他们现在对与计算机相关的事物有了新的自信,因为他们知道一些计算机是怎样工作的[15]。
本书不仅仅是关于处理媒体的编程。处理媒体的程式可以很难写,或者出现意料不到的行为。人们会提出下面这些问题:“为什幺同样的图片在Photoshop中过滤得快些?”“除错太难了。有没有一种编程式的方法易于除错?”回答这些问题,正是计算机科学家应该做的。本书的最后几章是关于计算,而不仅仅是编程(第15和16章)。
计算机是人类所构想的最神奇、最具创造力的设备。字面上它完全是由思维因素组成。有一个说法,“不要光梦想,而要去实现”正适合计算机。如果你能想像,你就可以在计算机上使它成“真”。把编程当作游戏非常有趣,而且应该有趣。