..


赞助商链接

Ruby中的多态性与鸭打字

写文章的阿莱西奥Saltarini
第1 2

多态性是一种编程技术,允许使用的源代码部分,而其余不变,产生的运行时行为。

创建多态代码中的面向对象编程的具体含义:它意味着创建一个类的所有实现接口的分类。

因此,举个例子,我的接口定义了一个方法“函数getArea”,每类将实现此接口将有一个方法“函数getArea”:这使我们能够编写多态方式,方法,可以改变他们的算法的执行根据不同的对象类型作为参数传递。

多态性在传统OOP语言

在Java中 - 但同样适用于C + +和其他语言,面向对象(OO)完成后,我们将手中的红宝石的情况下 - 例如:






接口IFormaGeometrica







 {



   



无效函数getArea();







 }









公共类三角实现IFormaGeometrica







 {



 



 @覆盖



 



公共INT函数getArea()



 



 {



  



返回(* this.base this.altezza)/ 2;



 



 }







 }



在这种情况下,我们定义接口IFormaGeometrica其中规定,每一个对象“是”FormaGeometrica 函数getArea将有一个方法-如三角班,这是一个FormaGeometrica,有它自己的函数getArea实施,这使得我们可以写一个程序能够计算出任何几何形状的面积,无论是现在的代码存在,而且将实施在未来不改变原始的源代码。

事实上,如果我写一个类Calculator:






市民最后级计算器







 {





 



公共静态无效的主要(字串[] args)



 



 {



  



收集表格<IFormaGeometrica> =



          



 <IFormaGeometrica>新的ArrayList();





  



 forme.add(新三角());



  



 forme.add(新广场());



  



 forme.add(新五角大楼());





  



为(IFormaGeometrica G:形式)



  



 {



   



 System.out.println(g.calcolaArea());



  



 }



 



 }







 }



这可以作为输入任何几何形状的集合,但集合中的每个对象必须实现接口IFormaGeometrica,并具有本质上是一个方法函数getArea。 这是纯学术的Java示例:其实,很可能在每个类的构造函数,我们将包括的几何形状,双方投入的倾斜措施,等等。

我们的目标是实现:我们写了一个类,可以打印到视频的任何几何形状的面积。 我再说一遍:这是,已经实施(如在三角形的情况下)的代码,目前正在实施中的未来。

不仅:如果三角形的面积计算的实施包含一个错误,我可以改变,而无需重写类三角计算器 也许是部署在服务器上,需要重新启动每一个变化:在这种情况下不用更改代码是一大优势。 但除此之外,它始终是有利的,限制部分的代码“变”,因为它带来的每一个变化与潜在的错误。 相反,它是一个很好的编程习惯总是肯定地知道哪些代码部分保持不变。

会发生什么“幕后”的是,编译器可以确保每一个在计算器之类的main方法的多态代码对象实现了接口。 通过这种方式,他们说是一个表达式使用的合同设计方法,“重合同得到尊重。”

如果不是这样,如果在“形式”是有一个类对象,我们将不执行IFormaGeometrica编译时错误或不管理运行程序,因为编译器会发现错误。

在Ruby的 ​​多态

但是在Ruby中会发生什么? 而“在Ruby中,这是不编译,但解释语言,文字多态方法可能吗?

是的,这当然是可能的,但有一个深刻的差异“哲学”不是面向对象的语言和编译,这

我们可以形容它。 在Java和面向对象编程的经典,建立一个对​​象属于一个特定类型的对象(即实现了某个接口)需要明确对象从父类派生:基本上你需要使用继承技术(继承一类,抽象类或接口)。

这就好比说:要确定这是否是在我面前鸭,我在他的DNA实验室和研究,看看它是鸭。

在Ruby中使用的是“鸭测试”(鸭子测试)由詹姆斯莱利(见发明http://en.wikipedia.org/wiki/Duck_typing ):

如果它像鸭子,叫起来像鸭子走,那么它就是鸭子。

(这亦是什么使我们每个人,当他看到一只鸭子)。

这是什么意思? 这意味着,在Ruby中,一般多在面向对象的脚本语言,以及Python和Perl,无需指定的接口,既没有明确的类之间的继承关系。

该解释仅仅是“信任”,程序员,方法步骤时,多态对象,“应该有”一定的方式,我们实际上有。

在同一类...
电子学习
Ruby和Ruby on Rails的(课程) Ruby和Ruby on Rails的(课程)
创建Ruby和RoR的软件和Web应用程序。 从39€。
赞助商链接