【问题标题】:Is ruby a pure object oriented programming language even though it doesn't support multiple inheritance? Please Explainruby 是一种纯面向对象的编程语言,即使它不支持多重继承?请解释
【发布时间】:2013-07-14 20:29:50
【问题描述】:

Ruby 是一种纯面向对象的编程语言,即使它不支持多重继承?如果是怎么做?请解释一下。

我知道在一定程度上通过允许在一个类中包含多个模块来替代缺乏多重继承。

另外,我不确定纯 OOP 语言的所有先决条件。来自this article,他们提到了

一个 Ruby 类只能有一个具有给定名称的方法(如果您定义 同名方法两次,后一种方法定义 占上风。。

这是否意味着 Ruby 不支持重载方法。如果是这样,它仍然可以作为纯 OOP 语言吗?如果是这样,请解释这背后的原因。

谢谢。

【问题讨论】:

  • 请链接到需要语言支持多重继承的“纯OOP”的定义。
  • 重载与 OOP 几乎没有关系。
  • @DanielHilgarth 我可能不知道纯 OOP 的所有先决条件(这就是我什至在我的问题中提到这一点的原因)。我认为多重继承就是其中之一。我只是看到它似乎并非如此。

标签: ruby oop multiple-inheritance overloading


【解决方案1】:

有几个不同的面向对象语言家族。如果您正在考虑多重继承和方法重载,那么您可能来自 C++ 思维方式,认为这些事情是理所当然的。这些约定来自 C++ 深受其影响的早期语言。

Ruby 并不关心对象的类型,而是对象能够响应的方法。这被称为duck typing,它是将受Smalltalk 启发的语言(如Ruby)与更正式的SimulaALGOL 影响的语言(如C++)区分开来。

使用模块可以“混合”来自各种来源的方法并具有某种多重继承,但严格来说,一个类不可能有多个直接父类。实际上,这通常没什么大不了的,因为继承并不是添加方法的唯一方式。

由于鸭子类型,方法重载在 Ruby 中基本上是无关紧要的。在 C++ 中,您可能有多种方法来处理 stringintfloat 类型,但在 Ruby 中,您将有一种方法可以调用 to_f 并相应地对其进行操作。从这个意义上说,Ruby 方法更像 C++ 模板。

【讨论】:

  • 你完全正确我来自 C++ 背景。 +1 对鸭子类型的定义及其与 Ruby 的相关性。我只想提一件事,我在上述问题的上下文中正在寻找的东西,那些可以让你自信地说的东西(至少其中之一)是什么,是的,Ruby 是一种纯粹的面向对象的编程语言。希望不要问太多。
  • “面向对象”的定义非常宽松,但围绕着对象具有方法和属性的思想。继承组件在某种程度上是次要的,如果需要可以模拟。一切,甚至 Ruby 中的数字,都是对象,所以它是尽可能“纯粹”的,但你仍然可以在程序或函数风格中使用它。
【解决方案2】:

如果多重继承是 OOP 语言的唯一“症状”,那么 Java、C#、Python 以及更多其他语言都不是 OOP 语言。

首先使语言面向对象的是自然对象。一切都是红宝石中的对象。整个语言建立在对象和数据的概念之上。不同的对象之间可以“通信”,可以封装数据等。

看看这个资源:Definitions for ObjectOriented

【讨论】:

  • 链接+1,即使它是这个问题的潘多拉魔盒。
  • 那么我能说 ruby​​ 成为纯粹的面向对象编程语言的原因之一是 ruby​​ 中的一切都是对象,可以与现实世界相关联吗?
  • @sk4l +1 作为第一个恢复 Ruby 是纯 OOP 语言的原因之一是因为 Ruby 中的所有内容都是一个对象,是的,也特别感谢链接,它为不同的人如何看待“面向对象”这个词打开了无限可能的世界。
【解决方案3】:

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

【讨论】:

  • 我毫不怀疑 Ruby 是一门 OO 语言。我只是想更好地理解是什么让 Ruby 纯粹面向对象,因为它不支持多重继承和方法重载。谢谢你的回答。
猜你喜欢
  • 2014-02-26
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多