Fecha y hora actual: Jueves 17 Ene 2019 05:44
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.20 - Clases, Herencia- VB Studio 2005

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.20 - Clases, Herencia- VB Studio 2005

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3200
Ubicación: Valencia - España

Mensaje Publicado: Miércoles 25 Mar 2009 21:01

Título del mensaje: Curso VB .NET - Tema 1.20 - Clases, Herencia- VB Studio 2005

Responder citando

Curso de programación en .NET - Tema 1.20 - Clases, Herencia - VB Studio 2005

1. Clases, Herencia, VB.

1.1 Objetivos del tema.
La herencia es una de las características de las clases, vamos a ver el funcionamiento y sus ventajas de cara al uso dentro de los programas en Visual Basic.

1.2 Introducción.
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 creación de clases que pueden ser

  • heredadas, cualquier clase,
  • Inherits deben ser heredadas obligatoriamente MustInherit, no se pueden crear objetos con ella.
  • o no pueden ser heredadas 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 código existente y que ya está asentado, o no, para ampliar las capacidades en una nueva versión o modificar ciertos aspectos de la clase base.

1.3 Clase base, origen.
Veamos un ejemplo de herencia en VB,

Código:
Public Class Ejemplos
   ' La variable se hace pública
   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 métodos.

Código:
Public Class Nueva
   ' herencia de la clase anterior
   Inherits Ejemplos
End Class


En la clase que se describe no hay ni una sola línea de código pero adquiere todas las capacidades de la clase Ejemplos.

Y si nos fijamos en el programa principal.

Código:
Module Module1
   Sub Main()
      ' definición 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.

1.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 características de las clases origen.

Además en esta clase podemos añadiremos las características necesarias para que cumpla la función para la cual se diseña.

1.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 métodos de la clase base, con el fin de sustituirlos.

Pero también podría ser que nos interese que un método de nuestra clase no pueda ser reescrito.
De esa forma es como se va tejiendo las características 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 método Overrides.
  • NotOverridable Impide que se reemplace.
  • MustOverride Indica que debe escribirse éste método 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 método.


Cuando se hereda una clase MustInherit automáticamente VB escribe los métodos declarados en la clase base como MustOverride.

Código:
MustInherit Class ClaseBase
   Public MustOverride Sub MetodoQueDebeSerEscrito()
   Public Overridable Sub MiMetodo()
      Console.WriteLine("Método 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 métodos

Código:
Public MustOverride Sub MetodoQueDebeSerEscrito()
Public Overridable Sub MiMetodo()


La clase derivada podría ser:

Código:
Class ClaseDerivada
   Inherits ClaseBase
   Public Overrides Sub MetodoQueDebeSerEscrito()
      Console.WriteLine("Este es el metodo que debía ser escrito")
   End Sub
   Public Overrides Sub MiMetodo()
      Console.WriteLine("Método que ha sido reescrito")
      MyBase.MiMetodo() ' Con MyBase
   End Sub
End Class


Observar como se desarrolla el método Overrides.

Código:
Public Overrides Sub MetodoQueDebeSerEscrito()


Que se corresponde con

Código:
Public MustOverride Sub MetodoQueDebeSerEscrito()


De la clase base.
El resultado de la ejecución sería:



1.6 Referencias en el código 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 característica que se puedan heredar en otra clase, ¿qué pasa, si a mí me interesa usar el método de la clase heredada en lugar del método que estoy escribiendo para ésta clase en un momento dado?.

Código:
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 sería 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 ejecutándolo 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 función del uso de Me o MyClass se ejecuta uno u otro.

Código:
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 método de la clase base que ha sido reemplazado en la clase derivada, pero que sin embargo posee código que nos interesa se ejecute, porque lo que estamos haciendo en realidad es una ampliación del código de la clase base.

Y el principal sería:

Código:
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 ejecución.



1.7 Limitaciones en la herencia.
Todos los campos y métodos de una clase son siempre accesibles para el código 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 métodos) de las clases tienen tres situaciones posibles de control de acceso:

  • Público, public Los miembros declarados públicos son accesibles en cualquier lugar en que sea accesible la clase, y son heredados por las subclases.
  • Privado, private Los miembros declarados privados son accesibles sólo en la propia clase.
  • Protegido, protected Los miembros declarados protegidos son accesibles sólo para sus subclases


En VB además disponemos de Protected Friend que permite que la clase base visualice el método protegido en un objeto derivado de la clase base.

1.8 Ejercicios propuestos.
1. Escribir una clase que se tenga que heredar y en la que haya un método que se deba escribir en la clase heredada.
2. Escribir una clase que herede la clase anterior y que desarrolle el método pendiente en dicha clase, crear un objeto de ésta clase que permita realizar la prueba de funcionamiento de dicho método.

1.9 Solución a los ejercicios propuestos.
1. Escribir una clase que se tenga que heredar y en la que haya un método que se deba escribir en la clase heredada.

Código:
Public MustInherit Class Ejercicio
   Public Sub New()
   End Sub
   Public MustOverride Sub VisualizarAbecedario()
End Class


2. Escribir una clase que herede la clase anterior y que desarrolle el método pendiente en dicha clase, crear un objeto de ésta clase que permita realizar la prueba de funcionamiento de dicho método.

Código:
Public Class Nueva
   Inherits Ejercicio
   Public Overrides Sub VisualizarAbecedario()
      Dim X As Integer
      X = 65
      While X < 91
         Console.WriteLine(Chr(X))
         X = X + 1
      End While
   End Sub
End Class


Su utilización es:

Código:
Module Module1
   Sub Main()
      Dim Objeto As Nueva = New Nueva
      Objeto.VisualizarAbecedario()
      Console.Read()
   End Sub
End Module




Autor del curso: casiopea


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Dudas al instanciar clases heredadas

MMCA Java 0 Viernes 26 Ene 2018 21:34 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Clases

angeljonh C, C#, Visual C++ 2 Miércoles 30 Ago 2017 06:20 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de PHP-WordPress avanzado

wordpressadict PHP 1 Domingo 27 Nov 2016 19:59 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso fundamentos de programación

Yaser Programación en general 0 Miércoles 18 May 2016 00:28 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de Desarrollo en Inteligencia Artificial

JL Iglesias Feria Programación de juegos o videojuegos 7 Miércoles 02 Dic 2015 18:20 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,