描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302521723丛书名: 21世纪高等学校计算机专业实用规划教材
提供教学视频、PPT课件、习题答案、测试题、交流群、教学网站等丰富的学习资源。除了PHP基础语法之外,还讲解了PHP图像处理、Web开发、MySQL数据库操作、Laravel框架以及PHP-ML人工智能等。
本书从初学者的角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。 全书共分19章,包括PHP开发入门、PHP编程基础、函数、数组、面向对象、错误与异常处理、文件处理、字符串操作、正则表达式、PHP图像处理技术、Web开发基础、PHP与Web页面交互、PHP会话技术、MySQL数据库基础、PHP操作MySQL数据库、PDO数据库抽象层、Smarty模板技术、Laravel框架、PHP-ML人工智能等内容。书中所有知识都结合具体实例进行介绍,涉及的程序代码均附以详细的注释,可以使读者轻松领会PHP程序开发的精髓,快速提高开发技能。 本书适合作为软件开发入门者的自学用书,也适合作为高等院校相关专业的教学参考书,还可供开发人员查阅、参考。
目录
第1章 PHP开发入门 1
1.1 PHP概述 1
1.1.1 认识PHP 1
1.1.2 PHP语言的优势 2
1.1.3 PHP的应用领域 2
1.2 PHP开发环境搭建 3
1.2.1 常见的PHP集成开发环境 3
1.2.2 安装WampServer 4
1.2.3 WampServer目录介绍 10
1.2.4 测试开发环境 11
1.3 第一个PHP程序 12
1.4 PHP程序开发流程 13
1.5 本章小结 14
1.6 习题 14
第2章 PHP编程基础 16
2.1 PHP基本语法 16
2.1.1 PHP标记 16
2.1.2 PHP注释 17
2.1.3 PHP标识符与关键字 19
2.2 PHP变量 20
2.2.1 变量的定义 20
2.2.2 数据类型 20
2.2.3 检测数据类型 25
2.2.4 可变变量 26
2.2.5 变量的引用赋值 27
2.3 PHP常量 27
2.3.1 常量的定义及获取 27
2.3.2 预定义常量 29
2.4 数据类型转换 30
2.4.1 自动类型转换 30
2.4.2 强制类型转换 32
2.5 PHP运算符 34
2.5.1 算术运算符 34
2.5.2 赋值运算符 34
2.5.3 字符串运算符 35
2.5.4 自加/自减运算符 35
2.5.5 比较运算符 37
2.5.6 逻辑运算符 38
2.5.7 三元运算符 39
2.5.8 NULL合并运算符 39
2.5.9 组合比较运算符 40
2.5.10 位运算符 40
2.5.11 其他运算符 41
2.5.12 运算符的优先级 41
2.6 表达式与语句 42
2.7 流程控制语句 42
2.7.1 条件语句 42
2.7.2 循环语句 46
2.7.3 跳转语句 49
2.8 本章小结 52
2.9 习题 52
第3章 函数 54
3.1 函数的基本用法 54
3.1.1 函数的定义 54
3.1.2 函数的调用 55
3.1.3 函数的参数 56
3.1.4 函数的返回值 58
3.2 变量的作用域 59
3.2.1 局部变量 59
3.2.2 全局变量 60
3.2.3 静态变量 62
3.3 函数的高级用法 63
3.3.1 可变函数 63
3.3.2 引用函数返回值 64
3.3.3 函数的嵌套调用 64
3.3.4 函数的递归调用 65
3.3.5 回调函数 67
3.4 PHP手册的使用 69
3.5 本章小结 71
3.6 习题 71
第4章 数组 73
4.1 数组的概念 73
4.2 数组的定义 74
4.3 数组的操作 77
4.3.1 数组输出 77
4.3.2 数组删除 79
4.3.3 数组运算 79
4.3.4 数组遍历 81
4.4 数组的常用函数 85
4.4.1 计算元素个数 86
4.4.2 压入或弹出元素 86
4.4.3 移除重复值 87
4.4.4 获取键名 88
4.4.5 数组排序 90
4.4.6 合并数组 92
4.4.7 拆分数组 93
4.4.8 反转数组 93
4.4.9 随机获取键名 95
4.4.10 打乱数组 95
4.5 二维数组 96
4.5.1 二维数组的定义 96
4.5.2 二维数组的遍历 98
4.6 本章小结 99
4.7 习题 100
第5章 面向对象 101
5.1 面向对象的概念 101
5.1.1 对象与类的概念 101
5.1.2 面向对象的三大特征 102
5.2 类与对象 104
5.2.1 定义类 104
5.2.2 创建对象 105
5.2.3 封装 107
5.2.4 $this的使用 110
5.3 构造方法 111
5.4 析构方法 112
5.5 类常量 113
5.6 静态成员 114
5.7 继承 116
5.7.1 继承的概念 117
5.7.2 子类重写父类方法 118
5.8 抽象类与接口 121
5.8.1 抽象类 121
5.8.2 接口 122
5.9 多态 124
5.10 魔术方法 125
5.10.1 _ _toString() 126
5.10.2 _ _call() 126
5.10.3 _ _autoload() 127
5.10.4 _ _clone() 129
5.11 设计模式 131
5.11.1 单例模式 131
5.11.2 工厂模式 132
5.12 本章小结 133
5.13 习题 133
第6章 错误与异常处理 135
6.1 错误处理 135
6.1.1 错误类型 135
6.1.2 错误级别 136
6.1.3 显示错误报告 136
6.1.4 记录错误日志 139
6.1.5 自定义错误处理 140
6.2 异常处理 142
6.2.1 异常处理的概念 142
6.2.2 异常处理实现 143
6.2.3 自定义异常 145
6.2.4 多个异常 146
6.2.5 重抛异常 149
6.2.6 自定义异常处理 150
6.3 调试方法 151
6.3.1 使用输出语句进行调试 151
6.3.2 使用文件记录进行调试 152
6.3.3 使用Xdebug进行调试 153
6.4 本章小结 154
6.5 习题 154
第7章 文件处理 156
7.1 文件概述 156
7.1.1 文件类型 156
7.1.2 文件属性 158
7.2 文件操作 160
7.2.1 打开与关闭文件 161
7.2.2 读取文件 162
7.2.3 写入文件 165
7.2.4 删除文件 167
7.2.5 重命名文件 168
7.2.6 复制文件 169
7.3 目录操作 170
7.3.1 创建和删除目录 170
7.3.2 遍历目录 172
7.3.3 解析目录 173
7.3.4 统计目录下文件大小 175
7.4 本章小结 177
7.5 习题 177
第8章 字符串操作 179
8.1 字符串构成 179
8.2 常用的字符串操作 180
8.2.1 去除字符串两边的字符 180
8.2.2 去除字符串左边的字符 181
8.2.3 去除字符串右边的字符 182
8.2.4 将字符串转换为小写 182
8.2.5 字符串首字母大写转换 183
8.2.6 单词首字母大写转换 184
8.2.7 字符串的替换 184
8.2.8 字符串的部分替换 185
8.2.9 获取字符串长度 186
8.2.10 截取字符串 186
8.2.11 比较字符串 188
8.2.12 查找字符串 190
8.2.13 查找字符串出现次数 190
8.2.14 查找字符串最后一次出现的位置 191
8.2.15 查找字符串第一次出现的位置 192
8.2.16 将字符串分割成小块 193
8.2.17 在字符串中插入字符串 194
8.2.18 字符串的分解和合并 195
8.3 字符串其他操作 196
8.3.1 MD5的应用 196
8.3.2 使用MIME base64编码加密和解密数据 196
8.3.3 创建格式化输出 197
8.3.4 ASCII码与字符串 198
8.4 本章小结 199
8.5 习题 199
第9章 正则表达式 201
9.1 初识正则表达式 201
9.1.1 正则表达式的概念 201
9.1.2 正则表达式应用场景 202
9.2 正则表达式语法规则 202
9.2.1 行定位符 202
9.2.2 单词定界符 202
9.2.3 字符类 203
9.2.4 选择字符 203
9.2.5 连字符 204
9.2.6 反义字符 204
9.2.7 限定符 204
9.2.8 点字符 205
9.2.9 转义字符 205
9.2.10 反斜线 205
9.2.11 括号字符 206
9.2.12 反向引用 206
9.3 正则表达式相关函数 207
9.3.1 preg_match()函数 207
9.3.2 preg_match_all()函数 208
9.3.3 preg_replace()函数 209
9.3.4 preg_split()函数 209
9.3.5 preg_grep()函数 210
9.4 正则表达式常见应用 211
9.4.1 手机号码和邮箱验证 211
9.4.2 验证网址URL合法性 212
9.5 正则表达式用法自查表 214
9.6 本章小结 215
9.7 习题 215
第10章 PHP图像处理技术 217
10.1 PHP图像基础知识 217
10.1.1 在PHP中加载GD库 217
10.1.2 常见图像格式 218
10.1.3 JpGraph图表库 219
10.2 PHP绘图的基本步骤 220
10.2.1 创建画布 221
10.2.2 设置颜色 221
10.2.3 生成图像 221
10.2.4 释放资源 222
10.3 PHP图像处理的常见应用 223
10.3.1 制作水印图 224
10.3.2 制作验证码 227
10.4 本章小结 231
10.5 习题 232
第11章 Web开发基础 233
11.1 HTTP 233
11.1.1 HTTP简介 233
11.1.2 HTTP工作流程 234
11.1.3 HTTP请求与响应 234
11.1.4 HTTP消息报头 235
11.2 初识表单 238
11.3 输入标记 239
11.3.1 文本域text 239
11.3.2 密码域password 241
11.3.3 文件域file 242
11.3.4 “提交”和“重置”按钮 243
11.3.5 复选框 244
11.3.6 单选按钮 245
11.4 下拉列表标记 247
11.5 本章小结 249
11.6 习题 249
第12章 PHP与Web页面交互 250
12.1 表单与PHP的关系 250
12.2 提交表单信息 251
12.2.1 GET方法提交表单 251
12.2.2 POST方法提交表单 252
12.3 PHP获取表单信息 253
12.3.1 获取文本框的值 254
12.3.2 获取文件域的值 255
12.3.3 获取复选框的值 256
12.3.4 获取下拉列表的值 258
12.3.5 获取单选按钮的值 260
12.3.6 使用$_GET[]获取表单信息 261
12.4 URL操作 262
12.4.1 获取URL传递的参数 262
12.4.2 URL的编码与解码 263
12.5 文件上传和下载 264
12.5.1 文件上传 264
12.5.2 文件下载 267
12.6 综合应用案例 269
12.7 本章小结 273
12.8 习题 273
第13章 PHP会话技术 274
13.1 会话技术概述 274
13.2 Cookie技术 274
13.2.1 Cookie概述 274
13.2.2 创建Cookie 275
13.2.3 读取Cookie 276
13.2.4 删除Cookie 277
13.2.5 Cookie应用案例 278
13.3 Session技术 279
13.3.1 Session概述 279
13.3.2 启动Session 280
13.3.3 向Session中添加数据 280
13.3.4 读取Session中的数据 281
13.3.5 删除Session中的数据 281
13.3.6 Session应用案例 283
13.4 本章小结 287
13.5 习题 287
第14章 MySQL数据库基础 289
14.1 数据库简介 289
14.2 MySQL的使用 290
14.2.1 启动和停止MySQL服务 290
14.2.2 登录和退出MySQL数据库 292
14.3 MySQL支持的数据类型 294
14.3.1 数值类型 294
14.3.2 字符串类型 295
14.3.3 日期和时间类型 296
14.4 数据库的基本操作 299
14.4.1 创建和查看数据库 299
14.4.2 使用数据库 300
14.4.3 修改数据库 301
14.4.4 删除数据库 301
14.5 数据表的基本操作 302
14.5.1 创建数据表 302
14.5.2 查看数据表 303
14.5.3 修改数据表 304
14.5.4 删除数据表 307
14.6 数据表中数据的基本操作 307
14.6.1 插入数据 308
14.6.2 查询数据 308
14.6.3 更新数据 310
14.6.4 删除数据 311
14.7 本章小结 311
14.8 习题 312
第15章 PHP操作MySQL数据库 313
15.1 PHP访问MySQL数据库的一般步骤 313
15.2 PHP操作MySQL数据库的方法 314
15.2.1 数据准备 314
15.2.2 连接数据库 315
15.2.3 选择数据库 316
15.2.4 执行SQL语句 317
15.2.5 关闭数据库连接 319
15.2.6 从数组结果集中获取信息 320
15.2.7 获取结果集中一行记录作为对象 321
15.2.8 逐行获取结果集中的每条记录 322
15.2.9 获取查询结果集中的记录数 323
15.2.10 获取结果集中的记录作为关联数组 324
15.3 PHP操作MySQL实战演练 326
15.3.1 数据准备 326
15.3.2 使用insert语句动态添加学生信息 326
15.3.3 使用select语句查询用户信息 331
15.3.4 使用update语句动态编辑用户信息 336
15.3.5 使用delete语句动态删除用户信息 343
15.4 本章小结 348
15.5 习题 348
第16章 PDO数据库抽象层 350
16.1 PDO概述 350
16.1.1 PDO简介 350
16.1.2 PDO的安装 351
16.2 使用PDO连接数据库 351
16.2.1 数据准备 351
16.2.2 PDO构造函数 352
16.2.3 DSN详解 353
16.3 PDO中执行SQL语句 353
16.3.1 使用PDO::exec()方法 354
16.3.2 使用PDO::query()方法 355
16.3.3 使用PDO::prepare()和PDOStatement::execute()方法 356
16.4 PDO中获取结果集 356
16.4.1 使用fetch()方法 356
16.4.2 使用fetchAll()方法 358
16.4.3 使用fetchColumn()方法 360
16.5 PDO中的错误处理 361
16.5.1 errorCode()方法 361
16.5.2 errorInfo()方法 363
16.6 PDO中的事务处理 364
16.7 本章小结 366
16.8 习题 366
第17章 Smarty模板技术 368
17.1 Smarty模板简介 368
17.1.1 Smarty的概念 368
17.1.2 Smarty的工作原理 368
17.1.3 Smarty的特性 369
17.2 Smarty的安装和配置 370
17.2.1 Smarty的下载和安装 370
17.2.2 Smarty目录分析 370
17.2.3 Smarty配置 370
17.2.4 第一个Smarty的简单示例 370
17.3 Smarty模板基本语法 373
17.3.1 注释 373
17.3.2 变量 373
17.3.3 函数 376
17.3.4 属性 376
17.3.5 双引号中嵌入变量 376
17.3.6 数学计算 377
17.3.7 避免Smarty的解析 377
17.4 Smarty内置函数 377
17.4.1 {$var=…} 377
17.4.2 {append} 377
17.4.3 {assign} 378
17.4.4 {config_load} 378
17.4.5 {for}循环 378
17.4.6 {while}循环 379
17.4.7 {foreach}遍历 379
17.4.8 {if}{elseif}{else}条件 379
17.5 Smarty模板继承 379
17.5.1 使用{extends}函数实现模板继承 380
17.5.2 在子模板中覆盖父模板中部分内容 380
17.5.3 合并子模板和父模板的{block}标签内容 382
17.6 Smarty缓存控制 385
17.6.1 配置缓存时间 385
17.6.2 为每个缓存设置$cache_lifetime 386
17.6.3 关闭$compile_check 386
17.6.4 使用isCached()函数 387
17.6.5 删除缓存 387
17.7 本章小结 388
17.8 习题 388
第18章 Laravel框架 390
18.1 初识Laravel框架 390
18.1.1 Laravel框架简介 390
18.1.2 Laravel框架的技术特点 390
18.2 Laravel框架安装 391
18.2.1 通过一键安装包安装 391
18.2.2 通过Composer安装 392
18.3 Laravel框架目录结构 397
18.3.1 根目录 397
18.3.2 app目录 398
18.4 Laravel的生命周期 399
18.4.1 生命周期概述 399
18.4.2 生命周期详解 399
18.5 Laravel服务容器 400
18.5.1 控制反转和依赖注入 400
18.5.2 服务容器 400
18.6 Laravel服务提供者 402
18.6.1 服务提供者概念 402
18.6.2 服务提供者举例说明 402
18.7 Laravel路由详解 407
18.7.1 路由基本概念 407
18.7.2 基础路由 407
18.7.3 多请求路由 408
18.7.4 路由前缀 408
18.8 Laravel控制器 408
18.8.1 创建控制器 409
18.8.2 结合路由设置控制器 409
18.8.3 带参数的路由使用控制器 409
18.8.4 测试用例 409
18.9 Laravel视图 410
18.9.1 创建控制器 410
18.9.2 匹配路由 411
18.9.3 新建视图 411
18.9.4 测试用例 411
18.10 Laravel数据库操作 412
18.10.1 数据库配置 412
18.10.2 连接数据库 413
18.10.3 DB Facade原始方式 415
18.10.4 查询构造器 417
18.11 本章小结 421
18.12 习题 421
第19章 PHP-ML人工智能 423
19.1 初识PHP-ML 423
19.2 机器学习概述 424
19.2.1 机器学习的概念 424
19.2.2 机器学习的研究领域 424
19.3 机器学习算法 426
19.3.1 机器学习算法概念 426
19.3.2 机器学习算法分类 426
19.3.3 机器学习实施过程 430
19.4 PHP-ML库 431
19.4.1 PHP-ML安装 432
19.4.2 PHP-ML目录结构 433
19.4.3 PHP-ML入门案例 434
19.5 本章小结 438
19.6 习题 439
附录A 自定义搭建PHP开发环境 440
前言
在瞬息万变的IT时代,一群怀揣梦想的人创办了千锋教育,投身到IT培训行业。七年来,一批批有志青年加入千锋教育,为了梦想笃定前行。千锋教育秉承用良心做教育的理念,为培养“顶级IT精英”而付出一切努力。为什么会有这样的梦想?我们先来听一听用人企业和求职者的心声:
“现在符合企业需求的IT技术人才非常紧缺,这方面的优秀人才我们会像珍宝一样对待,可为什么至今没有合格的人才出现?”
“面试的时候,用人企业问能做什么,这个项目如何来实现,需要多长的时间,我当时都蒙了,回答不上来。”
“这已经是面试过的第十家公司了,如果再不行的话,要考虑转行了。难道大学里的四年都白学了?”
“这已经是参加面试的第N个求职者了,为什么都是计算机专业,当问到项目如何实现,怎么连思路都没有呢?”
这些心声并不是个别现象,而是中国社会的一种普遍现象。高校的IT教育与企业的真实需求存在脱节,如果高校的相关课程仍然不进行更新的话,毕业生将面临难以就业的困境。很多用人单位表示,高校毕业生学了许多知识,但绝大多数知识在实际工作中用之甚少,甚至完全用不上。针对上述问题,国务院也做出了关于加快发展现代职业教育的决定。很庆幸,千锋教育所做的事情就是配合高校达成产学合作。
千锋教育致力于打造IT职业教育全产业链人才服务平台,全国数十家分校、数百名讲师团坚持以教学为本的方针,采用面对面教学,传授企业实用技能;教学大纲紧跟企业需求;拥有全国一体化就业体系。千锋教育的价值观是“做真实的自己,用良心做教育”。
针对高校教师的服务:
(1)千锋教育基于近七年来的教育培训经验,精心设计了包含“教材 授课资源 考试系统 测试题 辅助案例”的教学资源包,节约教师的备课时间,缓解教师的教学压力,显著提高教学质量。
(2)本书配套源代码、视频的获取网址为http://www.codingke.com/。
(3)本书配备了千锋教育优秀讲师录制的教学视频,按本书知识结构体系部署到了教学辅助平台(扣丁学堂)上。这些教学视频可以作为教学资源使用,也可以供备课 参考。
高校教师如需要配套教学资源,可扫描下方二维码,关注“扣丁学堂”微信公众平台获取。
扣丁学堂
针对高校学生的服务:
(1)学IT有疑问,就找千问千知。它是一个有问必答的IT社区,平台上的专业答疑辅导教师承诺工作时间3 h内答复您学习IT中遇到的专业问题。读者也可以通过扫描下方的二维码,关注“千问千知”微信公众平台,浏览其他学习者在学习中分享的问题和收获。
千问千知
(2)学习太枯燥,想了解其他学校的伙伴都是怎样学习的?你可以加入扣丁俱乐部。扣丁俱乐部是千锋教育联合各大高校发起的公益计划,专门面向对IT有兴趣的大学生提供免费的学习资源和问答服务,已有超过30多万名学习者从中获益。
就业难,难就业,千锋教育让就业不再难!
福利来袭
本书附带《千锋图书管理系统》项目实战,读者可关注“千问千知”公众号,在对话框中输入“千锋图书管理系统”即可领取项目说明和源代码。
关于本书
本书可作为高等院校本、专科计算机相关专业的PHP入门教材,是一种适合广大计算机编程爱好者的优秀读物。
抢红包
本书配套源代码、习题答案的获取方法:添加小千QQ号或微信号2133320438。
注意,小千会随时发放“助学金红包”。
致谢
千锋教育PHP教学团队将多年积累的教学实战案例进行整合,通过反复地精雕细琢最终完成了本书。另外,多名院校教师也参与了本书的部分编写与指导工作。除此之外,千锋教育的500多名学员也参与了本书的试读工作,他们站在初学者的角度对本书提出了许多宝贵的修改意见,在此一并表示衷心的感谢。
意见反馈
本书虽然力求完美,但难免有一些不足之处,欢迎各界专家和读者朋友提出宝贵意见,联系方式: [email protected]。
千锋教育高教产品研发部
2018年8月 于北京
第5章
面 向 对 象
本章学习目标
* 理解面向对象的概念;
* 掌握类与对象;
* 掌握构造方法与析构方法;
* 掌握类常量与静态成员;
* 掌握继承性与多态性;
* 掌握抽象类与接口;
* 了解魔术方法;
* 了解设计模式。
面向对象程序设计已是各种高级语言所支持的程序设计方式。首先,面向对象符合人类看待事物的一般规律;其次,采用面向对象程序设计可以使编写的程序重用性高,扩展性强。
5.1 面向对象的概念
面向对象程序设计是模拟如何组成现实世界而产生的一种编程方法,是对事物的功能抽象与数据抽象,并将解决问题的过程看成一个分类演绎的过程。其中,对象与类是面向对象程序设计的基本概念。
5.1.1 对象与类的概念
在现实世界中,随处可见的一种事物就是对象,对象是事物存在的实体,如学生、汽车等。人类解决问题的方式总是将复杂的事物简单化,于是就会思考这些对象都是由哪些部分组成的。通常都会将对象划分为两个部分,即静态部分与动态部分。顾名思义,静态部分就是不能动的部分,这个部分被称为属性,任何对象都会具备其自身属性,如一个人,其属性包括高矮、胖瘦、年龄、性别等。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以转身、微笑、说话、奔跑,这些是这个人具备的行为(动态部分),人类通过探讨对象的属性和观察对象的行为来了解对象。
在计算机世界中,面向对象程序设计的思想要以对象来思考问题,首先要将现实世界的实体抽象为对象,然后考虑这个对象具备的属性和行为。例如,现在面临一名足球运动员想要将球射进对方球门这个实际问题,试着以面向对象的思想来解决这一实际问题。步骤如下。
首先可以从这一问题中抽象出对象,这里抽象出的对象为一名足球运动员。
然后识别这个对象的属性。对象具备的属性都是静态属性,如足球运动员有一个鼻子、两条腿、一双手等,这些属性如图5.1所示。
接着识别这个对象的动态行为,即足球运动员的动作,如跳跃、转身、传球等,这些行为都是这个对象基于其属性而具有的动作,这些行为如图5.2所示。
图5.1 识别对象的属性 图5.2 识别对象具有的行为
识别出这个对象的属性和行为后,这个对象就被定义了,然后根据足球运动员具有的特性制定要射进对方球门的具体方案以解决问题。
究其本质,所有的足球运动员都具有以上的属性和行为,可以将这些属性和行为封装起来以描述足球运动员这类人。由此可见,类实质上就是封装对象属性和行为的载体,而对象则是类抽象出来的一个实例。这也是进行面向对象程序设计的核心思想,即把具体事物的共同特征抽象成实体概念,有了这些抽象出来的实体概念,就可以在编程语言的支持下创建类,因此,类是那些实体的一种模型,具体如图5.3所示。
图5.3 现实世界与编程语言的对应关系
在图5.3中,通过面向对象程序设计的思想可以建立现实世界中具体事物、实体概念与编程语言中类、对象之间的一一对应关系。
5.1.2 面向对象的三大特征
面向对象程序设计实际上就是对现实世界的对象进行建模操作。面向对象程序设计的特征主要可以概括为封装、继承和多态。接下来针对这三种特征进行简单介绍。
1.封装
封装是面向对象程序设计的核心思想。它是指将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。例如,计算机的主机是由内存条、硬盘、风扇等部件组成,生产厂家把这些部件用一个外壳封装起来组成主机,用户在使用该主机时,无须关心其内部的组成及工作原理,如图5.4所示。
图5.4 主机及组成部件
2.继承
继承是面向对象程序设计提高重用性的重要措施。它体现了特殊类与一般类之间的关系。当特殊类包含了一般类的所有属性和行为,并且特殊类还可以有自己的属性和行为时,称作特殊类继承了一般类。一般类又称为父类或基类,特殊类又称为子类或派生类。例如,已经描述了汽车模型这个类的属性和行为,如果需要描述一个小轿车类,只需让小轿车类继承汽车模型类,然后再描述小轿车类特有的属性和行为,而不必再重复描述一些在汽车模型类中已有的属性和行为,如图5.5所示。
图5.5 汽车模型与小轿车
3.多态
多态是面向对象程序设计的重要特征。生活中也常存在多态,例如,学校的下课铃声响了,这时有学生去买零食,有学生去打球,有学生在聊天。不同的人对同一时间产生了不同的行为,这就是多态在日常生活中的表现。程序中的多态是指一种行为对应着多种不同的实现。例如,在一般类中说明了一种求几何图形面积的行为,这种行为不具有具体含义,因为它并没有确定具体几何图形;在特殊类(如三角形、正方形、梯形)中都继承了一般类的求面积行为,可以根据具体的几何图形重新定义求面积行为,如图5.6所示。
图5.6 一般类与特殊类
综上,面向对象的程序设计就是通过建立一些类以及它们之间的关系来解决问题。编程者要根据对象间的关系,建立类的体系,明确它们之间是构成关系还是类属关系,从而确定类之间是包含还是继承。面向对象程序设计的一个很大特点是支持代码的重用,这就要求可重用的类一定要抓住不同实体间的共性特征。当类的定义初步完成后,编程者就可以根据现实事物中对象的行为、对象之间的协作关系对具体工作细化模块,并对这些对象进行有机组装,也就是利用对象进行模块化编程。
评论
还没有评论。