当前位置:  开发笔记 > 编程语言 > 正文

什么使语言面向对象?

如何解决《什么使语言面向对象?》经验,为你挑选了4个好方法。

由于没有有意义的条款的辩论毫无意义,我想我会指出房间里的大象并问:究竟什么语言"面向对象"?我不是在寻找这里的教科书答案,而是根据你在你的领域中运作良好的OO语言的经验,无论它是什么.

一个可能有助于首先回答的相关问题是:面向对象语言的原型是什么?为什么?



1> Jörg W Mitta..:

面向对象的定义当然是一大堆蠕虫,但这是我的2美分:

对我而言,面向对象是关于通过发送消息进行协作的对象.对我来说,这是面向对象语言最重要的一个特征.

如果我必须列出面向对象语言必须具有的所有功能的有序列表,它将如下所示:

    将消息发送到其他对象的对象

    一切都是对象

    后期绑定

    亚型多态性

    继承或类似表达的东西,如代表团

    封装

    信息隐藏

    抽象化

显然,这个列表是非常有争议的,因为它排除了被广泛认为是面向对象的各种语言,例如Java,C#和C++,所有这些都违反了第1,2和3点.但是,毫无疑问那些语言允许面向对象的编程(但C也是如此)甚至可以促进它(C没有).所以,我开始称那些满足这些要求的语言"纯粹面向对象".

作为典型的面向对象语言,我将其命名为Self和Newspeak.

两者都满足上述要求.两者都受到了Smalltalk的启发和接替,并且在某种意义上它们实际上都成了"更多OO".我喜欢Self和Newspeak的东西都是把信息传递到极端(Newspeak甚至比Self还要多).

在Newspeak中,一切都是消息发送.没有实例变量,没有字段,没有属性,没有常量,没有类名.它们都是通过使用getter和setter来模拟的.

在Self中,没有类,只有对象.这强调了OO的真正含义:对象,而不是类.



2> Vaibhav..:

根据Booch的说法,主要内容如下:

抽象化

封装

模块化

层次结构(继承)

次要:

打字

并发

坚持



3> interstar..:

基本上面向对象真的归结为"消息传递"

在过程语言中,我调用这样的函数:

  f(x)

名称f可能在编译时绑定到特定的代码块.(除非这是一个具有更高阶函数或函数指针的过程语言,但是让我们忽略这种可能性.)所以这行代码只能表示一个明确的事情.

在面向对象的语言中,我将消息传递给对象,可能是这样的:

 o.m(x) 

在这种情况下.m不是代码块的名称,但是"方法选择器"和实际调用的代码块实际上以某种方式依赖于对象o.这行代码更加模糊或一般,因为它可能在不同的情况下表示不同的东西,具体取决于o.

在大多数OO语言中,对象o具有"类",并且类确定调用哪个代码块.在几种OO语言中(最着名的是,Javascript)o没有类,但是在运行时直接附加到它的方法,或者从原型继承它们.

我的分界是,语言和OO都不需要类和继承.但这种多态的消息处理至关重要.

虽然你可以用C中的函数指针伪装它,但这不足以让C被称为OO语言,因为你将不得不实现自己的基础结构.你可以这样做,并且OO风格是可能的,但是语言没有给你.



4> aib..:

它不是真正的OO语言,而是代码.

可以编写面向对象的C代码(如果你愿意,可以使用结构甚至函数指针成员),我已经看到了一些相当不错的例子.(考虑到Quake 2/3 SDK.)在C++中编写过程(即非OO)代码也是绝对可能的.

鉴于此,我会说这是语言支持编写好的OO代码,使其成为"面向对象的语言".我永远不会在C中的结构中使用函数指针成员,例如,对于普通的成员函数; 因此我会说C不是OO语言.

(对此进行扩展,可以说Python不是面向对象的,每个步骤都有强制性的"自我"引用,而构造函数称为init,诸如此类;但这是一个宗教讨论.)


对不起,什么?
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有