Java8+的 OOP 含量似乎并没有高过它的 FP 的含量

2024-04-05 05:31:01 +08:00
 TWorldIsNButThis
阅读了一些关于 OOP 语言 smalltalk 的资料

发现 OOP 对于 java 来说,仅仅是一个 a.b()的 notation 和把数据和函数定义在一起的 class 而已,所谓的 everything is an object 没有任何意义,完全是句空话。
这就好像是说 java 其实是一门 FP 语言,因为它支持 higher order functions

object 在 smalltalk 里是非常灵活、高度可交互的

The basic idea of “object” is to invest a “full virtual computer” so it can provide useful services via messages in a machine independent way and with enough encapsulation to be safe against attack.

This also means that everything can and should be an object because (a) a full virtual computer can simulate any other kind of thing, and (b) because this also allows objects to be self-defining, self-documenting, etc.

对了作为高度可互动性的一部分,smalltalk 自然也支持 First-class functions

这帮奉承又不是不能用哲学的、源自机械的死板的汇编的 C 语言的后代真是摧毁了一切富有生机的奇思妙想,而且还到头来还喜欢装模做样的用这些思想的闪光点装点自己的门面

更装模做样的是明明就抄了个皮毛,反倒还规定起了 oop 的三大特性,什么封装继承多态,幽默

还有更典的是那个 receiver ,如果只学过 C like 的所谓 oop 语言,很难理解为什么 a.b()里的 a 叫 receiver 。而在 smalltalk 里这叫向 a 发送一条 b 消息,a 自然就是消息的 receiver
1603 次点击
所在节点    编程
5 条回复
ecnelises
2024-04-05 10:01:45 +08:00
除开 Ruby 这类解释型动态语言不谈,Objective-C 显然更符合 Smalltalk 的理念。可惜的是除开其奇怪的语法,大多数人可能也没有多喜欢这种程度的动态性。
lambdaq
2024-04-05 10:02:17 +08:00
为什么 a.b()里的 a 叫 receiver 。而在 smalltalk 里这叫向 a 发送一条 b 消息,a 自然就是消息的 receiver

发起消息的为啥是受,而不是攻?
june4
2024-04-05 10:28:07 +08:00
那你说 smalltalk 里的发消息和 java 里的调用方法本质的差别是什么?
zjsxwc
2024-04-05 10:51:37 +08:00
“封装、继承、多态”这套以及在最近的现代语言里被抛弃了,
看看 go 、rust 这些谁还有用,

“组合”优于“封装、继承、多态”
poembre
2024-04-09 10:38:48 +08:00
@zjsxwc 👍 “组合”优于“封装、继承、多态”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1029790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX