..
有时你要创建的对象中有“本”功能类,但也“这个”和“这等”,这也许是在其他地方已经被写入我们的源代码。
换句话说,我们要创建一个类,借用方法和源代码的其他部分,或在某些库中定义的属性。
相反,我们将聚集在相同的功能在一个地方接触到我们所有的源代码。 如何?
纯粹主义者震惊的是面向对象编程和支持 - 在我看来完全不是没有理由 - 即每一个这种类型的需要,可以与多态的正确使用解决。
其他人,特别是如果他们从经验中得出类似的语言C + +,认为因为这些使用多重继承要求,准确。
像Ruby务实的语言,但是,通过提供所谓的“混入”的技术,名称的问题 - 它的声音! - 一个冰淇淋男子给了她各种口味的冰淇淋组成的Massuchussets(奶油,巧克力... ...)
Ruby的 混入
从技术上讲,红宝石混入内实现类,在(模块)使用不同的模块中定义的代码。
举一个简单的例子,假设我想实现一个文字处理器,可自动打印出我对商业信函友好。 既然你要只输入必要的数据,即收件人和消息。 该方案将考虑不同的友好一样,“先生”和“真诚”。
让我们开始在友好的形式定义:
模块CordialitaLettera
DEF启动(地址)
返回“亲爱的先生。”+收件人+“\ n”
年底
最后的签名(函)
返回字母+“\ n”+“真诚,\ nCarlo史密斯”
年底
年底
特别是没有的话,只有两种方法,可以改变文本输入收到。
让我们写一个类“混”到这些方法,只是一个mixin:
类书
包括CordialitaLettera
最后stampaLettera(收件人,消息)
=开始点(接收器)
=字母+后
放签名(函)
年底
年底
上述信件类有一个方法,作为输入,在模块中定义友好的格式只信可变部分。
正如你可以看到语法非常相似,在Ruby继承,但是,不同的是后者, 在一个类可以实现任何形式的数量 -作为知道,一个类可以从派生且只有一个父类(红宝石不支持多重继承!)
例如,我们可以这样写:
DEF的主要()
Lengin = Lettere.new
lEngine.stampaLettera(“阿莱西奥Saltarini”,
“我只是进行转让
你的要求。“)
放
lEngine.stampaLettera(“马太效应Pisconi”,
“我将传真发送给nr.038283873。”)
年底
它返回:
亲爱的sig.Alessio Saltarini, 我刚刚做了你要求转让。 此致 卡罗罗西
亲爱的sig.Matteo Pisconi, 我将传真发送给nr.038283873。 此致 卡罗罗西这其中包括技术,使我们能够吸收的mixin的Java接口中使用:事实上,如果一个类是“混合”的一种形式,实际上它会执行方法(因此符合一定的接口) 。