[英]Is the C programming language object-oriented?
我和一位同事谈论 C 和 C++,他声称 C 是面向对象的,但我声称它不是。 我知道你可以用 C 做类似面向对象的事情,但 C++ 是一种真正的面向对象语言。
你怎么看?
此外,它引发了关于谁决定面向对象意味着什么的讨论,并且很难正式说出面向对象的真正含义。 你对此有何想法?
如果通过“C 是面向对象的吗?” 您的意思是“C 设计的设施是否专门用于支持面向对象的编程?” 那么,不,C 显然不是面向对象的。
您可以使用或多或少的任何语言以面向对象的风格进行编程。 (我认为运行时多态性——即虚拟方法——需要一种支持函数指针的语言。)
下面是几个例子:
C 不是面向对象的。 这就是 ++ 背后的全部目的
至于什么是面向对象的定义:检查wikipedia 。
就个人而言,如果它支持继承、封装和多态,那么你就可以了。 这里的另一个关键是使用类和对象之类的好关键字往往会有所帮助......
真正的面向对象语言(非决定性)的例子是:Smalltalk、Java、c#、Python、Ruby、C++..
此外,还可以通过扩展来提供 OO 功能,例如 PHP、Perl、VB(不是 .Net)……
真正的程序员可以用任何语言编写面向对象的代码。
但是不,C 不是“面向对象”语言。 它没有类、对象、多态、继承的概念。
答案可以是 yes 或 no ,具体取决于:
如果你问“C 是一种面向对象的语言吗?” ,答案是否定的,因为它没有面向对象的构造函数、关键字、语义等......
如果您打算“我可以在 C 中实现 OOP 吗?” ,答案是肯定的,因为OOP不仅是一种语言的要求,也是一种“思考”的方式,一种编程的方法,在接触某种语言之前。 然而,在 C(或任何其他并非本机设计为 OOP 的语言)中实现 OOP 肯定会“强制”并且比任何其他 OOP 语言更难以管理,因此也应该有一些限制。
在“OO”和“语言”的任何定义下,C 不是 OO 语言。
使用 C 作为组件的实现语言非常容易,该组件为其客户端提供 OO API。 从其 API 来看,X Windows 系统本质上是一个单继承 OO 系统,但从其实现来看,则是一堆 C 语言。
混淆可能是 C 可用于实现面向对象的概念,如多态性、封装等,这可能会让您的朋友相信 C 是面向对象的。 问题是要被视为面向对象的编程语言,这些功能需要内置到语言中。 他们不是。
但是如果你知道这个技巧,你可以简单地使用结构、函数指针和自指针轻松地向它添加面向对象的功能。 DirectFB 就是这样一个以面向对象的方式编写的 C 库。 不好的是它更容易出错,因为它不受语法和编译类型检查的约束。 它基于编码约定。
例如
IDirectFB/*a typedef of a struct*/ *dfb = NULL;
IDirectFBSurface/*another typedef of a struct*/ *primary = NULL;
DirectFBCreate (&dfb); /*factory method to create a struct (e.g. dfb) with
pointers to function and data. This struct is
like an object/instance of a class in a language with build-in
syntax support for object oriented capability */
dfb->SetCooperativeLevel/*function pointer*/
(dfb/*self pointer to the object dfb*/,
DFSCL_FULLSCREEN);
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
dfb->CreateSurface/*function pointer, also a factory method
to create another object/instance */
( dfb/*self pointer to the object dfb*/,
&dsc,
&primary/*another struct work as object of another class created*/ );
primary->GetSize/*function pointer*/
(primary/*self pointer to the object primary*/,
&screen_width,
&screen_height);
2 . C++ 是面向对象的,因为它内置了对类和继承等面向对象功能的支持。 但是有人认为它不是完整的或纯粹的面向对象语言,因为它确实允许使用 C 语法(结构化编程语法)。 我还记得 C++ 缺乏一些面向对象的功能,但不能准确地记住每一个。
除非您的朋友在谈论 Objective C(C 的 OO 超集),否则不,C 不是 OO 语言。 您可以使用 C 实现 OO 概念(这是旧的 cfront C++ 编译器所做的,它将 C++ 翻译成 C),但这并不使 C 成为一种 OO 语言,因为它没有专门提供对标准 OO 技术(如多态性或封装)的支持。
是的,您可以用 C 编写 OO 风格的软件,尤其是在自由(ab-)使用宏的情况下,但作为已经看到其中一些尝试结果的人,我强烈建议使用更适合的语言。
真正的程序员可以用任何语言编写面向对象的代码。
我已经看到了Cobol语言的面向对象的。 称为 Cobol 的 Cobol。 你想称这些程序员为“真实的”吗?
C 不是面向对象的语言。 C 是一种通用的命令式语言,支持结构化编程。 因为 C 不是面向对象的,因此 C++ 的出现是为了具有 OOP 功能,而 OOP 是一种围绕对象组织的编程语言模型。 一门语言为了拥有 OOPs 特性需要实现 OOPs 的某些原则。其中很少有继承、多态、抽象、封装。
C 不是面向对象的。
C 不面向对象。
C++确实如此。
尽管 C 本身是作为过程语言构建的(它根据过程“思考”:您首先执行函数 A,然后将输出传递给函数 B 等。它仅支持“开箱即用”的功能程序流),但有可能通过 C 实现 OOP(在 OOP 中,故事由对象及其职责驱动,而不是由函数及其调用顺序驱动)。 事实上,一些早期的 C++ 实现将代码转换为一些 C 代码,然后构建它。 但是,有时您必须使用 C(对于不支持 C++ 等的嵌入式设备/GPU 语言)。 而你想要 OOP。 我建议您查看COOP - 我的 C OOP 轻量级但功能强大的 C 面向对象编程框架。
C 是一种基于对象的语言,它不支持面向对象语言的许多特性,如继承、多态等。
C 不是面向对象的。 C++ 不是面向对象的。 让我解释一下:面向对象是 Simula 旧时尚事件驱动子集的扩展。 真正的面向对象是功能性和反射性的,因为面向对象实际上是一组范式(事件驱动、功能性、反射性)。 只有四种语言是真正面向对象的,它们是 Lisp、Smalltalk、Ruby 和 Ocaml。 Perl 介于两者之间,因为它不起作用。 Scala 不是反射性的,所以也落后了。 C++ 只是使用一些类似 Simula 的工具来驱动事件,但它是完全结构化的编程语言,它不是声明式的,甚至不匹配现实世界。 面向对象将现实世界与功能(数学)、事件驱动(对话)和反射(进化)相匹配。 C++ 只有对话。 C++ 不像数学那样是声明式的,也不像生命一样进化。 C++ 只像人一样交谈。 C++ 就像一个不知道数学如何运作或生命如何进化的白痴。
不,不是,你的朋友错了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.