Oop 除了经典的基于类的方法之外,你能想象其他实现OO的方法吗?

Oop 除了经典的基于类的方法之外,你能想象其他实现OO的方法吗?,oop,class,Oop,Class,我最近一直在思考很多关于基于类的面向对象方法的替代方法。 在今天的语言中,有一件事让我感到困扰,那就是我们经常使用,因为没有其他方法可以做到这一点,所以在我看来,这与其说是一个特性,不如说是一个黑客。 另一件事是,例如Java允许程序员使用它,使他们成为我眼中的对象 无论如何,我想知道的是,您是否有任何想法,可以用一种编译好的高效语言来实现不同的面向对象方法(因此,通过原型创建对象可能不是一个好主意),或者,如果您没有想法,在经典的OO方法中是否也有一些东西让您感到非常困扰 [编辑]: 我只是想

我最近一直在思考很多关于基于类的面向对象方法的替代方法。 在今天的语言中,有一件事让我感到困扰,那就是我们经常使用,因为没有其他方法可以做到这一点,所以在我看来,这与其说是一个特性,不如说是一个黑客。 另一件事是,例如Java允许程序员使用它,使他们成为我眼中的对象

无论如何,我想知道的是,您是否有任何想法,可以用一种编译好的高效语言来实现不同的面向对象方法(因此,通过原型创建对象可能不是一个好主意),或者,如果您没有想法,在经典的OO方法中是否也有一些东西让您感到非常困扰

[编辑]: 我只是想说清楚。如上所述,我已经了解了基于原型的编程。

请查看。

请查看。除了异步之外,它有点像类。如果每个参与者都是一个有限状态机,那么您将拥有一个潜在强大的系统

有人告诉我,Erlang使用类似的东西。。。至少相似。actor模型的要点是它不需要纯粹实现,因此不需要成为Erlang的一部分


几年前,我创建了一种使用该模型的小型语言。我可能会在某个时候再试一次。

我认为您在定义“经典OO”方法时遇到了问题。是在Objul-C经典方法还是在标准C++中的静态方法?< /P> 在函数式语言中,让非对象函数在某种意义上像对象一样工作是很容易的,因为它们返回的函数的实现是不透明的。例如,Scheme中的以下代码

(define (create-ball color)
    (lambda (attribute-name)
       (if (equal? attribute-name "color")
            color
            "method-not-supported"))))

将输出一个函数,该函数不是正式的“对象”,但它可以像一个函数一样运行,因为它存储状态,但您不太清楚您所接触到的面向对象范例到底出了什么问题。

既然我的阻燃服安全可靠,我可以说:我不喜欢OOP

我对它的中心问题是,它试图提出一个单一的分类法,其中每个功能单元都真正属于这个分类法

这有几个问题。首先,产生一个好的分类是困难的。人们不善于创造它们。第二,我不相信你真的可以构建一个合理的、可维护的、能够承受包含大量实体的项目变化的层次结构;重构的整个实践基本上承认了创建大型、所有不兼容分类法的困难

事实上,我认为OOP设计过度了。用OOP可以做的一切都可以用高阶函数(HOF)来完成。对于OOP试图解决的相同问题,HOF是更优雅、更灵活的解决方案


因此,如果你想用另一种方法来实现OOP风格的东西,那么HOFs可能是最接近的替代技术,具有类似的灵活性。

深入了解基于原型模型的javascript,或者查看lua,它有一种实现面向对象的奇怪方法。

了解CLOS,它基本上是基于函数/方法的。

谷歌的Go语言采用了一种截然不同的面向对象方法,也许值得一看

我在很多方面都同意。我唯一不同意的是OOP就像一个正则表达式。使用它一点,它会组织你的生活。过多地使用它,会增加bug。我觉得霍夫在这方面完全一样。只是出于好奇,这是干什么用的?你在设计语言吗?是的,我是。扫描器+解析器已经完成,但是当我在语义分析的实施过程中,我开始问我自己上面的问题。目前,该项目的冰,因为我还没有找到一个很好的解决方案(不幸的是,我是完美主义者)。不过,这并不意味着我不再考虑这个问题我的OOP代码通常看起来非常像演员。接口是消息定义。大多数方法都是无效的。“实体”和“价值”之间有着强烈的区别。这也使得大多数设计模式更有意义:)