..
多态性是一种编程技术,允许使用的源代码部分,而其余不变,产生的运行时行为。
创建多态代码中的面向对象编程的具体含义:它意味着创建一个类的所有实现接口的分类。
因此,举个例子,我的接口定义了一个方法“函数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,无需指定的接口,既没有明确的类之间的继承关系。
该解释仅仅是“信任”,程序员,方法步骤时,多态对象,“应该有”一定的方式,我们实际上有。