agosto 04, 2006

Polimorfismo

Polimorfismo viene de la raíz del Griego polu (muchos) y morphe (forma), y significa en términos de computación una entidad que puede tener múltiples formas o comportamiento diferente. En el caso especifico de herencia significa que las clases derivadas pueden tener comportamientos diferentes para el mismo método.
Ejemplo de un metodo sencillo

Public Class Empleado
Inherits Person
Protected m_salario as Decimal
‘El resto del código omitido
Public Function PagoMensual() as Decimal
Return m_salario / 12
End Function

Public Class Empleado
Inherits Person
Protected m_salario as Decimal
‘El resto del codigo omitido
Public Overridable Function PagoMensual() As Decimal
Return m_salario/12
End Function
End Class

Sobre escribiendo el metodo en una clase derivada

Public Class EmpleadoVentas
Inherits Empleado
Protected m_bonoExtra as Decimal
‘el resto del codigo omitido
Public Overrides Function PagoMensual() as Decimal
Return (m_salario / 12) * (1+ m_bonoExtra)’Es el porcentaje del bono
End Function
End Class

Public Class Gerente
Inherits Empleado
Protected m_bono as Decimal
‘El resto del codigo omitido
Public Overrides Function PagoMensual() as Decimal
Return MyBase.PagoMensual() * m_bono
End Function
End Class

Como podemos ver de este ejemplo, usamos Overrides para los métodos en las clases derivadas para especificar que vamos a sobreescribir el comportamiento de un método declarado en la clase base. Podemos acceder de un método que fue Overridable (se puede sobre escribir) en una clase derivada y utilizar la implementación del método utilizando la palabra MyBase.

La razón por la que el polimorfismo es una técnica tan popular en la programación orientada a objetos es el hecho de que el compilador conoce que tipo de objeto esta tratando. Aun así de que el objeto se use a través de una referencia de su clase base.

Es importante que entendamos que hay una diferencia fundamental entre el concepto de sobrecargo (overloaded) en métodos y propiedades y el concepto de polimorfismo Sobre escritura de métodos y propiedades (overridable methods and properties). Sobrecargo (Overloading) significa tener mas de un método con el mismo nombre, pero un listado diferente de argumentos (numero, orden o tipo), en la misma clase o en combinación de las clases base o derivadas. Sobrescribir (Overriding) un método significa tener un método con el mismo nombre y los mismos argumentos en una clase derivada, un metodo que sera llamado automáticamente cuando un objeto de la clase derivada es el objetivo de la invocación. Cuando un método sobrecargado es llamado, esta determinado por el que lo llama. Cuando se llama a un método Sobrescrito (Overridden), el programa decodifica la implementación del método a llamar (la clase base o la clase derivada) dependiendo del tipo.


Un comportamiento existente de una clase base puede ser completamente redefinido o sobreescrito en una clase derivada, pero solo si el programador de la clase base lo hace permisible. Para que un metodo pueda ser sobrescrito (overridden), debe de ser declarado usando el modificador Overridable.

No hay comentarios.: