Buscador

Sobrecarga de métodos o polimorfismo, en una misma clase

La sobrecarga de métodos, tal y como ya vimos en el apartado acerca de la sobrecarga de procedimientos en los aspectos básicos del lenguaje, es una técnica que consiste en crear varios métodos con idéntico nombre dentro de la misma clase, distinguiéndose entre sí por su lista de parámetros. 
Para declarar un método como sobrecargado, debemos utilizar la palabra clave Overloads después del modificador de ámbito. Podemos sobrecargar métodos de tipo Sub y Function. Una situación que podría requerir la sobrecarga de métodos sería la siguiente: la clase Empleado necesita manejar en diferentes formas, la información que referente al sueldo existe sobre el empleado. 
Por tal motivo, vamos a crear tres métodos con el nombre Sueldo( ), que variarán en su firma, o protocolo de llamada, y realizarán diferentes tareas, pero todas ellas relacionadas con el sueldo del empleado. Veamos el Código fuente 240.

Module General
Sub Main()
Dim loEmpleado As New Empleado()
Dim ldbResultadoIncent As Double
loEmpleado.Salario = 1020.82
'llamada al primer método sobrecargado
loEmpleado.Sueldo()
'llamada al segundo método sobrecargado
Console.WriteLine("El sueldo se transferirá el día {0}", _
loEmpleado.Sueldo(29))
'llamada al tercer método sobrecargado
ldbResultadoIncent = loEmpleado.Sueldo(50.75, "Extras")
Console.WriteLine("El incentivo a pagar será {0}", ldbResultadoIncent)
Console.ReadLine()
End Sub
End Module
Public Class Empleado
Private mdbSalario As Double
Public Property Salario() As Double
Get
Return mdbSalario
End Get
Set(ByVal Value As Double)
mdbSalario = Value
End Set
End Property
' métodos sobrecargados
Public Overloads Sub Sueldo()
' aquí mostramos en consola el importe del sueldo formateado
Console.WriteLine("El sueldo es {0}", Format(Me.Salario, "#,#.##"))
Console.ReadLine()
End Sub
Public Overloads Function Sueldo(ByVal liDia As Integer) As String
' aquí mostramos la fecha del mes actual
' en la que se realizará la transferencia
' del sueldo al banco del empleado
Dim ldtFechaActual As Date
Dim lsFechaCobro As String
ldtFechaActual = Now()
lsFechaCobro = CStr(liDia) & "/" & _
CStr(Month(ldtFechaActual)) & "/" & _
CStr(Year(ldtFechaActual))
Return lsFechaCobro
End Function
Public Overloads Function Sueldo(ByVal ldbImporteIncentivo As Double, _
ByVal lsTipoIncentivo As String) As Double
' aquí calculamos la cantidad de incentivo
' que se añadirá al sueldo del empleado,
' en función del tipo de incentivo
Dim ldbIncentivo As Double
' según el tipo de incentivo,
' se descuenta un importe
' de la cantidad del incentivo
Select Case lsTipoIncentivo
Case "Viajes"
ldbIncentivo = ldbImporteIncentivo - 30
Case "Extras"
ldbIncentivo = ldbImporteIncentivo - 15
End Select
Return ldbIncentivo
End Function
End Class
Código fuente 240
Vemos pues, cómo a través de la sobrecarga conseguimos también polimorfismo para una clase, ya que el mismo nombre de método, en función de los parámetros pasados, actuará de diferente forma. 
A pesar de haber indicado que la palabra clave Overloads nos permite sobrecargar los métodos con nombres iguales en la clase, realmente no sería necesario su uso, ya que el compilador detecta la diferencia entre dichos métodos a través de su lista de parámetros. Sin embargo se recomienda el uso de esta palabra clave por motivos de legibilidad del código, de forma que nos ayude a reconocer más rápidamente los métodos sobrecargados. 
Cuando realmente necesitaremos emplear Overloads será al sobrecargar un método en una clase derivada, aspecto este que se explicará en un próximo apartado.

No hay comentarios:

Publicar un comentario