天国近了(二) -- OO的一些问题

    1 大多数情况下,你可以强制性地对很多事物进行分类,但是你并没有办法让它们强制按照你的分类方法进行变化,这就意味着有时候事物的一些简单的变化,被你的分类视角进行转化后,会在多个分类的后的视角内出现变化,这会导致简单的行为复制化.虽然OO并不定要严格按照分类方式处理,但是一旦你这样做了,OO将会失去可替换的特性.
   2  由于它们是多个正交方面组合在一起的系统,往往就会遇到在实际中的阻碍,比如权限管理,尽量有AOP之类的解决方案出现,但通常的AOP是需要强制你对一个对象的继承,但同时为了避免正交分解导致的混乱,OO语言又常常抹掉了多重继承,使得即便是比较OO的实现,也会大大弱化,被强制指定的继承某一个父类的对象往往就会失去代码利用的优势.因此,比较高效的AOP实现一般通过代码注入或是其它什么方式,但实际上这已经是一种破坏OO封装性原则的hack行为了.
   3  OOP粒度理论,通过组合与分离的方案在实际上并不是很有效,尽量它声称可以通过微型类与微型方法来解决这个问题,但是与此同时带的代码管理问题也是一个很让人头痛的问题.
   4  面 向对象的设计倾向于重新进行数据库应用程序编码。特别是,面向对象一般重新包装导航数据库,通常情况下都拒绝了在20世纪70年代取而代之的关系技术--认 为关系理论是普遍优于航海理论.关系理论的的基础是集合理论,而航海是基于对海无纪律性的和狭隘的情况方针。关系理论可以提供更多的架构,更一致,更清晰的问题,包括相对论的观点,以及自动优化。另外,OO使用的数据库允许多个工具和语言,交流和使用其属性(数据)的方式,也没有以书面形式明确地为每一项新的要求提供接口。
  5  目前也缺少像样的,客观而公正和公开的证据表明面向对象的更好。它可能只是流于主观或特定领域。软件工程的问题就是是缺乏良好的衡量标准。
  6  OO还有一个较大的问题就是缺乏连贯性,在面向对象的商业设计方法中,过程/关系式的做法往往更加一致(成组编码,由任务,并利用数据库来示范名词结构和关系)。 
  7  过去最大的过错是认为面向对象试图解决人和管理的问题(奖励,培训等),而不是断层的范式。直到真正的AI以前,没有范式能够强制好的代码。若有的话,面向对象的很容易提供更多的办法作为螺丝了。

****转载请注明出处http://william_fire@cnblogs.com****
本文部分译自http://www.geocities.com/tablizer/oopbad.htm#summary,并夹杂一些个人的观点与理解,如有更好的讨论,欢迎指教
  
posted @ 2007-12-14 22:45  一根神棍研古今  阅读(1763)  评论(2编辑  收藏  举报
Web Counter