幽默:假装从未发生过OOP? - johndcook


我最近遇到一个人,他说,摆脱面向对象编程(OOP)的方式是回到简单地告诉计算机要做什么,就像OOP从未发生过。我认为这不是一个好主意,我也不认为这是可能的。
面向对象的程序设计(尽管后来有过之而无不及)是软件工程领域的一大进步。它使开发比以前更大的程序成为可能,也许比原来大10倍。有人可能会反驳说,由于OOP的所有开销,程序必须大10倍,但事实并非如此。OOP确实增加了一些开销,并且随着时间的推移,开销的数量随着工具和框架变得更加复杂而增加,但是OOP使得编写以前无法编写的程序成为可能。
OOP为程序员提供了一种组织代码的方法。根据问题的不同,它可能不是最好的方法,但是超越OOP的方法是用另一门学科来代替它(而不是只是否定它但无法替代它)。而且我想象大多数学习过然后拒绝OOP的人都会这样做,无论他们是否意识到。也许他们保留了在OOP的背景下学到的一些组织模式。
虽然我不经常编写类,但是我经常使用来自库的类。有时,这些对象看起来似乎比裸函数更好,但是我想如果没有将函数包装在对象中的话,相同的库将更难使用。
OOP有许多组织代码的替代方法。我通常喜欢函数式编程,但是根据我的经验,当您尝试将纯度提高到100%时,曲棍球运动曲线会有所变化。詹姆斯·海牙说得很好:

100%纯函数式编程不起作用。甚至98%的纯函数式编程也不起作用。但是,如果将函数纯净度与1980年代BASIC式命令式凌乱之间的进行平衡,也就是降低一些等级(例如达到85%),那么它确实起作用。您将获得函数式编程的所有优势,但是却无需付出极大的精力和不可维护性,而这种努力和不可维护性会随着您越来越接近完美的纯净而增加。
用纯函数代码开发系统的大部分是一种可能,也是一个好主意。但是有人必须写出与外界互动的混乱部分。(这部分使用OO封装能降低纯函数的混乱和复杂性)