ruby 是一种纯面向对象的编程语言,即使它不支持多重继承?如果是这样怎么办?请解释一下。
我知道在某种程度上通过允许在一个类中包含多个模块来替代缺乏多重继承。
另外,我不确定纯 OOP 语言的所有先决条件。从这篇文章中,他们提到
一个 Ruby 类只能有一个具有给定名称的方法(如果您定义了两次具有相同名称的方法,则以后一种方法定义为准。.
这是否意味着 Ruby 不支持重载方法。如果是这样,它仍然可以作为纯 OOP 语言吗?如果是这样,请解释这背后的原因。
谢谢你。
ruby 是一种纯面向对象的编程语言,即使它不支持多重继承?如果是这样怎么办?请解释一下。
我知道在某种程度上通过允许在一个类中包含多个模块来替代缺乏多重继承。
另外,我不确定纯 OOP 语言的所有先决条件。从这篇文章中,他们提到
一个 Ruby 类只能有一个具有给定名称的方法(如果您定义了两次具有相同名称的方法,则以后一种方法定义为准。.
这是否意味着 Ruby 不支持重载方法。如果是这样,它仍然可以作为纯 OOP 语言吗?如果是这样,请解释这背后的原因。
谢谢你。
有几个不同的面向对象语言家族。如果您正在考虑多重继承和方法重载,那么您可能来自 C++ 思维方式,认为这些事情是理所当然的。这些约定来自 C++ 深受影响的早期语言。
Ruby 不关心对象的类型,而是关心它们能够响应的方法。这被称为鸭子类型,它是将受Smalltalk启发的语言(如 Ruby)与更正式的Simula或受ALGOL影响的语言(如 C++)区分开来。
使用模块可以“混合”来自各种来源的方法并具有一种多重继承,但严格来说,一个类不可能有多个直接父类。实际上,这通常没什么大不了的,因为继承不是添加方法的唯一方式。
由于鸭子类型,方法重载在 Ruby 中基本上是无关紧要的。在 C++ 中,您可能有各种处理或类型的方法string
,但在 Ruby 中,您将拥有一种调用任何传入的方法并相应地对其进行操作的方法。从这个意义上说,Ruby 方法更像 C++ 模板。int
float
to_f
如果多重继承是 OOP 语言的唯一“症状”,那么 Java、C#、Python 等也不会是 OOP 语言。
使语言面向对象的首先是自然对象。一切都是红宝石中的对象。整个语言建立在对象和数据的概念之上。不同的对象可以相互“通信”,可以封装数据等。
看看这个资源:ObjectOriented 的定义。
首先,多重继承的问题只对面向对象的语言有意义。用 Ruby 本身询问多重继承的问题证明了 Ruby 是一种面向对象的语言。