前言
正如书名所述,本书讲述了面向对象思考的过程。选择一本书的主题和书名是个很重要的决定,但如果主题概念性很强,决定就没那么容易了。大部分书籍都只涉及了编程及面向对象设计的某个方面。一些主流的书阐述了诸如面向对象分析、面向对象设计、面向对象编程、设计模式、面向对象的数据结构(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编写的代码示例。
出版在【华章出版社】 作者:
[美] 马特·魏斯费尔德(Matt Weisfeld)
-------------------------
感谢分享!
-------------------------
感谢分享!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。