本书系统地讲述了面向对象技术的相关内容,包括面向对象的基本概念、面向对象开发的流程、面向对象的各种技巧,以及如何应用面向对象思想进行架构设计。在讲述相关知识或技术的时候,除了从“是什么”这个角度进行介绍外,更加着重于从“为什么”和“如何用”这两个角度进行剖析,力争让读者做到“知其然,并知其所以然”,从而达到在实践中既能正确又能优秀地应用面向对象的相关技术和技巧。
前 言
我最早接触“面向对象”这个词是在大学的选修课“C++语言”这门课程上,当时的教材分为两部分,前面一部分是讲C语言编程,后面一部分是讲C++的面向对象特性。当时觉得“面向对象”这个词很有意思,但由于教材和教学的原因,当时对“面向对象”的理解和认识很粗浅,认为面向对象就是写class。
工作后开始真正地在业务开发中应用面向对象技术,最初也只是按照写class的方式去应用面向对象,但越来越发现不对劲,自己的疑惑也越来越多。例如:
为什么要这样写class,不能那样写class,反正最后都能完成功能啊?
为什么我说要设计这个class,你说要设计那个class,标准是什么?
客户需求都是用自然语言描述的,根本没有类和继承这些面向对象的概念,那这些设计又是如何得出的呢?是拍脑袋还是靠天才的创造,抑或是有章可循?
如何判断面向对象的设计做得好还是不好呢?
带着这些问题,我开始真正地去探索面向对象的世界,于是一头扎进去,发现了一个精彩但又纷繁复杂的世界,各种各样的技术扑面而来,让人目不暇接——设计模式、SOLID设计原则、UML、Java、C++……费了九牛二虎之力,好不容易把这些啃完了,我自信满满地以为掌握了面向对象的精髓,于是又准备到业务开发中大展拳脚,稍微一实践后却发现自己只是掌握了一大堆的技术名词,例如“封装”、“继承”、“工厂模式”、“开闭原则”,但还是“知其然,不知其所以然”,在实际开发过程中依然不能很好地应用。
除此之外,不管采用“瀑布流程”,还是“敏捷”流程,软件开发流程都可以简单地分为需求分析、系统设计、编码实现、测试部署这几个阶段。在这些不同的阶段中,面向对象起什么作用呢?如何在这些不同的阶段中应用面向对象技术呢?我曾经带着这些疑问去问大虾大牛,但没人能够清楚地回答;也曾经到各种面向对象书籍中探索,但没有找到确切答案。
虽然没有直接找到答案,但在这个思考和探索的过程中,也吸收到了更多的知识、技能和思想。随着我对面向对象思想和技术的理解逐渐加深,加上我在工作中不断地实践,很多问题我自己慢慢地竟然想通了,同时也形成了一套完整的面向对象方法论。
在这个过程中,有很多疑惑,甚至有很多痛苦,投入也很大,是对技术的热爱支撑着我一直探索下去,但我相信大部分程序员没有这么大的兴趣去探索,也没有那么多的时间可以投入,所以我就写成了这本书,让更多的程序员更好地掌握面向对象的思想和技巧,享受程序人生,实现自己的梦想!
本书内容
本书内容主要分为4部分。
面向对象基础:通过对面向对象的历史、发展,与面向过程的对比等相关背景知识的介绍,让读者对面向对象有一个更完整的认识;并深入地阐述了面向对象的各种概念,让读者“知其然,并知其所以然”。
面向对象实战:通过一个实例,完整地介绍了面向对象相关技术如何在软件开发流程中落地,整个面向对象的开发流程一环扣一环,步步为营,让读者避免“拍脑袋”、“头脑风暴”式的开发方式。
面向对象技巧:对“内聚耦合”、“设计模式”、“设计原则”、“UML”等最常见的面向对象技术进行了深入和别具一格的阐述,让读者不但知道“what”(是什么),还能知道“why”(为什么)和“how”(如何用)。
面向对象架构设计:讲解了面向对象思想在架构设计中的应用,只要掌握了面向对象的思想,程序员也可以秒变架构师。
由于面向对象相关的知识和技术纷繁复杂,在一本书里面浓缩这么多的知识,对个人而言是一个很大的挑战,加上很多资料都是来自于网络和英文文档,其中错误与疏漏在所难免,希望读者批评指正。
致谢
在本书写作过程中参考了大量的网络资料,包括维基百科、百度百科等,向这些促进知识传播的网络平台致以诚挚的谢意。
个人在探索的过程中,阅读了大量的面向对象相关的书籍和文档,向这些促进面向对象技术发展的前辈致以诚挚的谢意。
特别感谢我就职的优视科技公司(UCWEB),良好的技术氛围、宽松的工作环境、不断发展和成长的业务,为本书的写作创造了良好的外部环境。
衷心感谢父母和妻子,在本书的写作过程中承担了更多的家庭琐事,给予我最大的支持。