面向对象是怎样工作的(第2版)
作 者: 平泽章 著,侯振龙 译
出版时间: 2020
内容简介
本书以图配文的形式,直观易懂地详细介绍了面向对象的全貌及其中包含的各项技术,包括面向对象编程、框架、设计模式、UML、建模、面向对象设计和敏捷开发等。对于各项技术是如何使用的(How),书中只进行最小限度的说明,而重点介绍这些技术究竟是什么样的(What)以及为什么需要这些技术(Why)。另外,书中设有“编程往事”专栏,介绍了作者年轻时的一些经历;还设有“对象的另一面”专栏,以与正文不同的视角讲解面向对象这一概念普及的背景和原因,通俗有趣。
作者简介
平泽章(作者)就职于UL System株式会社,多次参与面向大型金融机构的第三次在线系统的开发等系统开发工作,后负责技术咨询业务,2001年转为现在的职务。著有《UML建模教程》,是Working Effectively With Legacy Code、Refactoring: Improving the Design of Existing Code日文版译者之一。侯振龙(译者)管理科学与工程专业硕士,日语一级,软件开发工程师,具有十年以上对日软件开发经验,现就职于某日本独资企业。
第1章 面向对象:让软件开发变轻松的技术 1
1.1 面向对象是软件开发的综合技术 3
1.2 以对象为中心编写软件的开发方法 4
1.3 从编程语言演化为综合技术 4
1.4 在混乱的状态下去理解,就会觉得很难 5
1.5 混乱之一:术语洪流 6
1.6 混乱之二:比喻滥用 7
1.7 混乱之三:“一切都是对象”综合征 8
1.8 三种混乱增大了理解的难度 9
1.9 因为不理解,所以才感觉神秘 10
1.10 消除这三种混乱,就能看到面向对象的真面目 10
1.11 本书的构成 11
第2章 似是而非:面向对象与现实世界 13
2.1 如果只理解概念,就容易混乱 15
2.2 对照现实世界介绍面向对象 15
2.3 类指类型,实例指具体的物 16
2.4 多态让消息的发送方法通用 18
2.5 继承对共同点和不同点进行系统的分类和整理 20
2.6 面向对象和现实世界是似是而非的 22
2.7 现实世界的人和物不是由类创建的 23
2.8 现实世界的人和物并不只是根据消息来行动 24
2.9 明确定义为编程结构 25
2.10 软件并不会直接表示现实世界 25
2.11 与现实世界的相似扩大了可能性 26
专栏 对象的另一面
成为潮词的面向对象 27
第3章 理解OOP:编程语言的历史 29
3.1 OOP的出现具有必然性 31
3.2 最初使用机器语言编写程序 31
3.3 编程语言的第一步是汇编语言 32
3.4 高级语言的发明使程序更加接近人类 33
3.5 重视易懂性的结构化编程 34
3.6 提高子程序的独立性,强化可维护性 35
3.7 实现无GOTO编程的结构化语言 38
3.8 进化方向演变为重视可维护性和可重用性 39
3.9 没有解决全局变量问题和可重用性差的问题 41
专栏 编程往事
COBOL编译器的鸡和蛋的问题 45
第4章 面向对象编程技术:去除冗余、进行整理 47
4.1 OOP具有结构化语言所没有的三种结构 49
4.2 OOP的结构会根据编程语言的不同而略有差异 51
4.3 三大要素之一:类具有的三种功能 51
4.4 类的功能之一:汇总 52
4.5 类的功能之二:隐藏 55
4.6 类的功能之三:创建很多个 58
4.7 实例变量是限定访问范围的全局变量 61
4.8 三大要素之二:实现调用端公用化的多态 63
4.9 三大要素之三:去除类的重复定义的继承 67
4.10 对三大要素的总结 70
4.11 通过嵌入类型使程序员的工作变轻松 71
4.12 将类作为类型使用 72
4.13 编程语言“退化”了吗 74
4.14 更先进的OOP结构 74
4.15 进化的OOP结构之一:包 75
4.16 进化的OOP结构之二:异常 76
4.17 进化的OOP结构之三:垃圾回收 78
4.18 对OOP进化的总结 80
4.19 决心决定OOP的生死 81
第5章 理解内存结构:程序员的基本素养 83
5.1 理解OOP程序的运行机制 85
5.2 两种运行方式:编译器与解释器 85
5.3 解释、运行中间代码的虚拟机 88
5.4 CPU同时运行多个线程 89
5.5 使用静态区、堆区和栈区进行管理 91
5.6 OOP的特征在于内存的用法 94
5.7 每个类只加载一个类信息 95
5.8 每次创建实例都会使用堆区 96
5.9 在变量中存储实例的指针 97
5.10 复制存储实例的变量时要多加注意 99
5.11 多态让不同的类看起来一样 103
5.12 根据继承的信息类型的不同,内存配置也不同 105
5.13 孤立的实例由垃圾回收处理 107
专栏 编程往事
OOP中dump看起来很费劲? 113
第6章 重用:OOP带来的软件重用和思想重用 115
6.1 OOP的优秀结构能够促进重用 117
6.2 类库是OOP的软件构件群 119
6.3 标准类库是语言规范的一部分 120
6.4 将Object类作为祖先类的继承结构 121
6.5 框架存在各种含义 122
6.6 框架是应用程序的半成品 123
6.7 世界上可重用的软件构件群 124
6.8 独立性较高的构件:组件 125
6.9 设计模式是优秀的设计思想集 125
6.10 设计模式是类库探险的路标 128
6.11 扩展到各个领域的思想的重用 129
6.12 通过类库和模式发现的重用的好处 130
第7章 化为通用的归纳整理法的面向对象 133
7.1 软件不会直接表示现实世界 135
7.2 应用于集合论和职责分配 137
7.3 在上流工程中化为通用的归纳整理法 139
7.4 两种含义引起混乱 140
7.5 分为OOP的扩展和归纳整理法进行思考 141
7.6 为何化为了通用的归纳整理法 142
专栏 对象的另一面
语言在先,还是概念在先 143
第8章 UML:查看无形软件的工具 145
8.1 UML是表示软件功能和结构的图形的绘制方法 147
8.2 UML有13种图形 148
8.3 UML的使用方法大致分为三种 150
8.4 UML的使用方法之一:表示程序结构和动作 151
8.5 类图表示OOP程序的结构 151
8.6 使用时序图和通信图表示动作 154
8.7 UML的使用方法之二:表示归纳整理法的成果 156
8.8 使用类图表示根据集合论进行整理的结果 157
8.9 表示职责分配的时序图和通信图 160
8.10 UML的使用方法之三:表示非面向对象 163
8.11 使用用例图表示交给计算机的工作 163
8.12 使用活动图表示工作流程 164
8.13 使用状态机图表示状态的变化 165
8.14 弥补自然语言和计算机语言缺点的“语言” 166
第9章 建模:填补现实世界和软件之间的沟壑 171
9.1 现实世界和软件之间存在沟壑 173
9.2 计算机擅长固定工作和记忆工作 174
9.3 通过业务分析、需求定义和设计来填补沟壑 175
9.4 建模是顺利推进这3个阶段的工作的技术 176
9.5 应用程序不同,建模的内容也不一样 177
9.6 业务应用程序记录现实中的事情 178
9.7 对图书馆的借阅业务进行建模 179
9.8 使用用例图来表示图书馆业务 181
9.9 用概念模型表示图书馆系统的信息 183
9.10 业务应用程序中只有数据是无缝的 184
9.11 嵌入式软件替换现实世界的工作 186
9.12 嵌入式软件中设备的研究开发很重要 187
9.13 使用状态机图来表示全自动工作的情形 189
9.14 嵌入式软件一直执行单调的工作 190
9.15 建模蕴含着软件开发的乐趣 191
第10章 面向对象设计:拟人化和职责分配 195
10.1 设计的目标范围很广 197
10.2 相比运行效率,现在更重视可维护性和可重用性 198
10.3 设计目标之一:去除重复 199
10.4 设计目标之二:提高构件的独立性 200
10.5 提高构件独立性的诀窍 202
10.6 设计目标之三:避免依赖关系发生循环 203
10.7 面向对象设计的“感觉”是拟人化和职责分配 205
10.8 进行了职责分配的软件创建的奇妙世界 206
第11章 衍生:敏捷开发和TDD 211
11.1 仅靠技术和技术窍门,软件开发并不会成功 213
11.2 系统地汇总了作业步骤和成果的开发流程 214
11.3 限制修改的瀑布式开发流程 214
11.4 瀑布式开发流程的极限 215
11.5 灵活响应变化的迭代式开发流程 216
11.6 RUP按时间分解和管理开发 217
11.7 打破诸多限制的XP 219
11.8 快速编写优秀软件的敏捷宣言 221
11.9 支持敏捷开发的实践 222
11.10 先编写测试代码,一边运行一边开发的测试驱动开发 222
11.11 在程序完成后改善运行代码的重构 224
11.12 经常进行系统整合的持续集成 225
11.13 敏捷开发和TDD源于面向对象 226
11.14 不存在最好的开发流程 227
专栏 编程往事
过去不被允许的XP 231
第12章 熟练掌握面向对象 233
12.1 面向对象这一强大概念是原动力 235
12.2 时代追上了面向对象 236
12.3 面向对象的热潮不会结束 237
12.4 将面向对象作为工具熟练掌握 238
12.5 享受需要动脑的软件开发 239
第13章 函数式语言是怎样工作的 241
13.1 面向对象的“下一代”开发技术 243
13.2 函数式语言的7个特征 244
13.3 特征1:使用函数编写程序 244
13.4 特征2:所有表达式都返回值 246
13.5 特征3:将函数作为值进行处理 250
13.6 特征4:可以灵活组合函数和参数 252
13.7 特征5:没有副作用 256
13.8 特征6:使用分类和递归来编写循环处理 261
13.9 特征7:编译器自动进行类型推断 266
13.10 对7个特征的总结 270
13.11 函数式语言的分类 271
13.12 函数式语言的优势 271
13.13 函数式语言的课题 272
13.14 函数式语言和面向对象的关系 273
13.15 函数式语言会普及吗 275
后记 279
致谢 280