Polimorfismo basado en la Herencia |
|
|
En este
artículo veremos como dar de comer a distintas clases de felinos. :) También
se puede ajustar un tipo de una clase base para poder utilizar tipos
derivados diferentes. El polimorfismo trata de conseguir métodos genéricos
con el fin de conseguir clases mucho más funcionales y adaptables. Existen
varias formas de crear polimorfismo: Real, el que comentaremos en este
artículo, de tipo paramétrico o por inclusión, basado en la herencia y
funciones con varias interpretaciones. También se puede crear polimorfismo
aparente utilizando la sobrecarga (varias
funciones con el mismo nombre pero parámetros diferentes). Y ¿para
qué utilizaré el polimorfismo? Pues ahora mismo para alimentar a nuestros
felinos de los artículos anteriores :P Vamos a ver... teníamos hecha la
clase Animales y su derivada Felinos. Con estas dos clases podremos crear
varios Animales-Felinos y les daremos de Comer mediante un nuevo método
polimórfico que implementaremos dentro de la clase Felinos. El nuevo método
será genérico para varios tipos de felinos, en nuestro caso implementaremos
también dos nuevas clases: Tigre y Gato. A ambas clases
les tendremos que dar de comer pero al pobre tigre no lo alimentaremos con
galletitas para gato, no? . La solución es crear un método polimórfico que
acepte diferentes tipos de una misma subclase o familia y que gestione de
forma personalizada a cada tipo. La mejor
forma de entender un método polimórfico es crearlo y ver como se comporta.
Primero crearemos las clases primaria Animales y su subclase Felinos:
|
|
Public Class
Animales Public Overridable Function Comer(ByVal Tipo As Object) As String End Function End Class Public Class
Felinos Inherits Animales Public Overrides Function Comer(ByVal Tipo As Object) As String Select Case Tipo.Nombre
Case "Gato" : Return
"Galletas"
Case "Tigre" : Return
"Carne"
Case Else : Return "Sólo Gatos y Tigres" End Select End Function End Class |
|
La clase Animales
es una clase abstracta y sólo contendrá la definición de Comer y sus
parámetros como guía para las subclases que hereden de esta. Así pues, en
Animales definiremos que el método Comer debe existir para
luego implementarlo en la subclase Felinos. Para diferenciar los
diferentes tipos que utilizarán el método Comer, utilizaremos un parámetro de
tipo Object donde le pasaremos el objeto que quiere Comer. Las mismas
clases se identificarán a la función Comer mediante la función Nombre,
incluidas en Tigre y Gato. De esta forma podemos dar de comer a todo Objeto
que se identifique mediante el método Nombre. Fácil ¿verdad?
|
|
Public Class Tigre Inherits Felinos Public Function Nombre() As String Return
"Tigre" End Function End Class Public Class
Gato Inherits Felinos Public Function Nombre() As String Return
"Gato" End Function End Class |
|
Las dos
clases Gato y Tigre sólo contendrán una función que las identificará.
|
|
Dim Gato1 As New Gato() Dim Tigre1 As New Tigre() Console.WriteLine =
Gato1.Comer (Gato1) Console.WriteLine =
Tigre1.Comer (Tigre1) Resultado
:
Galletas
Carne
|
|
Polimorfismo
basado en la Herencia También es
posible crear polimorfismo basándonos en la herencia de una manera muy
simple. Podemos declarar objetos de diferentes clases para acceder a los métodos
base que hayan sido substituidos por otros:
|
|
Public Class
Felinos Inherits Animales Public Overridable Sub Correr() {Codigo Correr Felinos } End Sub End Class Public Class
Gato Inherits Felinos Public Overrides Sub Correr() {Codigo Correr Gato } End Sub End Class 'Código
que pondremos en la aplicación principal Dim Gato1 As New Gato() Dim Gato2 As New Felino() Gato1.Correr 'Gato1 Ejecutará el
método Base de Felinos Gato2.Correr 'Gato2 Ejecutará el
método que haya en la clase Gato
|
|
|
|
|