面向对象的本质是分封制,函数式是官僚制(以go为例)

m
minquan
楼主 (未名空间)


golang去打碎面向对象编程,即类和实例,做得很非常彻底。

如果是类型编程,你可以用一个类型模板,创立多个实例,而各实例的数据可以调用类型的方法进行改变。则从程序的定义来讲,各实例自己已经成为程序了,程序即数据+
函数(改数据)。那么各实例的交互,就相当于各子程序的交互。

这样比较容易形成黑箱,也比较适合分清责任。我尚不知道运行上有什么优势,但是似乎传统线程都必须做成一个对象。golang相应的也取消了传统线程。

从系统安全性角度来讲,似乎是分封制更冗余一些,如果各个实例自己拥有数据和全部函数,那么一个实例失败不会波及别的实例。

相应的,golang坚决把实例的函数从数据中剥夺出去。处理实例的专有函数可以改实例的状态数据,然而不属于实例——这就相当于技术官僚。而各实例只留下数据,即领土,却不能自我封闭成独立王国,必须等技术管僚或曰钦差大臣来处理事务。

从编译的角度讲,似乎golang很难把类型独立拆成动态库?
c
chebyshev
https://www.toptal.com/go/golang-oop-tutorial
golang可以凑合弄一个OO。

【 在 minquan (三民主义) 的大作中提到: 】
: golang去打碎面向对象编程,即类和实例,做得很非常彻底。
: 如果是类型编程,你可以用一个类型模板,创立多个实例,而各实例的数据可以调用类
: 型的方法进行改变。则从程序的定义来讲,各实例自己已经成为程序了,程序即数据+
: 函数(改数据)。那么各实例的交互,就相当于各函数的交互。
: 这样比较容易形成黑箱,也比较适合分清责任。我尚不知道运行上有什么优势,但是似
: 乎传统线程都必须做成一个对象。golang相应的也取消了传统线程。
: 从系统安全性角度来讲,似乎是分封制更冗余一些,如果各个实例自己拥有数据和全部
: 函数,那么一个实例失败不会波及别的实例。
: 相应的,golang坚决把实例的函数从数据中剥夺出去。处理实例的特有函数可以改实例
: 的状态数据,然而不属于实例。这就相当于了技术官僚,而各实例只留下数据,即领土
: ...................

m
minquan

谢谢,我有空去看看。
【 在 chebyshev (......) 的大作中提到: 】
: https://www.toptal.com/go/golang-oop-tutorial
: golang可以凑合弄一个OO。