htm=articulo/hereda.htm ok articulo/hereda.htm

La herencia de clases en VB5.

Este artículo describe el modo de simular en VB5 la herencia de clases. Se sumministra asimismo un enlace a un complemento de VB5 que permite realizar esta implementacion de forma automática.


Una de las caracteristicas más típicas de los lenguajes orientados a objeto es la herencia. Así vemos que C++ permite la herencia múltiple. Java solo permite la herencia simple pero permite definir interfaces que las clases pueden implementar, consiguendo así una funcionalidad similar.

Consultando la documentacion de VB5, podemos percatarnos de que este lenguaje no soporta herencia. Según la misma documentacion, VB implementa el polimorfismo por medio de interfaces. Una vez definido un interface, cualquier clase puede implementar dicho interface y dada una referencia a esa clase, el lenguaje será capaz de transformarla en una referencia al interface. Esto es la esencia misma del polimorfismo, sin embargo no se reutiliza el código y el trabajo que debe hacer el programador aumenta.

Hay que destacar que la definicion de un interface en VB es exactamente igual a la de una clase y que una clase puede implementar toda la interface pública de otra.

Analizando el trabajo que hace un compilador de C++ al crear una clase derivada de otra, vemos que primero se crea una instancia de la clase base, llamando a su constructor, y posteriormente se crea la clase derivada. Las llamadas a funciones -o accesos a datos miembro- de la clase derivada se desvían a los métodos -y datos- de la clase base excepto en el caso de que la clase derivada sobrecargue la función.

Un modo relativamente complicado de reutilizar código en VB5 consiste en realizar manualmente lo mismo que cualquier compilador haría para implementar la herencia:

  1. Se declara la implementacion del interface de la clase base en la clase derivada usando en esta la instruccion Implements. Esto proporciona polimorfismo en la clase derivada respecto a la clase base.
  2. Se instancia un objeto de la clase base como miembro privado de la clase derivada. Este paso es equivalente a la llamada al constructor de la clase base, pero se invierte el orden lógico ya que se construye el objeto de la clase base despues de construir el objeto de la clase derivada.
  3. Las llamadas a los métodos del interface de la clase base en la clase derivada se redirigen hacia los métodos homónimos del objeto instanciado en el paso previo. Dado que los accesos a datos miembro se ralizan en realidad a traves de métodos, tambien el acceso a datos miembro de la clase base se realiza de la misma forma.

Este modo de implementar la herencia, en especial el paso tercero, aumenta considerablemente la cantidad de código que hay que escribir manualmente respecto a un lenguaje que implemente la herencia en modo nativo. Sin embargo VB5 nos ofrece la posiblidad de añadir complementos al entorno integrado de desarrollo, un complemento que realiza esta simulacion de herencia se puede descargar desde estas mismas páginas, para descargarlo pulse aquí.

Otro inconveniente de esta implementacion es que deja a la vista del programador todos los detalles que normalmente quedan ocultos en la implementacion de la herencia. Esto no se puede evitar pero se compensa porque, a cambio, el programador puede manipular directamente el mecanismo de herencia. Por ejemplo, una clase puede delegar la implementacion de varios interfaces (no solo uno) a otra clase o tambien puede impelementar un interface con código enteramente nuevo, sin necesidad de construir un objeto de la clase base.


© info3@maicas.net