【项目管理知识】面向对象软件开发和过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象软件开发和过程
代码是核心
面向对象发展到今天,已经出现了许许多多的实践、方法和技术。
很多的技术都能够有效的提高软件质量,而要用好这些技术,我们需要从过程和管理的角度来看待它们,而不是为了使用技术而使用技术。
此系列文章包括:代码是核心、案例实战(上)、案例实战(下)、重用、优化代码的组织、针对契约设计、业务建模。
在一个有效的组织中,必定拥有杰出的一线人才。
软件设计也是一样的,一线人才的素质决定了软件的质量。
从敏捷的观点来看,代码是检验软件过程是否有效的终标准。
目前为止,以及在短时间的未来,我们都不太可能完全脱
离代码进行软件设计。
所以,软件过程中的任何一个活动都是为了能够产出的代码。
所以,代码才是核心。
1.代码是软件开发的基础
编码是软件开发过程中基本、底层的技艺,然而也是重要的技艺。
任何一个领域的专家都需要花费大量的时间来进行基本技艺的锻炼,木匠需要花费大量的时间来锻炼他们对各种工具的掌握,厨师则需要练习刀工和火候。
程序员也是一样的,对我们来说,语言的各种特性必须要了然于胸。
而对软件的管理也需要从代码做起。
从____ 年到现在,国内兴起了一股软件工程热,需求管理、配置管理、甚
至CMM。
面对纷至沓来的各种方法学、UML、00A大家似乎已经热衷于这些概念本身了,却往往忽略了软件开发中基本的元素-代码。
在和很多软件组织的接触过程中,我们认为大多数组织急切需要的并不是这些工程理论,不是说这些理论不重要,而是这些组织的症结不在于此。
很多的组织连代码的质量都管理不好,又何谈其它呢?代码管理是基础的基础,从管理的角度上来看,任何一个组织的管理都需要一个从上至下的管理过程,有基层的管理人员,也有
高层的管理人员。
对代码的管理就是软件开发中的基层管理,它起到的作用就是能够把需求、设计的思路贯彻到终的代码中。
"管理无大事"。
对软件的管理也是一样,大部分的问题都是由于很小的原因
引起的。
例如,一个产品如果后期在debug上花费了大量的时间,那么,这种现象是由于什么原因引起的?一种可能的原因是前期的代码设计中对代码质量的把握不严。
每一次代码功能的演化并不会产生太多的问题,但是当代码累积
越来越多的时候,问题也就慢慢出现了。
那么如何解决呢?可以加强QA的力量,也可以引入复审,还可以引入单元测试。
总之,要有一种方法对代码进行控制。
软件的开发过程就象是一部精密的机器,任何一个环节的变化,都会对其它的环节产生影响。
把软件过程按照瀑布的形式进行划分是一种分解的处理思路,但同时我们还应该看到不同活动之间的相互影响。
软件开发中的生命周期模型也是一个层次模型,从业务建模一直到软件实现,需要跨越数个层次,同
样会出现执行不力的情况,例如,代码设计偏离需求、偏离设计的情况比比皆是。
如何避免这种情况呢?这就需要我们从源代码的角度,反思其上游的实践活动,是否足以约束代码设计?就拿XP来说,他解决这个问题的方式是尽快的进入代码开发阶段,从代码开发中发现问题,并在下一轮的开发中解决。
这种
思路是正确的,但XP毕竟是方法论,他不会告诉你过于细节的东西,尽管XP 已经提供了大量面向代码的实践。
因为方法论的抽象级别比较高,使得他必须舍弃部分的细节。
而这篇文章告诉你的,就是这些细节。
就像我们在下一节中讨论的例子,需要在代码中加入对异常的处理,那么,异常的源头在哪里呢?
是需求,在需求中,我们发现了一些业务的非正常的处理序列,发现了一些业务实体的限制性的要求,所以在代码实现中,就需要有相应的异常处理。
在例
如,一个的异常处理,还需要让客户端程序员了解可能发生的异常,以保证不同代码间正确的集成。
2.面向对象的代码
面向对象的代码已经在现在的软件开发中占据了主流的位置,面向对象的思路也有其优势所在,就像后文所讨论的,面向对象代码有着非面向对象代码的很多优势,而软件业中很多新的思潮的产生,也都是基于面向对象语言的,所以我们关注的代码将是面向对象代码。
面向对象的思想来自于抽象数据类型。
对于面向对象来说,它重要的改进就是把世间万物都描述为对象,而类则描述了同一种对象的特征,而不是像传统的开发方法那样,按照机器指令的执行顺序来进行设计。
当然,面向对象代码终仍然是要按照时序来执行的,但是从程序员的角度看来,面向对象代码更侧重于对象之间的交互,多个对象各司其职,相互协作以完成目标。
而面向对象技术的发展,也是朝着更加贴近我们世界观的方向发展。
从这点来看,有人说完全没有程序设计经验的人学习面向对象可能会更加的容易,因为他不需要从原先的时序程序的桎梏中摆脱出来,但这未必是事实。
面向对象决不是一种简单的程序设计思路。
这是我们的观点,也会在下文中反复的论证。
和所有的职业一样,程序员,或者是面向对象程序员,始终坚持的一点就是严谨。
你会看到各种各样的代码,但那决不是一次能够写成的,要不断的尝试,不断的改进。
为什么重构和测试优先是敏捷方法中很重要的一项实践?因为程序员不是神,他们需要慢慢改进他们的代码。
虽然罗马不是一天能够建成的,但是在编写面向对象代码的过程中,有一些实践是需要坚持的,它体现了我们所说的严谨。
3.编写并管理面向对象的代码
编写的面向对象代码并不是一件容易的事情,的OO 代码如行云流水,糟
糕的00代码让人觉得浑身起鸡皮疙瘩。
编写的00代码要求程序员有一定的自我修养,能够以抽象的思路看待问题,找到问题的核心并对问题域进行分解。
它强调的是一种解题的思路,但这个解不是一的。
典型的例子是设计模式,设计模式确实给了我们以很大的启发,通过它,我们能够了解到的代码是如何用于解决实际问题的。
但是是不是你必须在软件中照搬设计模式呢?如果你这么做,那么你对设计模式的理解仍然不够。
我曾和在建筑行业的朋友聊起ChristopherAlexander 的建筑的永恒之道。
他很兴奋的告诉我,那确实是一本很好的书,能够引发人很深的思考,但是现在也有另外的一种观点,认为美仍然是无形的,应该发自建筑师的内心。
对这句话我思考了很久,其实建筑是给人使用的,因此重要的是它能都给人带来的价值,隐含在其中的那种活生生的气质,这是建筑师文化底蕴的外在表露。
所以,
ChristopherAlexander 在那本书中的目的,也是为了找到一种总结自己观点的方法,
来总结自己对人文的认识。
至于现在大家对他的思路提出了质疑,那也是一件好事,这
说明大家对建筑之道的认识到了新的高度。
建筑是这样,软件中的模式也是一样的,我
也曾热衷于研究模式的使用,直到某一天我猛然惊醒,与其沉迷于模式的表面形式,为
什么不去研究隐藏在它背后的文化底蕴呢?武侠小说中常说无招胜有招,模式的应用也
应当到达这个境界,你如果可以在不经意间应用模式的思想,那又何必拘泥于模式的形
式呢?。