`
庄表伟
  • 浏览: 1136362 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

敲响OO时代的丧钟!——OO时代的来临(2)

阅读更多

  1、困境

  上一章在分析的关于面向过程编程的思维所面临的困境,还有一篇文章可以给大家参考。在去年三月份的时候,我就打算写一些对于OO的反思,但是觉得自己思考尚且不够成熟,因此没有勉强,当时的文章现在可以在Javaeye看到。思考软件开发(1)——面向对象的前前后后

  这篇文章其实只分析到了面向过程的困境,可以和前面我写的那两个比喻相互参照。而两篇文字要表达的含义是一致的:“需要一个超越于机器执行层面的的认识。”或者说,不能仅仅以“解空间”的语言描述解决方案,最好能够以“问题空间”的语言描述解决方案。这是OO得以流行的真正动力,因为OO宣称自己能够更好的描述“真实世界”。

  注意我要区分的几个概念:“解决困境的努力”、“困境的根本原因”、“OO所宣称的目标”、“OO实际达到的效果”。因为在以往的OO的宣传中,这些概念是一个有机的整体,而却认为,其中有诸多“断裂破碎”之处。

  面向过程的编程,面对的困境其实相当多,最根本的原因前面也已经指出了。但是在当时,在具体的项目中,在特定的人看来,他们碰的,是各自不同的问题。在人工智能领域,在图形化界面领域,面对的是模拟的问题。在企业应用领域,面对的是数据访问与保护的问题。从共同的困境来看,适应变更,方便重用,系统健壮之类的要求,也是需要考虑的。

  2、概念的发展历程

  首先声明,这是一个假想的历程,并非真实的历史。真实的历史,可以参考以下URL中的介绍:

http://www.student.chula.ac.th/~46829016/history.htm
http://heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html
http://tech.csai.cn/uml/rjkf.htm

  模拟:模拟的概念由来已久,但是如何模拟却是一个大问题。
  抽象数据类型(ADT):在对结构(structure)进行简单的扩展之后,ADT就顺理成章的出现了。
  封装:对于ADT的理论总结可以表述为“封装带来了数据的安全性”。
  继承:一堆不能重用的代码是“罪恶”的。继承首先出来试图解决这个问题。
  多态:是一个意外的收获,如果各个对象都提供同一个名字的方法,似乎就可以不去管他们的区别。

  在这些努力与尝试之后,面向对象横空出世,从哲学的高度总结了这些努力:“你们都是正确努力的一部分,你们都在试图更好的描述真实世界,真实的世界里一切都是对象,所有的对象在一个分类系统里各安其位,对象之间通过消息相互‘招呼’。应用OO思想,描述真实世界的运行,就是编程的主要工作。”

  但是事实上呢?编程并不是描述真实世界!而是描述需求世界。不同的需求世界,需要不同的“世界观”。这一点,面向对象并没有考虑到。当时流行的思想是通用编程语言,使用一种语言解决世界上所有的开发难题。而要整体解决各不相同的开发难题,只能将目光投向“真实世界”,那是各个差异巨大的“问题空间”的唯一一致的背景。

(未完待续)

分享到:
评论
2 楼 zhang3 2006-12-07  
看到一个同类,很高兴。

现在虽然脱离了纯粹的软件行业,不过还是很高兴。

拷贝点高浓缩的几原则过来看看:
1  软件的开发过程是一个通过理性分析建构逻辑模型的过程
2  软件开发工具为分析与建构过程提供框架
3  软件开发过程遵循猜想-反驳原则,
4  软件本身和对软件的分析是两个层次的东西。
5  OO分析与软件代码没有严格同构关系。?存疑。
6  文档是一系列有主题的模型视图,而不是单独的文字和图表。
7  严谨的逻辑模型和类属关系是软件开发的结果,而不是前提。
1 楼 zhang3 2006-12-07  
test

相关推荐

Global site tag (gtag.js) - Google Analytics