Programacion Orientada a Objetos I

junio 01, 2006

Herencia Multinivel

Herencia Multinivel

La herencia puede tener multiples niveles. Esto es, una clase base puede tener clases derivadas, cada una de las cuales puede tener clases derivadas, y continuar heredando.Estas clases constituyen lo que conocido como herencia jerárquica o arbol de herencia. Todas las reglas que aplican a una herencia de un solo nivel tambien aplican para la herencia múltiple. Podemos extender nuestro ejemplo de la persona, empleado y cliente y agregarle dos mas clases a la herencia: EmpleadoVentas y Gerente. Estas estan derivadas de la clase Empleado. Los empleados de ventas tienen un salario base (representado por la clase base Empleado m_salario) y un bono mensual, que es calculado en base a un porcentaje de su salario. El gerente tiene un salario (como el empleado) y tiene tambien un bono gerencial. Hemos cambiado el campo m_salario como protected y le hemos agregado dos nuevas clases.

Public Class EmpleadoVentas
Inherits Empleado

Protected m_bono As Decimal

Public Property bono() As Decimal
Get
Return m_bono
End Get
Set(ByVal Value As Decimal)
m_bono = Value
End Set
End Property

Public Sub New(Optional ByVal nombre As String = "", _
Optional ByVal fecha As Date = #1/1/1990#, _
Optional ByVal email As String = "", _
Optional ByVal salario As Decimal = 0, _
Optional ByVal bono As Decimal = 0)
MyBase.New(nombre, fecha, email, salario)
m_bono = bono
End Sub
End Class

Public Class Gerente
Inherits Empleado
Protected m_bono As Decimal

Public Property bono() As Decimal
Get
Return m_bono
End Get
Set(ByVal Value As Decimal)
m_bono = Value
End Set
End Property

Public Sub New(Optional ByVal nombre As String = "", _
Optional ByVal fecha As Date = #1/1/1990#, _
Optional ByVal email As String = "", _
Optional ByVal salario As Decimal = 0, _
Optional ByVal bono As Decimal = 0)
MyBase.New(nombre, fecha, email, salario)
m_bono = bono
End Sub
End Class
Module Module1

Sub Main()
Dim EV As EmpleadoVentas
EV = New EmpleadoVentas("jose", #12/12/2006#, "jose@uabc.mx", 500.55, 200.45)


End Sub

End Module


Una cosa que es muy notable en las clases que son derivadas de otras clases derivadas es el uso de la palabra MyBase. Cuando se uso en la clase EmpleadoVentas, por una instancia, no refleja solo los miembros de la clase base de EmpleadoVenta (empleado), si no todos los miembros de Empleado, y cualquier miembro del cual el Empleado hereda de sus parientes (person). Estos miembros seran visibles cuando teclees MyBase el cual le va a seguir un punto y saldrá el listado de todos los miembros.

Bibliografia VB .NET by Example p .315-321