作者:张洋
为什么要写这个系列
“OO都是一个已经被讨论烂的话题了,还有什么可写的!”
不知当你看到文章标题时,是不是有这种疑问,或者鄙夷。不错,OO从诞生到现在经历了不短的岁月,与其相关的理论、技术、原则、实践、模式、语言已经出了一大堆。可是,你真的了解OO的本质吗?真的能挥洒自如的将OO应用于软件开发中吗?真的能发挥OO的能量,从而提高软件质量吗?如果对这三个问题,你不能很干脆的点头说:“是的,当然!”那么也许你可以抽一点时间,往下看一看。
这个系列文章不打算大篇幅重述各种OO理论,也不打算谈各种OO心法。这系列文章着重于通过实践澄清一些对OO的误会,帮助朋友们更好的使用正确的方法将OO应用于实际开发中。同时,在必要的地方简要叙述一下OO相关知识。
所以,这个系列不是关于OO理论的天书或OO参考大全,而是告诉你“你对OO可能存在哪些误会与认识上的偏差”以及“如何走出误会更好的OO应用于实践”。
OO是技术,不是理论
OO,我认为全称应该叫做“面向对象技术”。其实,OO自诞生那天起其全部目的就是应用于软件开发实践中,提高软件开发质量。这也是OO存在的全部意义。所以,搞OO和搞数论、搞理论物理不一样,不能脱离应用。搞OO的人应该算是工程师,而不是科学家。两者最大的区别是:科学家可以不考虑自己研究的成果有没有什么应用价值。而工程师不一样,他们要更“势利”,要时刻关心自己研究出的东西有什么应用价值。所以一切OO的研究要以可应用性为向导,不能天马行空夸夸其谈。
当然,OO需要理论支撑,但是一定要是有现实意义的理论,而不能像数学家那样为了理论而研究理论,更不能将已有理论当做教条机械性使用。
因此,在学习和实践OO的过程中,要时刻注意和应用性联系起来,才能避免走入理论OO和教条OO的歧途。
到底什么是OO
“什么是OO?”对于这个问题,很难一言以蔽之。但正是由于对这个概念的误解和偏差,才使得某些朋友一直不能正确使用OO,不能让OO真正服务于软件开发,到最后开始怀疑OO、鄙视OO甚至唾弃OO。
在所有对OO的偏差性认识中,最普遍的一点就是“金锤”式理论,即“XX就是OO。”例如,“把所有东西看成对象就是OO”,“遵循封装、继承、多态就是OO”,“应用良好的OO原则进行设计就是OO”,“使用UML就是OO”。显然,这种“一锤子敲定”的方式会让人割裂的看问题,从而无法从全局角度正确把握OO。
在这里,我斗胆给OO下一个定义:OO,即面向对象技术,是一种旨在提高软件质量的综合性技术,其贯穿于软件系统的调研、分析、设计、开发、测试、维护、扩展、升级等整个生命周期,它包含一系列概念、思想、理论、目标、原则、实践、模式、工具、语言等要素,这些要素既相互区别又相互联系,同时从宏观和微观两个角度共同协作,指导和引导开发人员开发出高质量软件,并指导与开发有关的一切过程。
从上面可以看出,OO并不是孤立的概念或技术,而是一系列要素的复合体,并贯穿于整个软件开发周期。所以,仅仅从某个时间或控件切面切入而应用OO,这样的OO是不完整的,也不可能发挥出其应有的作用。打个比方:如果使用OO的方法和工具进行分析、设计,但是编码过程不能做到OO,就好比制造了一辆豪华的轿车却找头驴拉着走,是不能提高你出行效率的。反过来,如果你是一个C#或Java高手,但分析设计过程不遵循OO,直到编码时才用C#或Java试图OO,这无异于你听说开车能提高出行速度,于是你苦学驾驶技术,并掌握了高超的驾驶本领,但最终却坐在一头驴子上,于是你开始大喊:驾驶技术是骗人的!根本没法用!是啊,驴子上连方向盘、离合器都没有,空有一身驾驶本领又如何发挥出来呢。
这个系列的文章概要和内容组织
这系列文章的大体写作方式,是通过一个实际案例《XX食品公司连锁店在线定料系统》的调研、分析、设计、开发等一系列过程,帮助大家更好的认清OO如何实践,同时澄清一些误会。这个系统是我曾经参与过的实际案例,为了文章需要,将进行一定程度的修改,但一些很关键的东西都会原汁原味保留下来。在整个过程中,请各位不拘泥于具体技术相关问题,而要一直保持一个较高的视端,一睹OO的全貌。
文章的大概组织方式:
第一部分:需求分析之前的故事
很多人认为就软件开发来说,第一步是需求分析,其实非也。如果想更好实践OO,需求分析之前还有很多工作,如特性调研、降低风险等环节,这一部分我们讲讲需求分析之前的故事。
第二部分:分析步步高
这一部分开始对系统进行真正的分析,让我们来看看OO是如何引导和指导我们分析的。
第三部分:设计的方方面面
设计是一个繁杂的过程,诸多OO原则与模式都会应用于其中,这一部分不会细讲各种原则及模式,而是看看正确应用原则与模式的方式是怎么样的。
第四部分:让所有努力开花结果
这一部分,我们将前面的成果付诸实践。通过这一部分,可以清楚的看到前面做的一切工作都不是飘在云里的空中楼阁,而是开发高质量软件不可缺少的部分。
以上是目前的规划,当然,在整个过程中可能会出现变化,但是大体条理不会打乱。希望本系列文章能给您带来帮助。