现在的位置: 首页 > 综合 > 正文

[ZT] 面向对象软件开发和过程

2012年11月27日 ⁄ 综合 ⁄ 共 4309字 ⁄ 字号 评论关闭

代码是核心
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index1.shtml

通常我看到这种全篇无图全是密密麻麻的字的文章我会大汗,但这次花了20分钟一口气把这篇看完了,从一开始就被作者的内容吸引住了,结构条理十分清晰,内容有血有肉,看得出,花了不少心思,作者的功力不容置疑,强烈推荐

摘录一些内容:

面向对象的思想来自于抽象数据类型。对于面向对象来说,它最重要的改进就是把世间万物都描述为对象,而类则描述了同一种对象的特征,而不是像传统的开发方法那样,按照机器指令的执行顺序来进行设计。当然,面向对象代码最终仍然是要按照时序来执行的,但是从程序员的角度看来,面向对象代码更侧重于对象之间的交互,多个对象各司其职,相互协作以完成目标。而面向对象技术的发展,也是朝着更加贴近我们世界观的方向发展。从这点来看,有人说完全没有程序设计经验的人学习面向对象可能会更加的容易,因为他不需要从原先的时序程序的桎梏中摆脱出来,但这未必是事实。面向对象决不是一种简单的程序设计思路。这是我们的观点,也会在下文中反复的论证。


编码是软件开发过程中最基本、最底层的技艺,然而也是最重要的技艺。任何一个领域的专家都需要花费大量的
时间来进行基本技艺的锻炼,木匠需要花费大量的时间来锻炼他们对各种工具的掌握,厨师则需要练习刀工和火候。程序员也是一样的,对我们来说,语言的各种特性必须要了然于胸。而对软件的管理也需要从代码做起。

编写优秀的面向对象代码并不是一件容易的事情,优秀的OO代码如行云流水,糟糕的OO代码让人觉得浑身起鸡皮疙瘩。编写优秀的OO代码要求程序员有一定的自我修养,能够以抽象的思路看待问题,找到问题的核心并对问题域进行分解。它强调的是一种解题的思路,但这个解不是唯一的。

典型的例子是设计模式,设计模式确实给了我们以很大的启发,通过它,我们能够了解到优秀的代码是如何用于解决实际问题的。但是是不是你必须在软件中照搬设计模式呢?如果你这么做,那么你对设计模式的理解仍然不够。我曾和在建筑行业的朋友聊起Christopher Alexander的建筑的永恒之道。他很兴奋的告诉我,那确实是一本很好的书,能够引发人很深的思考,但是现在也有另外的一种观点,认为美仍然是无形的,应该发自建筑师的内心。对这句话我思考了很久,其实建筑是给人使用的,因此最重要的是它能都给人带来的价值,隐含在其中的那种活生生的气质,这是建筑师文化底蕴的外在表露。所以,Christopher Alexander在那本书中的目的,也是为了找到一种总结自己观点的方法,来总结自己对人文的认识。至于现在大家对他的思路提出了质疑,那也是一件好事,这说明大家对建筑之道的认识到了新的高度。建筑是这样,软件中的模式也是一样的,我也曾热衷于研究模式的使用,直到某一天我猛然惊醒,与其沉迷于模式的表面形式,为什么不去研究隐藏在它背后的文化底蕴呢?武侠小说中常说无招胜有招,模式的应用也应当到达这个境界,你如果可以在不经意间应用模式的思想,那又何必拘泥于模式的形式呢?

编写优秀OO代码虽难,但还有更难的事情,就是让整个开发团队都产出优秀的OO代码。我们刚才说了,OO对问题的解不是唯一的,但各个不同的优秀解汇集到一起,可能就是一个糟糕的解,这是风格和架构的问题。你如何在团队中制定制度,营造氛围,让优秀OO代码成为团队最终的成果?这些问题,在我看来,要比CMM难得多,这个问题并不是靠花钱就能够解决的。如果能够解决这个问题,这个团队的创造力一定是惊人的。

案例实战(上)
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index2.shtml

案例实战(下)
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index3.shtml

整个案例很简短,异常处理。角度很新,结合实际,强调软件工程是一个团队的责任,而非某一个人的事。

如何形成一个这样的团队要比拥有技术更难能可贵。看看作者的一些论调:

所以,这里我们可以知道一个道理,软件工程、项目管理其实并没有什么非常难的地方,我们看很多书把很多问题都提到纯理论的高度,反而给读者造成了困扰。很多读者的来信中,问到一个同样的问题,我希望在我的团队中引入软件工程,有些人说从需求管理开始比较好,有些人说从配置管理开始比较好,到底应该从哪里开始呢?就拿这个例子来说,为什么我们对一个异常管理如此的关心呢?为什么不做需求管理,或是上CMM呢?那该多酷啊!问题就在这里,软件开发是为了给客户带来价值,就像UMLChina的名言,软件以用为本,而不是以酷来衡量的。异常管理的最终目的是为了提高软件质量,这是立竿见影的效果,能够给老板、给同事以信心。需求管理和CMM当然也可以达到这种效果,问题是,异常管理几乎不需要多少的成本,却能够达到直接的效果,这种好事,为什么不做?

重用
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index4.shtml

对于我们来说,最重要的是要了解面向对象技术对一个软件开发过程有何帮助,所以,我们不是像一般的面向对象的教科书那样从继承、多态开始学习。我们的精力应该放在过程和设计上。

优化代码的组织
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index5.shtml

抽象是面向对象中优化代码组织的一个重要的思路。抽象的目标是消除细节,让开发人员的注意力集中在重要的目标之上。抽象的思路在计算机世界中无处不在。TCP协议栈的不同层次都提供一种抽象,对上层隐藏了下层的细节;业务模型也提供了一种抽象,对领域分析人员隐藏了具体技术细节;设计模式同样提供了抽象,它隐藏了具体的实现细节;甚至汇编语言也是一种抽象,它隐藏了机器指令;而我们这里的讨论也是一种抽象,因为我们忽略了应用类型、设计语言这些细节。对于开发人员来说,最重要的是识别出本层次的抽象,应该表现什么,应该隐藏什么。按照抽象的原则进行组织的设计将会是清晰的设计。

面向对象非常注重类的职责,每个类处理的事情尽可能的少,每个方法的目标都十分的单一。但是一件事情一定是几个专业的类共同完成的,而不是象传统方法那样,一个函数一包到底。

针对契约设计
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index6.shtml

业务建模
http://www-900.ibm.com/developerWorks/cn/linux/software_engineering/l-oo/index7.shtml

面向对象是一种用计算机语言模拟现实生活的技术。而传统的语言是基于时序的,是计算机观点的语言,和人们熟悉的社会观点是不同的。在软件发展初期时,这并不是什么很大的问题,但是当软件规模越来越大,变化的速度越来越快的时候。人们发现两种观念有了冲突。

参考资料

Design Patterns: Elements of Reusable Object-Oriented Software. Gamma, E. Helm, R. Johnson and J. Vlissides Addison-Wesley 1995. 中文版:《设计模式:可复用面向对象软件的基础》,李英军等译,机械工业出版社2000 年9 月。

J2EE核心模式 Deepak Alur, John Crupi, Dan Malks 牛志奇等译,机械工业出版社。

Effective Java Programming Language Guide. Joshua Bloch 2002 中文版:《Effective Java》潘爱民译,机械工业出版社2003年1月。

[Kel+96b] Wolfgang Keller, Jens Coldewey: Relational Database Access Layers: A Pattern Language, Proceedings PLoP '96, Allerton Park 1996.

[BMR+96] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal: Pattern-Oriented Software Architecture - A System of Patterns; John Wiley & Sons Ltd., Chichester, England, 1996; ISBN 0-471-95869-7

[Fow97] Martin Fowler: Analysis Patterns- Reusable Object Models; Addison-Wesley Publishing Company, Reading, Massachusetts , 1997; ISBN 0-201-89542-0

[Fowler, roles] Fowler, Martin. Dealing with Roles, http://www.awl.com/cseng/titles/0-201-89542-0/awweb.htm

[Fer00b] E. B. Fernandez and X. Yuan. "Analysis patterns for the order and shipment of a product", Procs. of PloP 2000. http://jerry.cs.uiuc.edu/~plop/plop2k

[Fer00c] E. B. Fernandez. "Stock Manager: an analysis pattern for inventories", Procs. Of PloP 2000. http://jerry.cs.uiuc.edu/~plop/plop2k

Refactoring To Patterns Joshua Kerievsky 2002

关于作者

林星,辰讯软件工作室项目管理组资深项目经理,有多年项目实施经验。辰讯软件工作室致力于先进软件思想、软件技术的应用,主要的研究方向在于软件过程思想、Linux集群技术、OO技术和软件工厂模式。您可以通过电子邮件 iamlinx@21cn.com 和他联系。 

抱歉!评论已关闭.