在cat-v.org上的许多反OOP咆哮中,我发现Joe Armstrong的一段话提出了一些反对OOP模型的异议,其中之一是:
异议4 –对象具有私有状态
国家是万恶之源。特别应避免具有副作用的功能。
尽管编程语言中的状态是不可取的,但在现实世界中,状态比比皆是。我对银行帐户的状态非常感兴趣,当我从银行存款或取款时,我希望银行帐户的状态能够正确更新。
考虑到现实中存在状态,编程语言应提供哪些设施来处理状态?
OOPL说“隐藏程序员的状态”。状态只能通过访问功能隐藏和看到。常规编程语言(C,Pascal)说,状态变量的可见性由该语言的作用域规则控制。纯声明性语言表示没有状态。系统的全局状态包含在所有功能中,并且来自所有功能。诸如monads(用于FPL)和DCG(逻辑语言)之类的机制用于向程序员隐藏状态,以便它们可以“好像状态无关紧要”进行编程,但在必要时可以完全访问系统状态。
OOPL选择的“从程序员隐藏状态”选项是最糟糕的选择。他们没有揭露状态并试图找到最小化状态滋扰的方法,而是将其隐藏了起来。
这到底是什么意思?我几乎没有底层或程序方面的经验,主要是OOP,所以这可能解释了我对此有多么不熟悉。从更现代的角度来看,现在大多数面向对象的歇斯底里都通过了(至少据我所知),你们认为这种通过的准确性/相关性如何?
谢谢你的帮助。