首页>参考读物>计算机科学与技术>软件工程及软件方法学

面向对象的思考过程(原书第4版)
作者 : [美] 马特·魏斯费尔德(Matt Weisfeld)著
译者 : 黄博文 译
丛书名 : 华章程序员书库
出版日期 : 2016-11-17
ISBN : 978-7-111-55308-3
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 247
开本 : 16
原书名 : The Object-Oriented Thought Process,Fourth Edition
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。本书共15章,在结构上可以分为两部分:第一部分包括第1~10章,探讨面向对象的基本概念,比如封装、多态、继承等;第二部分包括第11~15章,专注于将这些概念应用于一些通用的面向对象技术中,并结合了一些实用的应用程序。
本书内容精炼,示例简单明了,适合各层次面向对象开发人员阅读,也是高校相关专业面向对象课程的理想教学参考书。

图书特色

面向对象编程是现代编程语言的基础,包括C++、Java、C#、Visual Basic .NET、Ruby和Objective-C。对象的概念也是许多Web技术的基础。在开始使用面向对象开发环境前,学习面向对象的基本概念至关重要。虽然编程技术在不断演化,但无论在哪个平台,面向对象的概念依旧长存。
本书第1~10章涵盖了基本的面向对象概念,第11~15章将这些概念应用到了一些常用的面向对象技术中。

第四版相对于之前的版本拓展了很多主题:
移动设备开发,包括手机应用、移动应用以及混合开发等
iOS环境下的Objective-C代码示例
使用XML及JSON实现可读性强的数据交换
使用CSS、XSLT等技术实现数据渲染与转换
Web服务,包括简单对象访问协议(SOAP)、RESTful Web服务等
客户端/服务器端技术以及封送对象
持久化数据和序列化对象

译者简介








黄博文,ThoughtWorks高级软件工程师/咨询师,拥有多年的一线产品研发及技术咨询经历。目前专注于DevOps技术及云端架构,在搭建持续集成及部署平台、自动化构建基础设施、虚拟化环境、云端运维、微服务架构等方面有着丰富的经验。拥有AWS解决方案架构师认证证书。个人博客www.huangbowen.net。

作者简介

马特·魏斯费尔德(Matt Weisfeld)居住于美国俄亥俄州的克利夫兰市。他既是大学教授、软件开发工程师,又是作家。他在信息技术领域拥有20年的经验,之后进入大学任教。Weisfeld拥有计算机科学硕士学位以及工商管理硕士学位。

图书前言

本书内容概要
正如书名所述,本书讲述了面向对象思考的过程。选择一本书的主题和书名是个很重要的决定,但如果主题概念性很强,决定就没那么容易了。大部分书籍都只涉及了编程及面向对象设计的某个方面。一些主流的书阐述了诸如面向对象分析、面向对象设计、面向对象编程、设计模式、面向对象的数据结构(XML)、统一建模语言(UML)、面向对象Web开发、面向对象移动开发、进阶面向对象编程语言等主题,当然也包括了其他与面向对象编程相关的主题。
然而,许多人仔细研究这些书后,都未曾注意到这些主题都建立在同一个基础之上,即如何以面向对象的方式进行思考。从学生到软件开发专业人员,往往虽然阅读了这些书,但没有花费充分的时间和精力来真正理解代码背后的设计理念。
我认为仅学习一种特定的开发方法、一种编程语言或者一组设计工具并不能说明学会了面向对象这一概念。简单来说,以面向对象方式编程就是一种思考方式。本书就讨论这种面向对象的思考过程。
把面向对象的思考过程从语言、开发实践以及工具中剥离出来并不是一个简单的任务。在学习面向对象这一理念时,往往要求先深入学习一门编程语言。例如,很多年以前,大量的C语言程序员在没有直接接触面向对象概念之前,就开始通过C++语言来了解面向对象。其他软件专家第一次接触面向对象则是在演示文稿中使用UML创建对象模型。他们也没有直接学习面向对象的概念。即使到现在,互联网作为商业平台的几十年后,编程书籍以及专业的培训材料并没有先介绍面向对象这一概念。
学习面向对象的概念与学习使用面向对象语言进行编程有着巨大差异,理解这点很重要。我在编写本书第1版前就意识到了这点。当我阅读Craig Larman的文章《What the UML Is-and Isn’t》时,他指出:
但是,在软件开发工程和UML绘图语言领域,读写UML标记的能力有时候好像等同于面向对象的分析和设计能力。事实当然并非如此,后者比前者更加重要。因此我推荐先学习面向对象分析和设计的相关教学资料,它优先于学习使用UML标记的相关工具。
因此,尽管学习一门建模语言是非常重要的步骤,但先学习面向对象的技能更加重要。如果未完全理解面向对象概念前就学习UML,这就像还未了解任何与电路相关的知识就开始学习电路图一样。
学习编程语言也有相同的问题。如前所述,很多C语言程序员还未直接了解任何面向对象的概念,就想通过使用C++语言来达到面向对象的境界。在面试中经常会出现这样的情况,很多自诩C++程序员的开发人员只是会使用C++编译器的C程序员。甚至现在,诸如C#.NET、VB.NET、Objective-C以及Java等语言已经相当普及了,工作面试中的一些关键问题可以迅速暴露出这些程序员缺乏面向对象的思想。
Visual Basic的早期版本并不是面向对象的。C语言也不是面向对象的。而C++在设计时就向后兼容C语言。因此,使用C++编译器编写只含C语言语法的程序,而放弃使用C++的面向对象功能是完全可能的。Objective-C是标准ANSI C语言的一个扩展。更糟糕的是,程序员可能使用勉强够用的面向对象功能把程序写成了既不是面向对象的也不是面向过程的四不像产品。
因此,在学习使用面向对象的开发环境之前,先学习基本的面向对象概念至关重要。与其直接学习一门编程语言(比如Objective-C、VB .NET、C++、C# .NET或Java)或建模语言(如UML),还不如把时间花在学习面向对象的思考过程上。
我在使用C语言编程很多年后,于20世纪80年代后期开始参加Smalltalk语言的学习课程。当时我所在的公司认为公司的软件开发人员应该学习这个极具前途的技术。老师授课时说面向对象的范式是全新的思维方式(事实上它从20世纪60年代就已经萌芽了)。他接着说,虽然几乎我们所有人都是很优秀的程序员,但还有10%~20%的人从来没有按照面向对象的方式做事。如果该说法确实正确,那么很可能是因为很多优秀的程序员从没有花时间进行编程范式的转变,没有深入学习面向对象概念。
第4版中的新增内容
正如在前言中经常提及的一样,第1版中我的愿景仅仅围绕概念本身,而不是具体的新兴技术。尽管我在第2版、第3版以及第4版仍然坚持该目标,但也引入了几个章节讲述关于应用程序的主题,这些主题与面向对象概念契合度很高。第1~10章涵盖了基本的面向对象概念,第11~15章将这些概念应用到了一些常用的面向对象技术中。例如,第1~10章提供了面向对象的基础课程(比如封装、多态、继承等),而第11~15章则介绍了一些实际应用。
第4版相对于之前的版本拓展了很多主题。以下列出了改进及更新的主题:
移动设备开发,包括手机应用、移动应用以及混合开发等。
iOS环境下的Objective-C代码示例。
使用XML及JSON实现可读性强的数据交换。
使用CSS、XSLT等技术实现数据渲染与转换。
Web服务,包括简单对象访问协议(SOAP)、RESTful Web服务等。
客户端/服务器端技术以及封送对象。
持久化数据和序列化对象。
很多章节都扩充了代码示例,在Pearson的网站可以在线查看用Java、C# .NET、VB .NET及Objective-C编写的代码示例。
目标读者
本书介绍了面向对象的基本概念,并使用代码示例进一步解释概念。最难平衡的一点在于保证代码既具有表现力又能充分阐述概念。本书的目标是让读者即使不用编译器也能理解面向对象的概念和技术。当然,如果你想使用编译器,我们也提供了代码供执行和探索。
本书目标读者包括业务经理、设计师、开发工程师、程序员、项目经理,以及其他想了解面向对象的人士。阅读本书会为你建立一个稳固的基础,有助于阅读其他更与面向对象概念相关的高端书籍。
在这些更高端的书中,我最喜欢的一本是《Java面向对象设计》(Object-Oriented Design in Java),作者为Stephen Gilbert 及Bill McCarty。我很喜欢这本书的讲述方式,并且将其作为我教授的面向对象概念课程的教材。我在本书中多次引用了《Java面向对象设计》,所以我推荐你看完本书后可以继续阅读《Java面向对象设计》。
我认为很优秀的其他书还包括《Effective C++》,作者为Scott Meyers;《Classical and Object-Oriented Software Engineering》,作者为Stephen R. Schach;《Thinking in C++》,作者为Bruce Eckel;《UML Distilled》,作者为Martin Fowler;以及《Java Design》,作者为Peter Coad和Mark Mayfield。
当我在技术社区以及大学中教授编程和Web开发的入门课程时,我很快发现大多数程序员容易学会语言语法,但很难掌握该语言面向对象的本质。
本书讲述方式
显然,我坚定地认为熟悉面向对象的思考过程优先于学习编程语言或建模语言。本书有相应的代码示例及UML图,但阅读本书并不需要掌握一门具体的编程语言或UML。我已经说过了要先学习概念本身,那为什么本书有如此多的Java、C# .NET、VB .NET以及Objective-C代码和UML图?首先,它们可以很好地展示面向对象概念。其次,它们对于面向对象的使用方式是极其重要的,有助于介绍和展示如何使用面向对象。关键在于不要过分关注Java、C# .NET、VB .NET及Objective-C或UML,而应当使用它们来帮助理解面向对象的深层理念。
注意,在理解类及其自身的属性和方法时,我非常喜欢使用UML类图实现可视化。事实上,本书中只用到了UML组件中的类图。我认为UML类图提供了一种强大的方式来模拟对象模型的概念本质。我依旧使用对象模型作为教学工具来展示类设计以及类之间的关系。
本书中的代码示例阐述了诸如循环和函数之类的概念。然而,理解代码本身并不是理解面向对象概念的先决条件。如果你想了解语言本身的更多细节,那么有一本讲解语言语法的书放在手边则非常有用。
我不能过分强调本书不讲述Java、C# .NET、VB .NET、Objective-C或UML。你可以自学这些知识。我希望本书能激发你对其他面向对象概念的兴趣,比如面向对象分析、面向对象设计以及面向对象编程。
本书中的源码
本书中提到的示例代码可以在华章网站(www.hzbook.com)下载。

上架指导

计算机\软件工程

封底文字

面向对象编程是现代编程语言的基础,包括C++、Java、C#、Visual Basic .NET、Ruby和Object-C。对象的概念也是许多诸如JavaScript、Python和PHP等web技术的基础。在开始使用面向对象开发环境前,学习面向对象的基本概念至关重要。虽然编程技术在不断演化,但无论在哪个平台,面向对象的概念依旧长存。

本书第1~10章涵盖了基本的面向对象概念,第11~15章将这些概念应用到了一些常用的面向对象技术中。

第四版相对于之前的版本拓展了很多主题:
• 移动设备开发,包括手机应用、移动应用以及混合开发等
• iOS环境下的Objective-C代码示例
• 使用XML及JSON实现可读性强的数据交换
• 使用CSS、XSLT等技术实现数据渲染与转换
• Web服务,包括简单对象访问协议(SOAP)、RESTful Web服务等
• 客户端/服务器端技术以及封送对象
• 持久化数据和序列化对象
• 很多章节都扩充了代码示例,在出版社网站可以在线查看用Java、C#.NET、VB.NET及Objective-C编写的代码示例

作者简介

[美] 马特·魏斯费尔德(Matt Weisfeld)著:暂无简介

译者简介

黄博文 译:暂无简介

译者序

很多IT从业人员进入这个行业都是从学习一门编程语言开始的。对于编程,我们往往过于关注语言的语法细节,反而忽略了其背后的设计理念。面向对象的思考过程就是一个非常优秀的设计理念。它可以独立于语言存在。如果你熟练掌握了面向对象的思考过程,那么就可以轻松地在不同的面向对象的语言之间切换。
本书透彻地阐述了面向对象这一概念。作者Matt在书中反复强调学习面向对象的思考过程优于学习任何编程语言或工具。事实上,他也是这么做的。Matt阐述了面向对象的三要素:继承、封装、多态,并且自己加上了第四个要素:组合。关于组合,Matt不惜篇幅做了大量的讲解,并且列举了很多通俗易懂的例子,这也是本书的一大特色。
Matt也纠正了人们的一些普遍误解,比如面向对象的范式与面向过程的范式并不是完全对立的关系。而且在应用面向对象的设计和开发时,Matt也讲解了不少如何与遗留系统集成的技巧。同时,Matt也简要介绍了UML这个建模利器。为了不混淆重点,他把介绍UML的章节放置在很靠后的位置。因为他明白,先了解面向对象的各项概念是最重要的。
我虽然拥有多年的从业经验,但是再看本书时仍然有不少收获。其实自从我接触了函数式编程,就渐渐成为函数式编程的拥趸。我会时不时地“鼓吹”函数式编程范式的好处,顺便“贬低”一下面向对象编程。但同时我也有个疑问,既然函数式编程这么好,为什么这几年的发展只能算是波澜不惊,而没有掀起大风浪呢?读了本书之后,我似乎找到了答案。首先面向对象的思考过程更加符合大家对世界的直观感受,毕竟不是每个人都是数学家。函数式编程可以简化很多问题,但它并不能简化所有问题。其次是面向对象的编程范式和函数式编程的范式并不是完全对立的,正如作者讲过,面向过程的编程范式和面向对象的编程范式也不是完全对立的。比如目前流行的一些语言(Scala、Go等)都具备函数式的特点,也兼具面向对象的特点(只不过它们的面向对象的机制与传统的方式有所不同)。所以无论你喜欢哪种编程范式,了解彼此的不同之处是至关重要的。而本书则是了解面向对象范式的优秀书籍。
本书已经更新到了第4版。从本书长达10多年的跨度来看,面向对象范式经久不衰。Matt也适时地在新版中加入了一些新的主题,比如可移植数据、分布式系统、Web服务等。Matt不仅阐述了这些技术,还讲述了它们的前世今生。这样可以帮助读者更加充分地了解技术的演化之路。
无论你是否有面向对象编程的经验,本书都适合你作为面向对象思考的旅程开端。最后,希望本书能给大家带来超凡的阅读体验。

图书目录

译者序
作者简介
前言
第1章 面向对象的概念简介 1
1.1 基本概念 1
1.2 对象及遗留系统 2
1.3 过程式编程与面向对象编程 3
1.4 由面向过程开发过渡到面向对象开发 5
1.4.1 过程式编程 5
1.4.2 面向对象编程 6
1.5 究竟什么是对象 6
1.5.1 对象数据 6
1.5.2 对象行为 7
1.6 究竟什么是类 10
1.6.1 创建对象 10
1.6.2 属性 11
1.6.3 方法 11
1.6.4 消息 12
1.7 使用类图作为可视化工具 12
1.8 封装和数据隐藏 12
1.8.1 接口 13
1.8.2 实现 13
1.8.3 接口/实现范式的一个真实示例 14
1.8.4 接口/实现范式的模型 14
1.9 继承 15
1.9.1 超类和子类 16
1.9.2 抽象 16
1.9.3 is-a关系 17
1.10 多态 18
1.11 组合 21
1.11.1 抽象 21
1.11.2 has-a关系 21
1.12 结语 21
1.13 本章中使用的示例代码 22
1.13.1 C#.NET版本的TestPerson类 22
1.13.2 C#.NET版本的TestShape类 23
第2章 如何以面向对象的方式进行思考 25
2.1 清楚接口和实现之间的区别 26
2.1.1 接口 27
2.1.2 实现 27
2.1.3 一个接口/实现示例 28
2.2 使用抽象思维设计接口 31
2.3 尽可能提供最小化的用户接口 32
2.3.1 确定用户  33
2.3.2 对象行为 33
2.3.3 环境约束 34
2.3.4 识别公共接口 34
2.3.5 识别实现 34
2.4 结语 35
2.5 引用 35
第3章 高级的面向对象概念 36
3.1 构造函数 36
3.1.1 什么是构造函数调用 37
3.1.2 构造函数中包含什么 37
3.1.3 默认构造函数 37
3.1.4 使用多个构造函数 38
3.1.5 设计构造函数 41
3.2 错误处理 41
3.2.1 忽略问题 42
3.2.2 检查问题并中止应用程序 42
3.2.3 检查问题并试图恢复 42
3.2.4 抛出异常 43
3.3 作用域的重要性 45
3.3.1 局部属性  45
3.3.2 对象属性 46
3.3.3 类属性 48
3.4 操作符重载 49
3.5 多重继承 49
3.6 对象操作 50
3.7 结语 51
3.8 引用 51
3.9 本章中使用的示例代码 51
第4章 类的剖析 53
4.1 类名 53
4.2 注释 55
4.3 属性 55
4.4 构造函数 56
4.5 访问器 58
4.6 公共接口方法 60
4.7 私有实现方法 60
4.8 结语 61
4.9 引用 61
4.10 本章中使用的示例代码 61
第5章 类设计指导 63
5.1 对现实世界系统建模 63
5.2 识别公共接口 64
5.2.1 最小化公共接口 64
5.2.2 隐藏实现 65
5.3 设计健壮的构造函数(以及析构函数) 65
5.4 在类中设计错误处理 66
5.4.1 使用注释给类加上文档 66
5.4.2 构造可以合作的对象 67
5.5 设计时请考虑重用 67
5.6 设计时请考虑扩展性 67
5.6.1 使用描述性的名称 67
5.6.2 抽象不可移植的代码 68
5.6.3 提供一种方式来复制和比较对象 68
5.6.4 保持尽可能小的作用域 69
5.6.5 类的职责与自身高度相关 70
5.7 设计时请考虑可维护性 71
5.7.1 在开发过程中使用迭代 71
5.7.2 测试接口 72
5.8 使用对象持久化 73
5.9 结语 75
5.10 引用 75
5.11 本章中使用的示例代码 75
第6章 使用对象进行设计 77
6.1 设计指导 77
6.1.1 提供正确的分析 79
6.1.2 编写工作陈述文档 80
6.1.3 收集需求 80
6.1.4 开发用户接口的原型 81
6.1.5 识别类 81
6.1.6 确定每个类的职责 81
6.1.7 确定类之间如何协作 81
6.1.8 创建类模型来描述系统 81
6.1.9 建立用户接口原型 82
6.2 对象包装 82
6.2.1 结构化代码 83
6.2.2 包装结构化代码 84
6.2.3 包装不可移植的代码 85
6.2.4 包装已有类 86
6.3 结语 87
6.4 引用 87
第7章 精通继承和组合 88
7.1 重用对象 88
7.2 继承 89
7.2.1 通用和特例 91
7.2.2 设计决策 92
7.3 组合 93
7.4 为什么封装是面向对象的本质 95
7.4.1 继承如何减弱封装 96
7.4.2 关于多态的一个具体例子 97
7.4.3 对象职责 98
7.4.4 抽象类、虚方法和协议 101
7.5 结语 102
7.6 引用 103
7.7 本章中使用的示例代码 103
第8章 框架和重用:使用接口和抽象类进行设计 105
8.1 代码:重用还是不重用 105
8.2 什么是框架 106
8.3 什么是契约 107
8.3.1 抽象类 108
8.3.2 接口 110
8.3.3 综合运用 112
8.3.4 编译器佐证 114
8.3.5 创建契约 115
8.3.6 系统插接点 117
8.4 一个电子商务示例 117
8.4.1 一个电子商务问题 117
8.4.2 非重用方式 118
8.4.3 电子商务解决方案 119
8.4.4 UML对象模型 120
8.5 结语 124
8.6 引用 124
8.7 本章中使用的示例代码 124
第9章 创建对象及面向对象设计 128
9.1 组合关系 129
9.2 分阶段构建 129
9.3 组合类型 131
9.3.1 聚合 131
9.3.2 联合 132
9.3.3 同时使用联合和聚合 133
9.4 避免依赖 133
9.5 基数 134
9.5.1 多个对象联合 136
9.5.2 可选的联合 137
9.6 一个综合性示例 137
9.7 结语 138
9.8 引用 138
第10章 创建对象模型 139
10.1 什么是UML 139
10.2 类图结构 140
10.3 属性和方法 141
10.3.1 属性 142
10.3.2 方法 142
10.4 访问符号 142
10.5 继承 143
10.6 接口 145
10.7 组合 145
10.7.1 聚合 145
10.7.2 联合 146
10.8 基数 147
10.9 结语 148
10.10 引用 149
第11章 对象与可移植数据:XML和JSON 150
11.1 可移植数据 150
11.2 XML 152
11.3 XML与HTML 152
11.4 XML和面向对象的语言 153
11.5 在企业间共享数据 154
11.6 使用DTD验证文档 155
11.7 将DTD集成到XML文档中 156
11.8 使用层叠样式表 161
11.9 JavaScript对象标记 163
11.10 结语 167
11.11 引用 167
第12章 持久化对象:序列化、封送及关系型数据库 168
12.1 持久化对象基础 168
12.2 将对象保存到平面文件中 169
12.2.1 序列化文件 170
12.2.2 再次讨论实现和接口 172
12.2.3 为什么不保存方法 173
12.3 序列化过程中使用XML 173
12.4 写入关系型数据库 176
12.5 结语 179
12.6 引用 179
12.7 本章中使用的示例代码 179
第13章 Web服务、移动应用及混合应用中的对象 183
13.1 分布式计算的演进 183
13.2 基于对象的脚本语言 184
13.3 JavaScript验证示例 186
13.4 网页中的对象 189
13.4.1 JavaScript对象 189
13.4.2 网页控制器 191
13.4.3 声音播放器 192
13.4.4 电影播放器 192
13.4.5 Flash动画 193
13.5 分布式对象及企业 193
13.5.1 公共对象请求代理体系结构 195
13.5.2 Web服务的定义 197
13.5.3 Web服务代码 201
13.5.4 表征状态转移 202
13.6 结语 203
13.7 引用 203
第14章 对象及客户端/服务器端应用程序 204
14.1 客户端/服务器端方式 204
14.2 私有方式 205
14.2.1 序列化对象代码 205
14.2.2 客户端代码 206
14.2.3 服务器端代码 208
14.2.4 运行该私有的客户端/服务器端示例 209
14.3 非私有方式 210
14.3.1 对象定义代码 211
14.3.2 客户端代码 212
14.3.3 服务器端代码 213
14.3.4 运行非私有客户端/服务器端示例 215
14.4 结语 215
14.5 引用 216
14.6 本章中使用的示例代码 216
第15章 设计模式 217
15.1 为什么使用设计模式 218
15.2 Smalltalk的模型/视图/控制器 219
15.3 设计模式类型 220
15.3.1 创建型模式  220
15.3.2 结构型模式 224
15.3.3 行为型模式 227
15.4 反模式 228
15.5 结语 229
15.6 引用 229
15.7 本章中使用的示例代码  229

教学资源推荐
作者: [美]保罗·阿曼(Paul Ammann);杰夫·奥法特(Jeff Offutt) 著
作者: 骆斌 主编 刘嘉 张瑾玉 黄蕾 编著
作者: (美)克拉斯·沃林(Claes Wohlin) 佩尔·鲁内松(Per Runeson) 马丁·霍斯特(Martin Host) 马格纳斯力 C. 欧尔松(Magnus C. Ohlsson) 比约恩·雷格尔(Bjorn Regnell) 安德斯·韦斯伦(Anders Wessl·n) 著
参考读物推荐
作者: 王兴亚 王智钢 赵源 陈振宇 编著
作者: [美]马特·魏斯费尔德(Matt Weisfeld) 著
作者: [美]约翰·D.麦克道尔(John D. McDowall) 著