Ruby是一种纯面向对象的编程语言,即使它不支持多重继承?

au9on6nz  于 2023-05-17  发布在  Ruby
关注(0)|答案(3)|浏览(120)

我知道在某种程度上,通过允许一个类中包含多个模块来替代多重继承的缺失。
而且,我不确定纯OOP语言的所有先决条件。this article中提到
一个Ruby类只能有一个给定名称的方法(如果你用相同的名称定义了一个方法两次,后面的方法定义为准。
那么这是否意味着Ruby不支持重载方法呢?如果是这样的话,它仍然可以作为一个纯粹的OOP语言?这背后的原因又是什么呢?

zlwx9yxi

zlwx9yxi1#

有几个不同的面向对象语言家族。如果您正在考虑多重继承和方法重载,那么您可能来自C思维模式,这些东西被认为是理所当然的。这些约定来自早期的语言,C深受其影响。
Ruby并不关心对象的类型,而是关心它们能够响应的方法。这被称为duck typing,它将受Smalltalk影响的语言(如Ruby)与受SimulaALGOL影响的更正式的语言(如C++)区分开来。
使用模块,可以“混合”来自不同来源的方法并具有某种多重继承,但严格来说,一个类不可能有多个直接父类。在实践中,这通常不是什么大问题,因为继承不是添加方法的唯一方法。
因为duck-typing,方法重载在Ruby中基本上是不相关的。在C中,你可能有各种各样的方法来处理stringintfloat类型,但在Ruby中,你会有一个方法来调用to_f并相应地操作它。从这个意义上说,Ruby方法更像C模板。

quhf5bfb

quhf5bfb2#

如果多重继承是OOP语言的唯一“症状”,那么Java、C#、Python和其他许多语言都不是OOP语言。
首先,使语言成为面向对象的自然是对象。在Ruby中,一切都是对象。整个语言是建立在对象和数据的概念上的。不同的对象可以相互“通信”,可以封装数据等
看看这个资源:Definitions for ObjectOriented

pokxtpni

pokxtpni3#

首先,多重继承的问题只对面向对象语言有意义。Ruby的多重继承问题本身就证明了Ruby是一种面向对象的语言。

相关问题