首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

面向对象编程—— 这颗铜质子弹可以吗

使用更大的零件来构建。本章开始的描述提醒我们,当很多零件需要装配,而且每个零件可能很复杂时,如果它们的接口设计得很流畅,大量丰富的结构就能快速地组合在一起。

面向对象编程的第一个特征是,它强制的模块化和清晰的接口。其次,它强调了封装,即外界无法看到组件的内部结构;它还强调了继承和伴随着的层次化类结构以及虚函数。面向对象还强调了强抽象数据类型化,它确保某种特定的数据类型只能由自身的相应函数来操作。

现在,无需使用整个Smalltalk或者C++的软件包,就可以获得这些特点中的任意一个—— 其中一些甚至出现在面向对象技术之前。面向对象方法吸引人的地方类似于复合维他命药丸:一次性(即编程人员的再培训)得到所有的好处。面向对象是一种非常有前途的概念。

面向对象技术为什么发展缓慢?《没有银弹》发表后的9年中,对面向对象技术的期望稳步增长。为什么增长得如此缓慢呢?是因为理论。James Coggins已经在《C++的报告》(The C++ Report)做了4年“The Best of comp.lang.C++”专栏的作者,他进行了这样的解释:

问题是OO的程序员经历了很多错综复杂混乱的应用,他们所关注的是低层次,而不是高层次的抽象。例如,他们开发了很多像链表或集合这样的类,而不是用户接口、射线束或者有限元素模型。遗憾的是,C++中帮助程序员避免错误的强类型检查,使得从小型事物中构建大型物体变得非常困难。[21]

他回归到基本的软件问题,主张一种解决软件不能满足要求的方法,即通过客户的参与和协作来提高脑力劳动的规模。他赞同自上而下的设计:

如果我们设计大粒度的类,关注用户已经接触的概念,则在进行设计的时候,他们能够理解设计并提出问题,并且可以帮助设计测试用例。我的眼科客户并不关心堆栈,他们关心描述眼角膜形状的勒让德多项式。在这方面,小规模的封装带来的好处比较少。

David Parnas的论文是面向对象概念的起源之一,他用不同的观点看这个问题。他写信给我:

答案很简单。因为OO和各种复杂语言的联系已经很紧密。人们并没有被告诉OO是一种设计的方法,并向他们讲授设计方法和原理,大家只是被告知OO是一种特殊工具。而我们可以用任何工具写出优质或低劣的代码。除非我们给人们讲解如何设计,否则语言所起的作用非常小。结果人们使用这种语言做出不好的设计,没有从中获得多少价值。而一旦获得的价值太少,它就不会流行。

资金的先行投入,收益的后期获得。面向对象技术包含了很多方法学上的进步。面向对象技术的前期投入很多—— 主要是重新培训程序员用很新的方法进行思考,同时还要把函数打造成通用的类。我认为它的优势是客观存在的,并非仅仅是推测。面向对象在整个开发周期中都得到了应用,但是真正的获益只有在后续开发、扩展和维护活动中才能体现出来。Coggins说:“面向对象技术不会加快首次或第二次的开发,产品族中第五个项目的开发将会异乎寻常的迅速。”[22]

为了预期中的,但是有些不确定的收益,冒着风险投入资金是投资人每天在做的事情。不过,在很多软件公司,这需要真正的管理勇气,一种比技术竞争力或者优秀管理能力更少有的精神。我认为极度的前期投入和收益的推后是使OO技术应用迟缓的最大原因。即使如此,在很多机构,C++仍毫无疑问地取代了C。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论