第 1章 面向对象:让软件开发变轻松的技术 1
1.1 面向对象是软件开发的综合技术 3
1.2 以对象为中心编写软件的开发方法 4
1.3 从编程语言演化为综合技术 4
1.4 面向对象难的原因 5
1.5 原因之一:OOP结构复杂 6
1.6 原因之二:滥用比喻引起混乱 6
1.7 原因之三:面向对象的概念是抽象的 7
1.8 重点讲解“是什么”和“为什么” 9
1.9 本书的构成 9
专栏 当的OOP
易上手、有深度的Python 11
第 2章 似是而非:面向对象与现实世界 13
2.1 对照现实世界介绍面向对象 15
2.2 类指类型,实例指具体的物 15
2.3 多态让消息的发送方法变得通用 17
2.4 继承对共同点和不同点进行系统的分类和整理 20
2.5 使用比喻进行讲解容易造成混乱 22
2.6 面向对象和现实世界是似是而非的 22
2.7 明确定义为编程结构 23
2.8 软件并不会直接表示现实世界 24
2.9 与现实世界的相似增大了可能性 24
专栏 对象的另一面
成为潮词的面向对象 25
第3章 理解OOP:编程语言的历史 27
3.1 OOP的出现具有必然性 29
3.2 最初使用机器语言编写程序 29
3.3 编程语言的第 一步是汇编语言 30
3.4 高级语言使程序更加接近人类语言 31
3.5 重视易懂性的结构化编程 32
3.6 提高子程序的独立性,强化可维护性 33
3.7 实现无 GOTO编程的结构化语言 36
3.8 进化方向演变为重视可维护性和可重用性 37
3.9 没有解决全局变量问题和可重用性差的问题 39
专栏 编程往事
COBOL编译器的“鸡和蛋”问题 43
第4章 面向对象编程技术:去除冗余、进行整理 45
4.1 OOP具有结构化语言所没有的三种结构 47
4.2 OOP的结构会根据编程语言的不同而略有差异 49
4.3 三大要素之一:具有三种功能的类 49
4.4 类的功能之一:汇总 50
4.5 类的功能之二:隐藏 53
4.6 类的功能之三:创建很多个 56
4.7 实例变量是限定访问范围的全局变量 59
4.8 三大要素之二:实现调用端公用化的多态 61
4.9 三大要素之三:去除类的重复定义的继承 65
4.10 对三大要素的总结 67
4.11 通过嵌入类型使程序员的工作变轻松 68
4.12 将类作为类型使用 69
4.13 编程语言“退化”了吗 72
4.14 更先进的OOP结构 72
4.15 进化的OOP结构之一:包 72
4.16 进化的OOP结构之二:异常 74
4.17 进化的OOP结构之三:垃圾回收 76
4.18 对进化的 OOP结构的总结 78
4.19 决心决定OOP的生死 79
专栏 当今的OOP
从网页工具进化而来的PHP 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的软件构件群 118
6.3 标准类库是语言规范的一部分 120
6.4 将Object类作为祖先类的继承结构 120
6.5 框架存在各种含义 121
6.6 框架是应用程序的半成品 122
6.7 世界上可重用的软件构件群 124
6.8 独立性较高的构件:组件 124
6.9 设计模式是优秀的设计思想集 125
6.10 设计模式是类库探险的路标 128
6.11 扩展到各个领域的思想的重用 129
6.12 通过类库和模式发现的重用的好处 130
专栏 当今的OOP
因Rails框架而走红的Ruby 133
第7章 化为通用的归纳整理法的面向对象 135
7.1 软件不会直接表示现实世界 137
7.2 应用于集合论和职责分配 139
7.3 在上游工程中化为通用的归纳整理法 142
7.4 两种含义引起混乱 142
7.5 分为编程技术和归纳整理法进行思考 143
7.6 为何化为了通用的归纳整理法 144
专栏 对象的另一面
语言在先,还是概念在先? 145
第8章 UML:查看无形软件的工具 147
8.1 UML是表示软件功能和结构的图形的绘制方法 149
8.2 UML有13种图形 150
8.3 UML的使用方法大致分为三种 152
8.4 UML的使用方法之一:表示程序结构和动作 153
8.5 类图表示OOP程序的结构 153
8.6 使用时序图和通信图表示动作 156
8.7 UML的使用方法之二:表示归纳整理法的成果 158
8.8 使用类图表示根据集合论进行整理的结果 159
8.9 表示职责分配的时序图和通信图 162
8.10 UML的使用方法之三:表示非面向对象的信息 165
8.11 使用用例图表示交给计算机的工作 165
8.12 使用活动图表示工作流程 166
8.13 使用状态机图表示状态的变化 167
8.14 弥补自然语言和计算机语言缺点的“语言” 168
第9章 建模:填补现实世界和软件之间的沟壑 173
9.1 现实世界和软件之间存在沟壑 175
9.2 计算机擅长固定工作和记忆工作 176
9.3 通过业务分析、需求定义和设计来填补沟壑 177
9.4 建模是顺利推进这三个阶段的工作的技术 178
9.5 应用程序不同,建模的内容也不一样 179
9.6 业务应用程序记录现实中的事情 180
9.7 对图书馆的借阅业务进行建模 181
9.8 使用用例图来表示图书馆业务 183
9.9 用概念模型表示图书馆系统的信息 185
9.10 在业务应用程序中,数据结构反映现实世界 186
9.11 嵌入式软件替代现实世界的工作 188
9.12 嵌入式软件中设备的研究开发很重要 189
9.13 使用状态机图表示全自动工作的情形 191
9.14 嵌入式软件一直执行单调的工作 192
9.15 建模蕴含着软件开发的乐趣 192
第 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
专栏 当今的OOP
执行时不受类约束的JavaScript 210
第 11章衍生:敏捷开发 213
11.1 仅靠技术和技术窍门,软件开发并不会成功 215
11.2 系统地汇总了作业步骤和成果的开发流程 216
11.3 限制修改的瀑布式开发流程 216
11.4 瀑布式开发流程的极限 217
11.5 灵活响应变化的迭代式开发流程 218
11.6 打破诸多限制的 XP 219
11.7 确定团队工作推进方式的框架的Scrum 221
11.8 快速编写优秀软件的敏捷宣言 222
11.9 支持敏捷开发的实践 223
11.10 先编写测试代码,一边运行一边开发的测试驱动开发 224
11.11 在程序完成后改善运行代码的重构 225
11.12 经常进行系统整合的持续集成 227
11.13 实践敏捷宣言理念的方法 227
11.14 敏捷开发源于面向对象 228
11.15 不存在最好的开发流程 229
专栏 编程往事
过去不被允许的XP 233
第 12章 熟练掌握面向对象 235
12.1 面向对象这一强大概念是原动力 237
12.2 时代追上了面向对象 238
12.3 面向对象的热潮不会结束 239
12.4 将面向对象作为工具熟练掌握 240
12.5 享受需要动脑的软件开发 241
附章 函数式语言是怎样工作的 243
A.1 面向对象编程语言和函数式语言混合占据主流的时代 245
A.2 函数式语言的7个特征 246
A.3 特征1:使用函数编写程序 246
A.4 特征2:所有表达式都返回值 248
A.5 特征3:将函数作为值进行处理 252
A.6 特征4:可以灵活组合函数和参数 254
A.7 特征5:没有副作用 259
A.8 特征6:使用模式匹配和递归来编写循环处理 264
A.9 特征7:编译器自动进行类型推断 268
A.10 对7个特征的总结 272
A.11 函数式语言的分类 273
A.12 函数式语言的优势 274
A.13 函数式语言的课题 275
A.14 函数式语言和面向对象的关系 275
A.15 掌握函数式编程 277
专栏 当今的OOP
打造了函数式语言的箱庭的Java 279
后记 281
致谢 282