Ver Mensaje Individual
  #11 (permalink)  
Antiguo 02/03/2006, 16:48
Avatar de Fann_Lavigne
Fann_Lavigne
 
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 20 años
Puntos: 12
El problema radica en esto: Recopilado de la MSDN Visual Studio 6.

Cita:

Cómo proporciona Visual Basic el polimorfismo



La mayoría de los sistemas de programación orientada a objetos proporcionan polimorfismo mediante la herencia. Es decir, las hipotéticas clases Pulga y Tiranosaurio pueden heredar características de una clase Animal. Cada clase invalidaría el método Morder de la clase Animal para aportar sus propias características de mordedura.

El polimorfismo proviene del hecho de que puede llamar al método Morder de un objeto que pertenezca a cualquier clase derivada de Animal sin conocer la clase a la que pertenece el objeto.

Proporcionar polimorfismo mediante interfaces

Visual Basic no utiliza la herencia para proporcionar polimorfismo. Visual Basic proporciona el polimorfismo mediante múltiples interfaces ActiveX. En el Modelo de objetos componentes (COM) que forma la infraestructura de la especificación ActiveX, las múltiples interfaces permiten que los sistemas de componentes software evolucionen sin afectar al código existente.

Una interfaz es un conjunto de propiedades y métodos relacionados. Gran parte de la especificación ActiveX se ocupa de la implementación de interfaces estándar para obtener servicios del sistema o para proporcionar funcionalidad a otros programas.

En Visual Basic podría crear una interfaz Animal e implementarla en las clases Pulga y Tiranosaurio. Después podría invocar el método Morder de cualquiera de los dos tipos de objeto sin conocer su tipo.

Polimorfismo y rendimiento

El polimorfismo es importante por razones de rendimiento. Para comprobarlo, observe la función siguiente:

Public Sub GetFood(ByVal Critter As Object, _ByVal Food As Object) Dim dblDistance As Double ' Código para calcular la distancia a la comida '(omitido). Critter.Mover dblDistance ' Enlace en tiempo de ' compilación Critter.Morder Food ' Enlace en tiempo de ' compilaciónEnd SubLos métodos Mover y Morder son enlaces en tiempo de compilación con Critter. El enlace en tiempo de compilación tiene lugar cuando Visual Basic no puede determinar en tiempo de compilación el tipo de objeto que contendrá una variable. En este ejemplo, el argumento Critter está declarado como As Object, de forma que en tiempo de ejecución pueda contener una referencia a cualquier tipo de objeto, como un Coche o una Roca.

Como no puede saber cuál será el objeto, Visual Basic compila una parte de código adicional para preguntar al objeto si acepta el método llamado. Si el objeto acepta el método, dicho código adicional lo invoca; si no, el código adicional desencadena un error. Todas las llamadas a métodos o a propiedades incurren en esta carga adicional.

Por el contrario, las interfaces permiten los enlaces en tiempo de diseño. Cuando Visual Basic conoce en tiempo de compilación la interfaz que se va a llamar, puede comprobar en la biblioteca de tipos si dicha interfaz acepta el método. Después, Visual Basic puede compilar un salto directo al método mediante una tabla virtual de funciones (vtable). Esto es muchas veces más rápido que el enlace en tiempo de compilación.

Ahora suponga que los métodos Mover y Morder pertenecen a la interfaz Animal y que todas las clases de animales implementan esta interfaz. Ahora podría declarar el argumento Critter como As Animal y los métodos Mover y Morder se enlazarán en tiempo de diseño:

Public Sub GetFood(ByVal Critter As Animal, _ByVal Food As Object) Dim dblDistance As Double ' Código para calcular la distancia a la comida '(omitido). Critter.Mover dblDistance ' Enlace en tiempo de ' diseño. Critter.Morder Food ' Enlace en tiempo de ' diseño.End Sub
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]