为什么OO糟糕的乔阿姆斯特朗(2000)

2021-03-26 20:19:57

当我第一次介绍OOP的想法时,我持怀疑态度,不知道为什么 - 它只是觉得“错误”。在它引入oopbecame之后非常受欢迎(我将解释为什么以后)并批评像“在教堂咒骂”这样的oop。 Ooness成为刚刚拥有的所有门口的语言。

随着erlang变得流行我们经常被问到“是erlang oo” - 当然,真正的答案是“当然不是” - 但我们没有大声说出来 - 所以我们发明了一个严肃的巧妙方式的问题这是旨在给人的印象,即erlangwas(有点)oo(如果你挥手了很多),但不是真的(如果是你实际上所说的话,并仔细阅读小字)。

此时,我提醒在法国的IBM of IBM的主题演讲,他们在巴黎的第7届IEEE Logicagramming会议上讨论了观众。 IBM Prolog添加了很多ooextensions,当被问及为什么他回答:

我记得思考“有多么简单,良心,诺萨尔搜索,没有问"这是正确的事情”......

我对OOP的原则反对追溯到所涉及的基本想法,我将概述其中一些想法和对他们的反对意见。

对象绑定功能和数据结构在一起不可分割的单位。我认为这是一个根本错误,因为功能和数据结构属于完全不同的世界。为什么是这样?

*功能做事。他们有输入和输出。输入和输出量是数据结构,其通过函数更改。最黑色的函数是从命令员的序列构建的:“dothis然后那个......”了解你必须了解完成事情的顺序(在懒惰的FPLS和逻辑andlecysthis限制中放宽)。

数据结构就是。他们什么都不做。它们是内在的偏振。 “了解”数据结构比“了解”功能更容易。

函数被理解为变换输入待消费的黑匣子。如果我理解输入和输出,那么我覆盖了该功能。这并不意味着说我可以写入该功能。

通过观察它们是计算系统中的东西,通常“理解”的功能通常是在T2型数据结构中转移T1类型的数据结构。

由于函数和数据结构是完全不同的类型,因此在同一笼子中锁定它们是根本的不正确。

考虑“时间”。在OO语言中,“时间”必须是一个对象。在非OO语言中,“时间”是数据类型的实例。例如,在erlang中有很多不同的时间,这些可以清楚地明确地指定类型声明,如下所示:

-deftype day()= 1..31.-deftype月份()= 1..12.-deftype年()= int().- deftype小时()= 1..24。-deftype mimon()= 1 ..60.-deftype second()= 1..60.-deftype abstime()= {abstime,年(),月(),day(),小时(),min(),sec()} .- deftype hms()= {hms,hours(),min(),sec()} ....

请注意,这些定义不属于任何特定对象。它们是无处不在的,并且代表时间的数据结构可以通过系统中的任何功能Bippute。

异议3 - 在OOPL数据类型定义中分布在整个地方

在OOPL数据类型定义中属于对象。因此,我无法在一个地方找到数据类型定义。在erlang或c中,我可以在单个包含文件或数据字典中确定我的数据类型。在一个OOPLI中,无法 - 数据类型定义遍布到处。

让我举个例子。假设我想定义辅助数据结构。无处不在的数据类型是数据类型,在系统中发生“全部遍布”。

随着Lisp程序员长期以来,它更好地HAVEA占据了无处不在的数据类型和对它们的大量小型功能,而不是拥有大量数据类型和对它们工作的少量功能。

无处不在的数据结构类似于链接列表,或者散列表或哈希表或更高级对象,如时间或日期或文件名。

在一个OOPL中必须选择一些基础对象,其中我将默认的数据结构彻底,所有想要的数据结构都必须继承此对象。假设现在我想要一些“时间”对象,这属于哪些对象......

国家是所有邪恶的根源。特别是具有副作用的功能应该避免。

虽然在RealWorld StateBounds中,在编程语言中的状态是比比。我对我的银行业的状态非常感兴趣,当我从银行存入或取款时,我预计我的银行账户的状态被正确更新。

鉴于现实世界存在的状态存在哪些有限公司的编程语言提供处理状态?

OOPLS说“隐藏程序员的状态”。只能通过访问功能隐藏和可见状态。

传统的编程语言(C,Pascal)表示,状态变量的可见性由语言的范围规则控制。

全球和谐的状态被带入所有职能,并从所有函数中出来。Monad(FPLS)和DCGS(逻辑语言)等机制用于从程序员那样用于将状态进行,因此他们可以编程“仿佛似乎并不重要”但是,应该完全访问系统的状态。

OOLTS选择的“隐藏程序员的状态”选项是Worworse可能的选择。他们不是揭示国家和特生来寻找最小化状态滋扰的方法,而是隐藏它。

我没有看到1和2的证据。原因3和4似乎是技术背后的推动力。如果语言技术如此糟糕,那就创造了一个新的行业来解决自己的问题问题,这对想要赚钱的人来说一定是一个好主意。