C编程语言是面向对象的吗?

Bri*_*nan 42 c oop standards

我正在与一位同事谈论C和C++,他声称C是面向对象的,但我声称它不是.我知道你可以在C中做类似面向对象的事情,但C++是一种真正的面向对象语言.

你的想法是什么?

此外,它引发了关于谁决定面向对象意味着什么的讨论,并且很难说出面向对象的真正意义.你对此有何看法?

Jam*_*lis 61

如果"是C面向对象?" 你的意思是"C是否设计了专门用于支持面向对象编程的设施?" 那么,不,C显然不是面向对象的.

  • +1说一种语言的唯一方法就是"插入范式",即断言它是否有助于或强化语言结构的范式. (23认同)

Tim*_*son 19

您可以使用或多或少的任何语言以面向对象的方式进行编程.(我认为运行时多态 - 即虚方法 - 需要一种支持函数指针的语言.)

以下是几个例子:

  • 我记得有一位同事读过OO Perl.我撇去了这本书,我的灵魂颤抖着 (5认同)
  • 我的函数指针评论:我挑战任何人在BASIC中编程OO(原始的,而不是这个Visual的东西) (2认同)

Not*_*tMe 10

C不是面向对象的.这就是++背后的全部目的

至于面向对象需要什么的定义:检查维基百科.

就个人而言,如果它支持继承,封装和多态,那么你的好处就是去.这里的另一个关键是拥有像class和object这样的好关键词有助于......

面向对象的真实语言(非结论性)的例子有:Smalltalk,Java,c#,Python,Ruby,C++ ..

此外,还可以扩展以提供PHP,Perl,VB(非.Net)等OO功能,......

  • @Roger Pate:"假"是那些拥有像vb.net和php这样的OO贴面的人.它们不是从OO角度构建的,但确实为OO开发提供了至少一些工具. (4认同)
  • 如果那些是 ["real"](http://stackoverflow.com/questions/3222316/what-is-a-real-programming-language/3226182#3226182) OO 语言,是否有假的? (2认同)

Rod*_*ddy 9

真正的程序员可以用任何语言编写面向对象的代码.

但不,C不是一种"面向对象"的语言.它没有类,对象,多态,继承的概念.

  • 我同意 - 用任何语言编写面向对象代码都是可能的。我最近重构了一个遗留的 C 程序,将模块划分为命名空间,并将所有相关代码和变量放在一起。令人惊奇的是它如何提高了程序的可维护性 - 必须亲眼所见才能相信(诚然,它需要 C++ 编译器来支持命名空间,但我相信命名空间无论如何都应该是 C 的一部分)。 (2认同)

bzi*_*age 5

答案可以是 yes 或 no,具体取决于:

  • 如果你问“C 是一种面向对象的语言吗?” ,答案是否定的,因为它没有面向对象的构造函数、关键字、语义等......

  • 如果您打算“我可以在 C 中实现 OOP 吗?” ,答案是肯定的,因为OOP不仅是一种语言的要求,也是一种“思考”的方式,一种编程的方法,在接触某种语言之前。然而,在 C(或任何其他并非本机设计为 OOP 的语言)中实现 OOP 肯定会“强制”并且比任何其他 OOP 语言更难以管理,因此也应该有一些限制。