新書推薦:
《
我的心理医生是只猫
》
售價:HK$
49.5
《
股权控制战略:如何实现公司控制和有效激励(第2版)
》
售價:HK$
98.8
《
成吉思汗传:看历代帝王将相谋略 修炼安身成事之根本
》
售價:HK$
61.6
《
爱丁堡古罗马史-罗马城的起源和共和国的崛起
》
售價:HK$
76.8
《
人生解忧:佛学入门四十讲
》
售價:HK$
107.8
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:HK$
57.2
《
自然信息图:一目了然的万物奇观
》
售價:HK$
140.8
《
女性史:古代卷(真正意义上的女性大历史)
》
售價:HK$
123.2
|
內容簡介: |
本书不仅仅是传统的程序设计导论性教材,而且囊括了包罗万象的计算机科学。书中采用Python作为学生的*门程序设计语言,提出正确的时刻 正确的工具的教学方法,尤为重视应用程序的开发训练和计算思维的培养,易于教学和实践。书中首先讲解命令式编程,但也很早便引入了对象的概念;在学生具备足够的基础知识也更有学习动力之后,书中开始讲解自定义类、面向对象编程等更多高级技巧。书中涵盖了问题求解的核心技术和各类经典算法,这一版还增加了案例章节,所涉及的广度也有所拓展。
|
關於作者: |
卢博米尔·佩尔科维奇(Ljubomir Perkovic) 美国德保罗大学计算与数字媒体学院教授,研究兴趣包括计算机科学教育和计算思维、计算几何学、图论和算法、分布式计算。他于卡内基-梅隆大学计算机科学学院获得博士学位。2008~2011年,他参与主持了NSF资助的项目,研究在文科类课程中如何推广计算思维教学。他曾获得Fulbright研究奖,以表彰他在计算几何方面的研究贡献。
|
目錄:
|
出版者的话
译者序
前言
第1章 计算机科学导论 1
1.1 计算机科学 1
1.1.1 计算机专业人员的工作 1
1.1.2 模型、算法和程序 2
1.1.3 必备的工具 3
1.1.4 什么是计算机科学 3
1.2 计算机系统 3
1.2.1 计算机硬件 3
1.2.2 操作系统 4
1.2.3 网络和网络协议 5
1.2.4 程序开发语言 5
1.2.5 软件库 6
1.3 Python程序设计语言 6
1.3.1 Python简史 6
1.3.2 构建Python开发环境 7
1.4 计算思维 7
1.4.1 一个示例问题 8
1.4.2 抽象和建模 8
1.4.3 算法 9
1.4.4 数据类型 9
1.4.5 赋值语句和执行控制结构 10
1.4.6 本章小结 11
第2章 Python数据类型 12
2.1 表达式、变量和赋值语句 12
2.1.1 代数表达式和函数 12
2.1.2 布尔表达式和运算符 14
2.1.3 变量和赋值语句 16
2.1.4 变量名称 18
2.2 字符串 18
2.2.1 字符串运算符 19
2.2.2 索引运算符 21
2.3 列表和元组 22
2.3.1 列表运算符 22
2.3.2 列表是可变类型,字符串是不可变类型 24
2.3.3 元组 24
2.3.4 元组和列表的方法 26
2.4 对象和类 28
2.4.1 对象类型 28
2.4.2 数值类型的有效值 29
2.4.3 数值类型的运算符 30
2.4.4 创建对象 32
2.4.5 隐式类型转换 32
2.4.6 显式类型转换 33
2.4.7 类方法和面向对象的程序设计 34
2.5 Python标准库 35
2.5.1 math模块 35
2.5.2 fractions模块 36
2.6 电子教程案例研究:海龟图形 37
2.7 本章小结 37
2.8 练习题答案 37
2.9 习题 39
第3章 命令式编程 43
3.1 Python程序 43
3.1.1 我们的第一个Python程序 43
3.1.2 Python模块 45
3.1.3 内置函数print 45
3.1.4 使用input函数实现交互式输入 46
3.1.5 eval函数 47
3.2 执行控制结构 47
3.2.1 单分支结构 48
3.2.2 双分支结构 51
3.2.3 循环结构 52
3.2.4 嵌套的控制流结构 55
3.2.5 range函数 55
3.3 用户自定义函数 57
3.3.1 我们自定义的第一个函数 57
3.3.2 函数输入参数 58
3.3.3 print与return的比较 59
3.3.4 函数定义实际上是赋值语句 60
3.3.5 注释 61
3.3.6 文档字符串 61
3.4 Python变量和赋值语句 63
3.4.1 可变类型和不可变类型 63
3.4.2 赋值语句和可变性 65
3.4.3 交换 66
3.5 参数传递 67
3.5.1 不可变类型参数传递 67
3.5.2 可变类型参数传递 69
3.6 电子教程案例研究:自动化海龟图形 70
3.7 本章小结 70
3.8 练习题答案 70
3.9 习题 73
3.10 思考题 74
第4章 文本数据、文件和异常 77
4.1 深入研究字符串 77
4.1.1 字符串表示 77
4.1.2 深入研究索引运算符 79
4.1.3 字符串方法 80
4.2 格式化输出 83
4.2.1 函数print 83
4.2.2 字符串方法format 84
4.2.3 按列对齐排列数据 86
4.2.4 获取与格式化日期和时间 89
4.3 文件 91
4.3.1 文件系统 91
4.3.2 打开和关闭文件 92
4.3.3 读取文本文件的模式 96
4.3.4 写入文本文件 98
4.4 错误和异常 99
4.4.1 语法错误 100
4.4.2 内置异常 100
4.5 电子教程案例研究:图像文件 102
4.6 本章小结 102
4.7 练习题答案 103
4.8 习题 104
4.9 思考题 106
第5章 执行控制结构 108
5.1 选择控制和if语句 108
5.1.1 三路以及多路分支 108
5.1.2 条件的排列顺序 110
5.2 for循环和迭代模式 111
5.2.1 循环模式:迭代循环 111
5.2.2 循环模式:计数器循环 112
5.2.3 循环模式:累加器循环 114
5.2.4 其他类型的累加 115
5.2.5 循环模式:嵌套循环 117
5.3 深入研究列表:二维列表 119
5.3.1 二维列表 119
5.3.2 二维列表和嵌套循环模式 120
5.4 while循环 122
5.5 更多循环模式 124
5.5.1 循环模式:序列循环 124
5.5.2 循环模式:无限循环 125
5.5.3 循环模式:循环和折半 126
5.6 其他迭代控制语句 127
5.6.1 break语句 127
5.6.2 continue语句 128
5.6.3 pass语句 129
5.7 电子教程案例研究:图像处理 129
5.8 本章小结 130
5.9 练习题答案 130
5.10 习题 133
5.11 思考题 134
第6章 容器和随机性 140
6.1 字典 140
6.1.1 用户自定义索引作为字典的动机 140
6.1.2 字典类属性 141
6.1.3 字典运算符 143
6.1.4 字典方法 144
6.1.5 字典作为多路分支if语句的替代方法 146
6.1.6 字典作为计数器集合 147
6.1.7 元组对象可以作为字典的键 149
6.2 集合 150
6.2.1 使用set构造函数移除重复项 151
6.2.2 set运算符 152
6.2.3 set方法 153
6.3 字符编码和字符串 154
6.3.1 字符编码 154
6.3.2 ASCII 154
6.3.3 Unicode 156
6.3.4 Unicode字符的UTF-8编码 158
6.4 random模块 158
6.4.1 选择一个随机整数 159
6.4.2 选择一个随机实数 160
6.4.3 随机混排、挑选和抽样 161
6.5 电子教程案例研究:机会游戏 161
6.6 本章小结 162
6.7 练习题答案 162
6.8 习题 165
6.9 思考题 166
第7章 名称空间 171
7.1 函数封装 171
7.1.1 代码重用 172
7.1.2 模块化 172
7.1.3 封装 172
7.1.4 局部变量 172
7.1.5 与函数调用相关的名称空间 173
7.1.6 名称空间与程序栈 174
7.2 全局名称空间和局部名称空间 177
7.2.1 全局变量 178
7.2.2 局部作用范围的变量 178
7.2.3 全局作用范围的变量 179
7.2.4 在函数中改变全局变量 180
7.3 异常控制流 181
7.3.1 异常和异常控制流 182
7.3.2 捕获和处理异常 183
7.3.3 默认异常处理程序 184
7.3.4 捕获给定类型的异常 184
7.3.5 多重异常处理程序 185
7.3.6 控制异常流 186
7.4 模块作为名称空间 189
7.4.1 模块属性 189
7.4.2 导入模块时发生了什么 190
7.4.3 模块搜索路径 190
7.4.4 顶层模块 192
7.4.5 导入模块属性的不同方法 193
7.5 类作为名称空间 195
7.5.1 一个类是一个名称空间 195
7.5.2 类方法是在类名称空间中定义的函数 196
7.6 电子教程案例研究:使用调试器进行调试 197
7.7 本章小结 197
7.8 练习题答案 197
7.9 习题 199
7.10 思考题 200
第8章 面向对象的程序设计 202
8.1 定义新的Python类 202
8.1.1 类Point的方法 202
8.1.2 类和名称空间 203
8.1.3 每个对象都有一个关联的名称空间 204
8.1.4 类Point的实现 204
8.1.5 实例变量 206
8.1.6 实例继承类属性 206
8.1.7 类定义的一般格式 207
8.1.8 编写类的文档 208
8.1.9 类Animal 208
8.2 用户自定义类示例 210
8.2.1 构造函数重载 210
8.2.2 默认构造函数 211
8.2.3 扑克牌类 212
8.3 设计新的容器类 213
8.3.1 设计一个表示一副扑克牌的类 213
8.3.2 实现Deck类 214
8.3.3 容器类Queue 215
8.3.4 实现Queue类 216
8.4 运算符重载 217
8.4.1 运算符是类方法 218
8.4.2 使Point类对用户友好 220
8.4.3 构造函数和repr运算符之间的约定 221
8.4.4 使Queue类对用户友好 223
8.5 继承 225
8.5.1 继承类的属性 225
8.5.2 类定义的一般格式 227
8.5.3 重写父类方法 227
8.5.4 扩展父类方法 229
8.5.5 通过继承list实现一个Queue类 231
8.6 用户自定义异常 232
8.6.1 抛出一个异常 232
8.6.2 用户自定义异常类 233
8.6.3 改进类Queue的封装 234
8.7 电子教程案例研究:索引和迭代器 234
8.8 本章小结 235
8.9 练习题答案 235
8.10 习题 237
8.11 思考题 239
第9章 图形用户界面 246
9.1 tkinter图形用户界面开发基本知识 246
9.1.1 组件Tk:GUI窗口 246
9.1.2 组件Label:显示文本 247
9.1.3 显示图像 248
9.1.4 布局组件 249
9.1.5 将组件布局为表格 251
9.2 基于事件的tkinter组件 253
9.2.1 Button组件及事件处理程序 253
9.2.2 事件、事件处理程序和mainloop 255
9.2.3 Entry组件 256
9.2.4 Text组件和绑定事件 258
9.2.5 事件模式和tkinter类Event 259
9.3 设计图形用户界面 261
9.3.1 组件Canvas 261
9.3.2 作为组织容器的组件Frame 264
9.4 面向对象的图形用户界面 265
9.4.1 GUI面向对象程序设计基本知识 266
9.4.2 把共享组件赋值给实例变量 268
9.4.3 把共享数据赋值给实例变量 269
9.5 电子教程案例研究:开发一个计算器 271
9.6 本章小结 271
9.7 练习题答案 271
9.8 习题 275
9.9 思考题 275
第10章 递归 278
10.1 递归简介 278
10.1.1 调用自身的函数 278
10.1.2 停止条件 279
10.1.3 递归函数的特性 280
10.1.4 递归思想 281
10.1.5 递归函数调用和程序栈 282
10.2 递归示例 284
10.2.1 递归数列模式 284
10.2.2 分形图形 286
10.2.3 病毒扫描 289
10.2.4 线性递归 292
10.3 运行时间分析 294
10.3.1 指数函数 294
10.3.2 运算次数 295
10.3.3 斐波那契数列 296
10.3.4 运行时间的实验分析 298
10.4 查找 300
10.4.1 线性查找 300
10.4.2 二分查找 301
10.4.3 线性查找和二分查找比较 303
10.4.4 唯一性测试 304
10.4.5 选择第k个最大(或最小)项 305
10.4.6 计算出现频率最多的项 305
10.5 电子教程案例研究:汉诺塔 306
10.6 本章小结 306
10.7 练习题答案 306
10.8 习题 308
10.9 思考题 309
第11章 Web和搜索 315
11.1 万维网 315
11.1.1 Web服务器和Web客户端 315
11.1.2 WWW的管道 316
11.1.3 命名方案:统一资源定位器 316
11.1.4 协议:超文本传输协议 317
11.1.5 超文本标记语言 318
11.1.6 HTML元素 318
11.1.7 HTML文档的树结构 320
11.1.8 锚点HTML元素和绝对链接 320
11.1.9 相对链接 321
11.2 Python WWW API 321
11.2.1 模块urllib.request 322
11.2.2 模块html.parser 324
11.2.3 重载HTMLParser处理程序 325
11.2.4 模块urllib.parse 327
11.2.5 收集HTTP超链接的解析器 327
11.3 字符串模式匹配 329
11.3.1 正则表达式 329
11.3.2 Python标准库模块re 332
11.4 电子教程案例研究:Web爬虫 333
11.5 本章小结 333
11.6 练习题答案 334
11.7 习题 335
11.8 思考题 336
第12章 数据库和数据处理 339
12.1 数据库和SQL 339
12.1.1 数据库表 339
12.1.2 结构化查询语言 341
12.1.3 SELECT语句 341
12.1.4 WHERE子句 343
12.1.5 内置SQL函数 345
12.1.6 GROUP BY子句 345
12.1.7 多表SQL查询 346
12.1.8 CREATE TABLE语句 347
12.1.9 INSERT和UPDATE语句 348
12.2 Python中的数据库编程 349
12.2.1 数据库引擎和SQLite 349
12.2.2 使用sqlite3创建一个数据库 349
12.2.3 提交数据库更改和关闭数据库 351
12.2.4 使用sqlite3查询数据库 351
12.3 函数语言方法 353
12.3.1 列表解析 354
12.3.2 MapReduce问题求解框架 355
12.3.3 MapReduce的抽象概念 358
12.3.4 倒排索引 359
12.4 并行计算 361
12.4.1 并行计算简介 362
12.4.2 multiprocessing模块中的Pool类 362
12.4.3 并行加速比 364
12.4.4 并行MapReduce 366
12.4.5 并行和顺序MapReduce 366
12.5 电子教程案例研究:数据交换 369
12.6 本章小结 369
12.7 练习题答案 369
12.8 习题 372
12.9 思考题 373
|
內容試閱:
|
本教程介绍程序设计、计算机应用程序开发和计算科学的基础知识及应用实践,适用于大学水平的程序设计导论课程。本教程不仅仅是程序设计的入门教程,更提供了计算机科学概念和现代计算机应用程序开发工具的广泛知识和应用。
本教程采用的计算机程序设计语言是Python一种比大多数语言学习曲线更加平滑的语言。Python提供了强大的软件库,使得复杂的任务很容易上手,例如开发图形应用或者查找Web网页上的所有超链接。在这本教科书中,我们充分利用Python语言的易学性和易用性,同时使用Python库进行更多的计算机科学研究,并将重点放在现代应用程序开发上。这样做的好处是使得本书充分介绍了计算和现代应用程序开发领域的相关知识和应用。
本教程的教学方法是以广度优先的方式介绍计算的概念和Python程序设计知识。本教程的方法更接近自然语言的学习方法,从若干通用的词汇开始,逐渐扩展相关知识,而不是逐一罗列计算的概念和Python语言结构知识。本教程采用面向问题的叙述方式,只有在需要的时候才介绍相关的计算概念、Python结构、算法技术和其他工具,即采用了在正确的时间使用正确的工具的模型。
本教程采用了命令式编程优先和面向过程的程序设计理念,但并不回避在早期讨论对象的概念。当激发了学生的兴趣并做好思想准备之后,再讨论用户自定义的类和面向对象的程序设计。教科书的最后三章和相关的案例研究使用Web爬取、搜索引擎和数据挖掘的上下文来介绍一系列广泛的主题。这些主题包括有关递归、正则表达式、深度优先搜索、数据压缩和谷歌的MapReduce框架的基本概念,以及诸如图形用户界面组件、HTML解析器、SQL、JSON、输入输出流以及多核编程的实用工具。
这本教科书适用于计算机科学专业计算机科学和程序设计知识的课堂教学。本教程覆盖了广泛而又基本的计算机科学主题以及当前流行的技术,这些有助于学生广泛理解该领域,并有信心开发与Web或数据库交互的真正的现代应用程序。教科书广泛的知识覆盖也使得它非常适合于那些同时需要掌握程序设计和计算概念但又不愿意选修一门或两门以上计算课程的学生。
技术特性
本教程具有许多吸引学生的特性,并积极鼓励学生动手实践。首先,本书提供了大量基于Python的交互式命令行的示例。学生可以很容易地自己复制这些代码行。通过运行这些代码并观测代码的执行结果,学生可能会使用交互式命令行的即时反馈来进行更深入的实验。
贯穿整本教程,我们将一些练习题穿插在正文当中,其目的是加深对正文中刚刚讨论过的概念的理解。这些问题的答案包含在相应的章节或者是案例研究的末尾,以允许学生检查他们的答案是否正确,或者在思路堵塞的情况下作为参考。
对于程序设计过程中可能出现的潜在陷阱,本教程以注意事项的形式来警示学生。教程中还使用知识拓展的形式来简要地探索有趣但稍微偏离正文内容的主题。正文中大量的练习题、图和表等,为正文内容提供了更棒的视觉效果,从而使学生更容易阅读和理解正文内容。
最后,本教程各章结尾均包含了大量的思考题,其中许多思考题与入门级教科书中常见的思考题截然不同。
本教程的电子版还提供额外的教学材料,其中包括11个案例研究。每一个案例研究都与一章(第2~12章)的正文内容相关联,并充分展示对应章节中所涉及的概念和工具。案例研究中包括额外的思考题,以及相应的练习题及其答案。
在线补充资料
在本教程的配套网站上,提供了以下补充资料:
每个章节的PowerPoint教学幻灯片
每个章节的学习目标
教程中出现的所有代码示例
习题和思考题的参考答案(仅供教师使用)
考试题(仅供教师使用)
致学生:如何阅读本教程
本教程的目的是帮助读者掌握程序设计和开发计算思维的技能。程序设计和计算思维是实践行为,除了需要一台安装了Python集成开发环境的计算机以外,还需要用于演算的纸和笔。理想情况下,当读者阅读本教程的时候,必须拥有这些工具。
本教程大量使用了Python的交互式命令行示例。请读者尝试在命令行中运行这些示例。欢迎读者进一步实验。请读者放心,即使你不小心犯了错误,计算机也不大可能大发雷霆的!
读者还应该尝试完成正文中给出的所有练习题。练习题的参考答案位于相应章节的结尾。如果你思路堵塞了,去偷看一眼参考答案也可以,但是偷看一眼之后,请尝试自己解决问题而不要继续偷看。
对于编程过程中潜在的陷阱,在正文中使用注意事项的形式来警示读者。这些警示是非常重要的,读者阅读时不应该跳过。知识拓展部分则讨论与主题稍微相关的话题,读者愿意的话阅读时可以跳过,或者感兴趣的话也可以更加深入地探索这些话题。
在阅读正文的某些内容的时候,读者可能会灵感闪现,想开发自己的应用程序,也许是一个纸牌游戏,或一个实时跟踪一系列股票市场指数的应用程序。如果灵感闪现,那就勇敢地去尝试吧!相信你一定会收获满满。
本教程概述
本教程共分12章,以广度优先的方式介绍了计算概念以及Python程序设计语言。本教程的电子版还包括案例研究,展示了教程各章中所涵盖的概念和工具。
Python和计算机科学导览
第1章介绍基本的计算概念和术语。首先讨论计算机科学是什么以及开发人员做什么,并定义建模、算法设计和程序设计的概念。然后描述了计算机科学家和应用程序开发人员的工具包,从逻辑到系统,重点在于程序设计语言、Python开发环境和计算思维。
第2章介绍核心的内置Python数据类型:整型、布尔型、浮点型、字符串、列表和元组。本章使用Python交互式命令行的方式阐述不同数据类型的特点。介绍没有侧重全面性,而是侧重每种数据类型的用途,以及数据类型之间的差异和相似之处。这种方法可以激发对对象和类的更抽象的讨论,而这对于最终掌握数据类型的正确用法是必需的。本教程电子版中的案例研究(CS.2)充分利用了这些讨论,从而引入了海龟图形类,让学生能够交互式地绘制简单有趣的图形。
第3章介绍命令式和面向过程的程序设计,包括基本的执行控制结构。本章将程序作为存储在文件中的Python语句序列。为了控制语句的执行方式,引入了基本条件和迭代控制结构:单分支和双分支if语句,以及迭代一个显式序列或数字范围的最简单的for循环模式。本章介绍了函数,作为一种封装小应用程序的方式;本章还在第2章所涵盖的对象和类的知识上,描述了Python如何赋值和传递参数。本教程电子版中的案例研究(CS.3)通过基于海龟图形的可视化上下文,激发读者通过程序实现自动化,并通过函数实现抽象。
前三章对Python程序设计和计算机科学提供了一个浅显而广泛的介绍。通过介绍Python的核心数据类型和基本执行控制结构,学生能够尽早上手编写简单而完整的程序。同时,在早期介绍函数可以帮助学生理解程序的功能,即程序所需要的输入是什么,以及程序产生的输出是什么。换言之,函数的抽象和封装是用来帮助学生更好地理解程序的。
专注于算法思考
第4章更深入地讨论了文本和文件处理。本章继续讨论第2章中涉及的字符串知识:字符串值的表示、字符串运算符和方法,以及格式化输出。文件输入输出(IO)也会介绍,特别是读取文本文件的不同模式。最后,使用文件IO的上下文来激发对Python中异常和异常类型的讨论。本教程电子版中的案例研究(CS.4)讨论了图像文件(通常存储为二进制文件而不是文本文件)是如何读取和写入的,以及如何使用Python处理图像。
第5章深入介绍执行控制结构和循环模式。基本条件和迭代结构在第3章中介绍,然后在第4章中使用(例如,在读取文件的上下文中)。第5章一开始先讨论多分支条件语句,其余大部分篇幅则用于描述不同的循环模式:for循环和while循环的各种不同使用方法。在讨论嵌套循环模式时,还引入了多维列表。本章作为核心章节,不仅涵盖了Python循环结构,还描述了问题分解的不同方式。因此,本章从本质上讨论了问题求解和算法。本教程电子版中的案例研究(CS.5)分析了图像处理的底层原理,描述了如何实现经典的图像处理算法。
第6章详细介绍了Python内置容器数据类型及其用法。引出字典、集合和元组数据类型加以介绍。本章还完成了对字符串的介绍,并讨论了字符编码和Unicode。最后,在讨论选择和排列容器中的项时引入了随机性的概念。本教程电子版中的案例研究(CS.6)利用本章中介绍的概念,展示了如何开发一个21点扑克牌游戏应用程序。
第4~6章代表了本教程所采取的广度优先方法的第二个层次。在入门程序设计课程中,学生所面临的主要挑战之一是掌握条件和迭代结构,更一般地说,是掌握解决计算问题和设计算法的技能。关键的第5章(关于如何应用执行控制结构的模式)出现在学生学习了基本条件语句和迭代模式的几个星期后,此时他们已经渐渐适应了Python语言。对Python语言和迭代有一定程度的熟悉之后,学生可以专注于算法问题,而不是那些诸如如何正确地读取输入或者格式化输出的次要问题。
管理程序的复杂性
第7章将重点转移到软件开发过程本身和管理更大、更复杂程序的问题上。本章介绍了名称空间。名称空间是管理程序复杂性的基础。本章建立在第3章函数和参数传递的基础上,引出了代码重用、模块化和封装的软件工程目标。函数、模块和类是可以用来实现这些目标的工具,本质上是因为它们定义了单独的名称空间。本章描述了如何在正常控制流和异常控制流(当异常由异常处理程序处理时)中管理名称空间。本教程电子版中的案例研究(CS.7)基于本章的内容展示了如何使用调试器查找程序中的错误,或者更一般地,如何使用调试器分析程序的执行情况。
第8章涵盖了Python中新类的开发和面向对象程序设计(OOP)的范式。本章以第7章揭示的类通过名称空间实现为基础,解释如何开发新的类。本章通过运算符重载(Python设计理念的中心)介绍了面向对象程序设计的概念,以及继承(强大的面向对象程序设计属性,将在第9章和第11章加以应用)。通过抽象和封装,类实现了模块化和代码重用的软件工程目标。然后通过抽象和封装的讨论来引出用户自定义的异常类。本教程电子版中的案例研究(CS.8)进一步阐述了用户自定义容器类中迭代行为的实现。
第9章介绍了图形用户界面(GUI),展示了面向对象方法在开发图形用户界面中的强大之处。本章使用Python的Tk组件工具包,它是Python标准库的一部分。本章中讨论如何利用交互式组件实现事件驱动编程模式。除了介绍图形用户界面开发外,本章还展示了如何使用面向对象程序设计的强大功能来实现模块化和可重用的程序。本教程电子版中的案例研究(CS.9)通过实现基本计算器图形用户界面的过程证实了这一强大功能。
第7~9章的主要目标是向学生介绍程序复杂性和代码组织问题。这几章描述如何使用名称空间来实现功能的抽象和数据的抽象,并最终实现封装的、模块化的、可重用的代码。第8章全面讨论了用户自定义类和面向对象程序设计。然而,面向对象程序设计的优越性在实际应用中才能最好地体现,而这正是第9章的内容。其他有关面向对象程序设计的应用和实例将在后续章节陆续讨论,特别是11.2节、12.3节、12.4节以及第10章的案例研究CS.10。第7~9章为学生将来在数据结构和软件工程方法方面的学习提供了基础。
知识深入和高级应用
第10~12章是本教程的最后三章,涵盖了各种高级主题,从基本的计算机科学概念(例如递归、正则表达式、数据压缩和深度优先搜索等)到实用的现代工具(例如HTML解析器、JSON、SQL和多核编程等)。文中通过开发诸如Web爬虫程序、搜索引擎和数据挖掘应用程序来引出这些高级主题并将它们连接起来。然而,这些主题是松散的,并且每一个单独的主题都是独立呈现的,目的是允许教师根据他们认为合适的材料来设计不同的应用上下文和主题。
第10章介绍了计算机科学的基本主题:递归、查找和算法的运行时间分析。本章一开始即讨论递归思想。然后将这种技巧应用于从绘制分形图到病毒扫描的各种各样的问题上。本章最后一个例子用于阐述深度优先搜索。递归的优点和缺点导致算法运行时间分析的讨论。然后将算法运行时间的分析应用于各种查找算法性能的分析。本章把重点放在计算的理论方面,以便为今后的数据结构和算法课程奠定基础。本教程电子版中的案例研究(CS.10)讨论了汉诺塔问题,展示了如何开发一个可视化的应用程序来说明递归解决方案。
第11章介绍了万维网一个中央计算平台,同时也是一个创新计算机应用程序开发的巨大数据源。在讨论访问Web上的资源和解析Web页面的工具之前,对Web语言HTML进行了简要讨论。为了从Web页面和其他文本内容中抓取所需的内容,首先介绍了正则表达式。在入门课程中接触HTML解析和正则表达式的好处是,学生在学习正规语言课程之前,将熟悉其在应用中的用法。本教程电子版中的案例研究(CS.11)利用本章中所涉及的不同主题来展示一个基本的Web爬虫程序的开发过程。
|
|