C 的 FILE 有面向对象的接口吗?

6 c oop

FILE通过标准 C 函数fopen等使用的类型是否具有面向对象的接口?

我正在寻找带有推理而非绝对答案的意见,因为 OO 的定义因您问的人而异。它满足或不满足哪些重要的 OO 概念?

为了回应下面 JustJeff 的评论,我不是在问 C 是否是一种面向对象的语言,也不在问 C 是否(容易与否)允许面向对象编程。(这不是一个单独的问题吗?)

Jus*_*eff 1

从学术上来说,实际的文件当然是对象。它们具有属性,您可以对它们执行操作。并不意味着FILE是一个,只是说,有不同程度的面向对象需要考虑。

然而,试图说 stdio FILE 接口符合 OO 的麻烦在于,stdio FILE 接口不能很好地表示文件的“对象性”。您可以以面向对象的方式在普通的旧 C 下使用 FILE,但当然您会失去 Java 或 C++ 提供的语法清晰度。

也许应该进一步补充一点,虽然您无法从 FILE 生成“继承”,但这进一步使其失去了 OO 的资格,但您可能会认为这更多是其环境(纯 C)的错误,而不是文件作为的抽象概念- 对象本身。

事实上..您可能会认为FILE 是类似于 java 接口的东西。在linux世界中,你可以通过open/close/read/write/ioctl调用来操作几乎任何类型的I/O设备;FILE 函数只是在这些函数之上;因此,在 FILE 中,您有类似抽象类的东西,它定义了“抽象 i/o 设备”上的基本操作(打开/读取/等),将其留给各种派生类型来充实那些特定于类型的类型行为。

诚然,很难在一堆 C 代码中看到 OO,而且很容易破坏抽象,这就是为什么现在实际的 OO 语言如此流行。

  • 亲自?不。我认为面向对象最终在于设计。事实上,某些语言的语法允许仅通过实现来表达设计的这些方面,这只是一个优点。相比之下,有大量用 Java 完成的经典过程/结构化编程,并被吹捧为“面向对象”,只是因为“该语言是面向对象的”,就好像该语言的面向对象特性以某种方式渗透到其中呈现的任何内容一样。本质上是面向对象的。 (2认同)