Las funciones virtuales son usadas principalmente en lenguajes en C++ o C#, la implementación de funciones virtuales en Visual Basic .NET es a través de la sobre escritura de métodos o propiedades o subrutinas.
Public MustInherit Class animal
Public Overridable Function mensaje()
MsgBox("no se que tipo de bestia soy")
End Function
Public Overridable ReadOnly Property msg1() As String
Get
Console.WriteLine("No se que tipo de animal soy")
End Get
End Property
Public Overridable Sub quetipo()
MsgBox("Que tipo soy")
End Sub
Public MustOverride Function mensaje2()
End Class
Public Class humano
Inherits animal
Public Overrides Function mensaje()
MsgBox("se que soy humano")
End Function
Public Overrides ReadOnly Property msg1() As String
Get
Return "soy un humano en la propiedad"
End Get
End Property
Public Overrides Sub quetipo()
MsgBox("soy del tipo de humano")
End Sub
Public Overrides Function mensaje2()
MsgBox("Este es un mensaje de los humanos")
End Function
End Class
Public Class perro
Inherits animal
Public Overrides Function mensaje()
MsgBox("soy un perro")
End Function
Public Overrides ReadOnly Property msg1() As String
Get
Return "soy un tipo de perro"
End Get
End Property
Public Overrides Sub quetipo()
MsgBox("soy del tipo perro")
End Sub
Public Overrides Function mensaje2()
MsgBox("Este es un mensaje de los perros")
End Function
End Class
La idea detrás del polimorfismo es que a un grupo de objetos heterogéneos (por ejemplo, manzanas, naranjas, plátanos) pueda hacer que se vean como homogéneo (por ejemplo, frutas), pero puedan ser diferenciadas basados en su propio tipo especifico al ejecutarse.
Module Module1
Sub Main()
'Console.WriteLine("Vamos a mostrar a un humano")
Dim animal1 As animal = New humano
'animal1.mensaje()
'Console.WriteLine("Vamos a mostrar a un perro")
Dim animal2 As animal = New perro
'animal2.mensaje()
'MsgBox(animal1.msg1)
'animal1.quetipo()
'animal2.quetipo()
animal1.mensaje2()
animal2.mensaje2()
End Sub
End Module
La palabra New introduce una Nueva cláusula (punto, condición), la cual crea un nuevo objeto de la instancia. La cláusula New debe de especificar una clase definida de la cual la instancia pueda ser creada. Podemos usar New en una declaración de un enunciado o en un enunciado de asignación. Cuando el enunciado es ejecutado, este llama al constructor para la clase especifica, pasando cualquier argumento que hayas suplido.
Since arrays are classes, New can create a new array instance:
Dim MyArray As Integer()
MyArray = New Integer() {0, 1, 2, 3}
Clases Abstractas
Habra algunos casos en las cuales la clase base de una herencia gerarquica ocupe un metodo sobrescrito *(overridable ), pero la clase por si misma no puede proveer ninguna implementacion para le método. En este caso lo que necesitamos es una forma de forzar a la clase derivada sobre escribir el Método.
<<
Los métodos declarados como MustOverride no deben de tener un cuerpo, y no deben de terminar en End Sub ó End Function. Ademas una clase que contiene uno o mas métodos de este tipo (conocidos como métodos abstractos) deben de ser declarados como MustInherits aun así que no tenga métodos abstractos, solo para prevenir que algunos clientes creen instancias de este tipo.
Public MustInherits Class Account
Protected m_balance as Decimal
‘el resto del código omitido
Public MustOverrides Sub CloseMonth()
End Class
Esto significa que podemos ahora tratar cualquier método o subrutina gericamente. En general se puede tener herencia jerárquica con múltiples niveles de clases abstractas, pero esto es inusual. En caso de que no pueda omitirse, todas las clases derivadas deben de implementar en todos los métodos declarados como MustOverride de todas las clases abstractas en sus ancestros de los cuales heredaron, o convertirse a si mismo abstractos (usando MustInherit).
Bibliografía
Virtual functions
Foundations of OOP Using dot NET 2.0 Patterns.pdf p.13
Visual Basic .NET by example p.327-328
No hay comentarios.:
Publicar un comentario