Oop 是否可以只使用过程和全局变量来实现所有4个面向对象编程原则?

Oop 是否可以只使用过程和全局变量来实现所有4个面向对象编程原则?,oop,language-agnostic,language-features,procedural-programming,Oop,Language Agnostic,Language Features,Procedural Programming,这是一个困扰我很长时间的问题 在非面向对象语言(如C语言)中,仅使用过程和全局变量就可以实现面向对象原则(如多态性和继承)吗?我们需要从低级抽象中得到特殊的处理吗 这个问题有意义吗 当然,以面向对象的方式使用像C这样的语言是可能的。多态性可以通过指向函数的指针来模拟(但不要期望通过这种方式获得易于管理的代码)。也许这次讨论 将帮助您获得更多的见解 有没有可能在像C这样的非面向对象语言中实现像多态性和继承这样的面向对象原则 是的,但是正确地执行它需要一些工作,而且在C中执行此操作的库可能会非常麻

这是一个困扰我很长时间的问题

在非面向对象语言(如C语言)中,仅使用过程和全局变量就可以实现面向对象原则(如多态性和继承)吗?我们需要从低级抽象中得到特殊的处理吗


这个问题有意义吗

当然,以面向对象的方式使用像C这样的语言是可能的。多态性可以通过指向函数的指针来模拟(但不要期望通过这种方式获得易于管理的代码)。也许这次讨论

将帮助您获得更多的见解

有没有可能在像C这样的非面向对象语言中实现像多态性和继承这样的面向对象原则

是的,但是正确地执行它需要一些工作,而且在C中执行此操作的库可能会非常麻烦,因为所有指向
Foo
的指针都作为参数传递给
Foo
实例中的函数指针。查看伯克利DB和GTK+。(我必须承认我从未编程到GTK+)


更一般地说,过程语言可以实现OO;那些有闭包的东西使它变得特别容易。

这绝对是可能的。马克·多米努斯(MarkDominus)在同一主题上对此进行了验证。Mark展示了如何仅用C就可以模拟面向对象编程的基本原理


理论上,应该可以使用任何图灵完备语言来模拟OO。这样做所需的工作量可能因语言的能力而异。考虑到我们仍在太空船和其他几个关键系统中使用C,模拟OO似乎是一个相当简单的问题。

让我们等待Lisp程序员说:不,我们从1970年开始就一直在做OO:)我们还有活着的Lisp程序员吗?像Linux桌面用户和独角兽?!:)@sehe:在那里,发布了Lisper的回复。呵呵。非常感谢。当然,这是一种有效的回应。尤其是其他答案。这让我想起了在Intel 80286汇编(与Turbo Pascal 5.5-yeehay互操作)中执行OO的过程。我喜欢lisp。我简直看不懂我写的东西;我倾向于同意“对象是一个穷人的闭包”,只是纯粹的功能风格。@赛赫:我现在不做很多LISP/方案,但是在Python和C++中,我倾向于构建很多的调用/功能,也在非FP风格的代码中。我很高兴C++最终会在下一个标准中获得闭包: