【发布时间】:2017-12-09 20:11:24
【问题描述】:
我需要一些帮助来定义一个示例来说明为什么 Ruby 中的单继承是一个问题。 单类继承不能解决这个问题。
考虑一下这是一个抽象的例子,说明 Ruby 在 OO 方面面临的限制。我试着举了几个例子,但总是不够用。
我们的想法是使用模块来解决 Ruby 面临的这个问题。
非常感谢任何帮助。如果您在下面看到我的示例,很高兴获得有关它是否证明上述问题的任何反馈。
Person 超类和 Pet 超类不属于同一个类层次结构,但共享同一个实例方法swim。出于这个原因,游泳实例方法被放置在一个模块中,并混合到每个超类中。
module Swimming
def swim
puts 'I can swim'.
end
end
class Person
include Swimming
def initialize(name)
@name = name
end
end
class Boy < Person
end
class Pet
include Swimming
def initialize(name)
@name = name
end
end
class Fish < Pet
end
new_boy = Boy.new('Oliver')
new_fish = Fish.new('Ronald')
【问题讨论】:
-
很难想出一个需要多类继承来解决的问题,尤其是当你有 mixin 模块时。
-
是的,mixin 几乎解决了大多数实际用例的继承问题。您可能会发现在没有 mixin 或特征的 Java 这样的语言中做这样的事情会更容易。
-
我想我的意思是我需要一个不能用单继承解决的问题,只能用 mixin 解决
-
你需要这个做什么?如果很难举出一个例子,那么您的“Ruby 中的单一继承是一个问题”的前提可能有点偏离。
-
可以通过使用 mixins 或其他语言的协议来避免多重继承。没有单继承解决不了的问题。总有办法,问题是解决方案与多重继承相比有多难看。
标签: ruby oop inheritance conceptual