【问题标题】:Is it possible to implement all 4 principles of Object Oriented Programming using only procedures and global variables?是否可以仅使用过程和全局变量来实现面向对象编程的所有 4 个原则?
【发布时间】:2011-05-28 21:39:13
【问题描述】:

这是一个困扰我很久的问题。

是否可以仅使用过程和全局变量在非 OO 语言(如 C)中实现多态性和继承等 OOP 原则?为此,我们是否需要从较低级别的抽象中进行特殊处理?

这个问题有任何意义吗?!

【问题讨论】:

  • 让我们等待 Lisp 程序员说:不,自 1970 年以来我们一直在做 OO :)
  • 我们还有活着的 lisp 程序员吗?喜欢 Linux 桌面用户和独角兽?! :)
  • @sehe:在那里,发布了 Lisper 的回复。

标签: oop language-agnostic language-features procedural-programming


【解决方案1】:

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

http://ootips.org/oop-in-c.html

将帮助您获得更多见解。

【讨论】:

    【解决方案2】:

    是否有可能在像 C 这样的非 OO 语言中实现像多态和继承这样的 OOP 原则?

    是的,但是正确地做这件事需要一些工作,并且在 C 中做这件事的库使用起来可能非常麻烦,因为所有指向 Foo 的指针都作为参数传递给 Foo 实例中的函数指针。查看 Berkeley DB 和 GTK+。 (我必须承认我从未编写过 GTK+。)

    更一般地说,过程语言可以做 OO;那些有闭包的使它成为特别的。从objects are a poor man's closures开始很容易。

    【讨论】:

    • 呵呵。非常感激。当然,这是一种有效的响应类型。尤其是其他答案。这让我想起了在 Intel 80286 程序集中做 OO(与 Turbo Pascal 5.5 互操作 - yeehay)。我爱口齿不清。我根本看不懂我写的东西;我倾向于仅在纯功能风格中同意“对象是穷人的闭包”。
    • @sehe:这些天我没有做太多的 Lisp/Scheme,但是在 Python 和 C++ 中,我倾向于构建大量的可调用/函数,也在非 FP 样式的代码中。我很高兴 C++ 最终会在下一个标准中获得闭包 :)
    【解决方案3】:

    这绝对是可能的。查看 Mark Dominus 关于同一主题的 article。 Mark 展示了如何仅使用 C 来模拟面向对象编程的基本原理。

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

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 2014-08-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2012-09-11
      • 2012-03-03
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多