![]() |
1
1
从学术角度来说,当然 实际文件 是 物体 . 它们有属性,您可以对它们执行操作。并不意味着 文件 是一个 班 只是说,有一些程度的OO需要考虑。 然而,试图说stdio文件接口符合oo的问题在于stdio文件接口不能很好地表示文件的“对象性”。你可以用OO方式在普通的旧C下使用文件,但是你当然会丧失Java或C++提供的语法清晰度。 应该进一步补充的是,虽然您不能从文件生成“继承”,但这进一步取消了它作为OO的资格,但是您可以争辩说,与其将文件作为对象本身的抽象概念,不如说是它的环境(普通C)的错误。 事实上…你可以 可能 为文件做一个类似Java接口的例子。在Linux世界中,您可以通过open/close/read/write/ioctl调用操作几乎任何类型的I/O设备;文件函数仅覆盖在这些函数之上;因此,在文件中,您有一个类似抽象类的东西,它定义了“abstract I/O设备”上的基本操作(open/read/etc),将其留给各种类型的I/O设备。 衍生的 类型通过特定于类型的行为来充实它们。 当然,在一堆C代码中很难看到OO,而且很容易打破抽象,这就是为什么现在实际的OO语言更受欢迎的原因。 |
![]() |
2
3
C是一种面向对象的语言吗? 在创建C和文件时,OOP(面向对象编程)是否不仅仅是一个实验室概念? 回答这些问题会回答你的问题。 编辑: 进一步思考: 面向对象是指几种行为,包括:
虽然有众所周知的C“技巧”来完成类似于这些行为的每一个行为,但这不是内置到文件中的,也不是最初的意图。 我的结论是文件不是面向对象的。 |
![]() |
3
3
如果文件类型是“面向对象的”,那么我们可以用某种有意义的方式从中派生。我从未见过这样一个令人信服的推导实例。 假设我有了新的硬件抽象,有点像一个称为虫洞的套接字。我可以从文件(或套接字)派生来实现它吗?不完全是-我可能需要对操作系统内核中的表做一些更改。这不是我所说的对象方向 但整个问题最终归结为语义。有些人坚持认为任何使用跳转表的东西都是面向对象的,而IBM一直声称他们的AS/400框是面向对象的,通过&到。 对于你们中的那些想陷入疯狂和愚蠢的深渊的人来说,这是一个新闻组,在几年前,这个话题在那里被非常详尽地讨论过,尽管是由那些愚蠢的人讨论的。如果你想拖网这些深度, Google Groups 界面是一个很好的开始。 |
![]() |
4
1
这要看情况而定。你如何定义一个“面向对象的接口”?正如Abbelenky文章的注释所示,很容易构造一个参数,即文件是面向对象的。这取决于你所说的“面向对象”。它没有任何成员方法。但它确实有特定的功能。 它不能从“传统”的意义上衍生出来,但它似乎是多态的。在文件指针后面,实现可以有很大的差异。它可能是一个文件,可能是内存中的缓冲区,也可能是一个套接字或标准输出。 它是密封的吗?实际上,它是作为一个指针实现的。除非对文件调用适当的API函数,否则无法访问文件所在位置的实现细节,甚至无法访问文件名。这听起来像是密封的。 答案基本上是你想要的。如果您不希望文件是面向对象的,那么以文件无法实现的方式定义“面向对象”。 |
![]() |
5
1
C的前半部分是面向对象的。 封装,也就是说,您可以有复合类型,如file*或structs,但不能从它们继承,后者是第二个(尽管不太重要)半部分 |
![]() |
6
1
不,C不是面向对象的语言。 我知道这是一个“绝对答案”,你不想要,但恐怕这是唯一的答案。理由是C不是面向对象的,所以它的任何部分都不能有“面向对象的接口”。 澄清:在我看来 真正的对象定向涉及通过子类型多态性进行方法调度。如果一种语言缺少这一点,它就不是面向对象的。 对象方向不是像GTK那样的“技术”。这是一个语言特性。如果语言缺少这个特性,它就不是面向对象的。 如果面向对象仅仅是一种技术,那么几乎所有的语言都可以称为面向对象,这个术语将不再有任何真正的意义。 |
![]() |
7
0
关于OO有不同的定义。我发现最有用的是以下内容(受Alan Kay的启发):
这意味着您可以使用任何命令式编程语言(甚至汇编程序)以面向对象的方式编程。纯函数语言没有状态变量,这使得OO不可能实现,或者至少难以实现(记住:lisp是 不 纯粹!);纯声明性语言也应该如此。 在C语言中,消息传递通常是作为函数调用实现的,它的指针指向一个将对象状态作为第一个参数的结构,文件处理API就是这样。尽管如此,C作为一种语言不能被归类为OO,因为它没有这种编程风格的语法支持。 另外,OO的一些其他定义包括基于类的继承(那么原型语言呢?)封装——在我看来这并不是真正必要的——但是其中一些可以用C语言实现,并具有一些指针和强制转换的魔力。 |
![]() |
Schadre · C-plus编码错误 2 年前 |
![]() |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 2 年前 |
![]() |
A_K · 使用cat或打印方法打印部分内容的子集闭包 2 年前 |
![]() |
Mo Fatah · 如何使用Python类打印数独板? 2 年前 |