Está en la página 1de 9

Unidad 20.

La herencia en las clases en VB (I)


20.1. Objetivos del tema.
La herencia es una de las caractersticas de las clases, vamos a ver el
funcionamiento y sus ventajas de cara al uso dentro de los programas en Visual
Basic.
20.2. Introduccin.
La herencia es una de las posibilidades que nos ofrece el uso de las clases en
general.
Visual Basic ofrece esta posibilidad utilizando la herencia simple.
Visual permite la creacin de clases que pueden ser

heredadas, cualquier clase,


deben ser heredadas obligatoriamente
objetos con ella.
o no pueden ser heredadas

Inherits
MustInherit, no se pueden crear
NotInheritable

Evidentemente cualquier clase puede ser heredada excepto las que se


declaren en uno de los otros formatos.
El fin de la herencia es el crear un punto de partida con un cdigo existente y
que ya est asentado, o no, para ampliar las capacidades en una nueva versin
o modificar ciertos aspectos de la clase base.
20.3. Clase base, origen.
Veamos un ejemplo de herencia en VB,

Public Class Ejemplos


' La variable se hace pblica
Public Shared Contador As Int16 = 0

Public Sub Incrementa()

Contador += 1
End Sub

Public Sub Resta()


Contador -= 1
End Sub

Public Sub Visualiza()


Console.WriteLine("Contador vale {0} ", Contador)
End Sub
End Class

El ejemplo anterior de clase contiene una serie de mtodos.

Public Class Nueva


' herencia de la clase anterior
Inherits Ejemplos
End Class

En la clase que se describe no hay ni una sola lnea de cdigo pero adquiere
todas las capacidades de la clase Ejemplos.

Y si nos fijamos en el programa principal.

Module Module1

Sub Main()
' definicin de la clase
Dim Objeto As New Nueva
Objeto.Visualiza()
Objeto.Incrementa()
Objeto.Visualiza()
Console.ReadLine()
End Sub
End Module

Y ejecutamos dicho ejemplo podremos observar como el resultado es el


adecuado.

As de sencillo.
La clase Ejemplos es la clase base, u origen.
20.4. Clase derivada.
Por lo tanto la clase Nueva es la clase derivada.
La clase derivada es la clase resultante al heredar la clase Ejemplos, y asumir
todas las caractersticas de las clases origen.
Adems en esta clase podemos aadiremos las caractersticas necesarias para
que cumpla la funcin para la cual se disea.
20.5. Resultado de la herencia.
Como consecuencia de la herencia, debemos disponer de la posibilidad, porque
es una de sus necesidades, de poder reescribir o reemplazar mtodos de la
clase base, con el fin de sustituirlos.

Pero tambin podra ser que nos interese que un mtodo de nuestra clase no
pueda ser reescrito.
De esa forma es como se va tejiendo las caractersticas de las clases en la
herencia.
Para ello se dispone en Vb de la posibilidad de reescribir mediante el uso de

Overridable

Puede ser reemplazado.

Overrides

Est reemplazando a un mtodo Overrides.

NotOverridable

Impide que se reemplace.

MustOverride
Indica que debe escribirse ste mtodo en
la clase derivada de forma obligatoria. Esto implica que la clase debe
declararse de forma obligatoria como MustInherit, ya que es obligatorio
desarrollar dicho mtodo.

Cuando se hereda una clase MustInherit automticamente VB escribe los


mtodos declarados en la clase base como MustOverride.

MustInherit Class ClaseBase


Public MustOverride Sub MetodoQueDebeSerEscrito()

Public Overridable Sub MiMetodo()


Console.WriteLine("Mtodo que se puede reescribir")
End Sub

Public Sub UsandoMyClass()


MyClass.MiMetodo() ' con MyClass
End Sub
End Class

Esta es la clase Base, podemos observar como tenemos estos dos mtodos

Public MustOverride Sub MetodoQueDebeSerEscrito()


Public Overridable Sub MiMetodo()

La clase derivada podra ser:

Class ClaseDerivada
Inherits ClaseBase

Public Overrides Sub MetodoQueDebeSerEscrito()


Console.WriteLine("Este es el metodo que deba ser escrito")
End Sub

Public Overrides Sub MiMetodo()


Console.WriteLine("Mtodo que ha sido reescrito")
MyBase.MiMetodo() ' Con MyBase
End Sub
End Class

Observar como se desarrolla el mtodo Overrides.

Public Overrides Sub MetodoQueDebeSerEscrito()

Que se corresponde con

Public MustOverride Sub MetodoQueDebeSerEscrito()

De la clase base.

El resultado de la ejecucin sera:

20.6. Referencias en el cdigo de una clase, MyClass, MyBase, Me.


Qu es esto.?
Ya hemos visto parte en el ejemplo anterior.
Si creamos clases, es para crear objetos con ellas.
S las clases tienen como caracterstica que se puedan heredar en otra clase,
qu pasa, si a m me interesa usar el mtodo de la clase heredada en lugar
del mtodo que estoy escribiendo para sta clase en un momento dado?.

Class ClaseBase
Public Sub Sombreado()
Console.WriteLine("Texto desde sombreado")
End Sub

Public Overridable Sub MiMetodo()


Console.WriteLine("Cadena en clase base")
End Sub

Public Sub UsandoMe()

Me.MiMetodo()
End Sub

Public Sub UsandoMyClass()


MyClass.MiMetodo()
End Sub
End Class

Esta sera una clase base, en la que estamos haciendo uso de MyClass y de Me.

El ejemplo que sigue puede dar una idea del uso de Me, y MyClass, pero como
realmente se aprecia el ejemplo es ejecutndolo paso a paso, con <F8>, y no
solo una vez, para comprenderlo.
Hay que fijarse en que MiMetodo est definido en las dos clases, y en funcin
del uso de Me o MyClass se ejecuta uno u otro.

Class ClaseDerivada
Inherits ClaseBase

Public Overrides Sub MiMetodo()


Console.WriteLine("Cadena en clase derivada")
End Sub

Public Shadows Sub Sombreado()


MyBase.Sombreado()

' llama al de clasebase

Console.WriteLine("Texto desde sombreado derivada")


End Sub
End Class

MyBase, se utiliza para llamar desde la clase derivada a un mtodo de la clase


base que ha sido reemplazado en la clase derivada, pero que sin embargo
posee cdigo que nos interesa se ejecute, porque lo que estamos haciendo en
realidad es una ampliacin del cdigo de la clase base.

Y el principal sera:

Module Module1
Sub Main()
Dim Objeto As New ClaseDerivada
Objeto.MiMetodo()
Objeto.Sombreado()
Objeto.UsandoMe()
Objeto.UsandoMyClass()

Console.ReadLine()
End Sub
End Module

El resultado de la ejecucin.

20.7. Limitaciones en la herencia.

Todos los campos y mtodos de una clase son siempre accesibles para el
cdigo de la misma clase.
Para controlar el acceso desde otras clases, y para controlar la herencia por las
clases derivadas, o subclases, los elementos (atributos y mtodos) de las
clases tienen tres situaciones posibles de control de acceso:

Pblico, public
Los miembros declarados pblicos son accesibles en
cualquier lugar en que sea accesible la clase, y son heredados por las
subclases.
Privado, private
la propia clase.

Los miembros declarados privados son accesibles slo en

Protegido, protected Los miembros declarados protegidos son accesibles slo


para sus subclases

En VB adems disponemos de Protected Friend que permite que la clase base


visualice el mtodo protegido en un objeto derivado de la clase base.

También podría gustarte