当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Why OO Sucks

发表于: 2011-11-22   作者:bookjovi   来源:转载   浏览次数:
摘要:     读了Joe Armstrong的经典文章"Why OO Sucks": http://www.sics.se/~joe/bluetail/vol1/v1_oo.html     Objection 1 - Data structure and functions should not be bound t

    读了Joe Armstrong的经典文章"Why OO Sucks": http://www.sics.se/~joe/bluetail/vol1/v1_oo.html

 

 

Objection 1 - Data structure and functions should not be bound together

 

Objection 2 - Everything has to be an object.

 

Objection 3 - In an OOPL data type definitions are spread out all over the place.

 

Objection 4 - Objects have private state.

 

Why OO was popular?

  • Reason 1 - It was thought to be easy to learn.

  • Reason 2 - It was thought to make code reuse easier.

  • Reason 3 - It was hyped.

  • Reason 4 - It created a new software industry.
    其实各自看问题的角度不同而已,各有利弊,而且两种语言设计宗旨和适用场景也是不一样的.

    这篇文章让我想起了以前看过的另一篇文章“How enterprises use functional languages, and why they don't”,举个例子,个人计算机发展起来的原因之一就是GUI的流行,对GUI编程而言,OOP是最好的选择,如Android,MFC,QT,而且历史已证明OOP是最适合GUI编程的,因为GUI中包含了太多的OO元素,如继承,大多widget都有着继承关系,如果用FP的数据方法分离去写的话,岂不是编程者需要维护管理无数个widget内部数据,此时OO的private state就有着不可替代的作用。(对FP而言private state就意味着side effect)

    Joe说的第一点“数据和方法应该分离”,我觉得这点在大型软件项目中有点争议,在大型软件系统开发和维护中往往比较重视扩展性,从设计模式上讲是开闭原则,往现有系统中加一个扩展的组件,这个组件包含了数据和方法(对接口的实现),又不能对已有模块产生影响,在此种场景下,很难做到数据和方法分离,如果一定要把数据和方法绑定的话,就改变了已有的数据结构,违反“扩展性”的原则,所以在极大型的软件项目开发中数据和方法有时是很难分离的。

    仔细发现Erlang OTP实现中也不完全是数据和方法分离(似乎Joe搬起石头砸了自己的脚:)),举个最经典的例子,mnesia,mnesia是otp使用比较广泛的数据库,底层存储是ets或dets,在mnesia的实现中,mnesia需要维护很多全局状态变量,它使用的是process dictionary来保存全局变量,这些变量从某种意义上讲已经是OO中的private state了,这点已经违背了Joe说的第四点,总的说来,mnesia本身就没有做到数据和方法的严格分离。 

   有意思的是Joe爷爷以前说过他很喜欢smalltalk,smalltalk可是比Java还OO呢!

Why OO Sucks

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
如何创建JavaScript Object呢?有如下几种方法: 一、Constructor Pattern function Person(name, a
Abap OO and .Net OO Create a new class Lcl_Calculate <shapetype id="_x0000_t75" stroked="f
http://blog.csdn.net/cszhouwei/article/details/38374603 Why Not Paxos Paxos算法是莱斯利·兰伯
业务开发测试HBase之旅一:HTable基本概念 2012年03月07日 星期三 下午 4:14 引言 团队中使用HBase
已经受够了IE6了,什么时候IE6能灭绝? IE6下不支持border-color:transparent,而众所周知的解决办法
声明: 原创作品, 转载时请注明文章来自 SAP师太 技术博客( 博/客/园www.cnblogs.co
声明: 原创作品, 转载时请注明文章来自 SAP师太 技术博客( 博/客/园www.cnblogs.co
引用:翱翔云天 继续我们的看实例学习abap面向对象编程. 在此次的例子中,我们以雇员的工资为蓝图,设
http://killdream.github.com/blog/2011/10/understanding-javascript-oop/index.html(Thanks origi
2008-1-16 ______________________________________________________________________ In this sche
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号