La idea principal de la programación orientada a objeto es la reutilización de los atributos y métodos entre sus clases afines con esto debemos considerar que todas las clases tienen algo particular que las une.
“La herencia permite crear nuevas clases a partir de clases existentes. La herencia puede simplificar el diseño de la aplicación proporcionando una estructura de relaciones entre las distintas clases. También admite la reutilización de código porque sólo se debe codificar el comportamiento de clases nueva o distintas”.
Una relación de herencia es una relación en la que un tipo (el tipo derivado) se deriva de otro (el tipo base), de tal forma que el espacio de declaración del tipo derivado contiene implícitamente todos los miembros de tipo no constructor del tipo base.
“La herencia es la capacidad de una clase de obtener la interfaz y comportamiento de una clase existente.”
La instrucción Inherits se utiliza para declarar una nueva clase, denominada clase derivada, basada en una clase existente conocida como clase base. Las clases derivadas heredan, y pueden extender, las propiedades, métodos, eventos, campos y constantes definidos en la clase base.
Consideraciones generales de la herencia:
- De forma predeterminada, todas las clases son heredables a menos que se marquen con la palabra o clave Notlnheritable. Las clases pueden heredar de otras clases del proyecto o de clases en otros ensamblados a los que hace referencia el proyecto
- A diferencia de los lenguajes que permiten la herencia múltiple, Visual Basic solamente permite la herencia simple en las clases, es decir, las clases derivadas sólo pueden tener una clase base Aunque no se permite la herencia múltiple en las clases, estas pueden implementar múltiples interfaces, lo que permite lograr de manera eficaz los mismos fines.
- Para evitar la exposición de elementos restringidos en una clase base, el tipo de acceso de una clase
derivada debe ser igual o más restrictivo que el de su clase base. Por ejemplo, una clase Public no puede heredar una clase Friend o Private, y una clase Friend no puede heredar una clase Private.
LOS MODIFICADORES DE HERENCIA
Para una buena compatibilidad entre las clases heredadas se tienen las siguientes instrucciones y modificadores:
- Instrucción Inherits: es la encargada de especificar la clase base o clase padre.
- Modificador Notlnheritable: es la encargada de impedir que se use como clase base a una determinada clase.
- Modificador Mustlnherit: es la encargada de especificar que la clase sólo se debe utilizar como clase base, Las instancias de las clases Mustinherit no se pueden crear directamente; sólo se pueden crear como instancias de clase base de una clase derivada. Es similar al termino Clase abstracta.
A. Instrucción Inherits:
Si se utiliza, la instrucción Inherits debe ser la primera línea no vacía, sin comentario, en una definición de clase o de interfaz. Debe seguir inmediatamente a la instrucción Class.
Sólo puede utilizar Inherits en una clase. Esto significa que el contexto de declaración de una herencia no puede ser un archivo de código fuente, espacio de nombres, estructura, módulo, procedimiento o bloque.
Reglas básicas:
- Herencia de clase: si una clase utiliza la instrucción Inherits, sólo se puede especificar una clase base.
- Una clase no puede heredar de una clase anidada en ella.
- Herencia de interfaz: si una interfaz utiliza la instrucción Inherits, se pueden especificar una o más interfaces base. Puede heredar de dos interfaces incluso si cada Una define un miembro con el mismo nombre. Si lo hace así, el código de implementación debe utilizar la calificación del nombre para especificar qué miembro se implementa.
Sintaxis:
B. Modificador Notlnheritable
Este modificar evita la instancia en la herencia con otras clases. Es decir paramétrica a la clase que nunca será Clase Padre.
Sintaxis:
C. Modificar MustInherit:
La finalidad de una clase base (también conocida como clase abstracta ya que no se puede acceder directamente a sus atributos ni métodos) es definir la funcionalidad común a todas las clases que se derivan de esta. La clase base evita que las clases derivadas tengan que redefinir los elementos comunes. En algunos casos, esta funcionalidad común no es lo suficientemente completa para que se pueda utilizar un objeto y cada clase derivada define la funcionalidad que falta. En estos casos, deseará utilizar el código para crear objetos únicamente a partir de las clases derivadas. Para ello puede utilizar MustInherit en la clase base.
Otra utilidad de una clase MustInherit es restringir una variable a un conjunto de clases relacionada.
Puede definir una clase base y derivar todas estas clases relacionadas a partir de ella. La clase base no necesita proporcionar una funcionalidad común a todas las clases derivadas, aunque se puede utilizar como filtro en la asignación de valores a las variables, Si el código utilizado declara una variable como clase base, Visual Basic permite asignar únicamente un objeto desde una de las clases derivadas a dicha variable.
.NET Framework define varias clases MustInherit, entre las que se incluyen Array, Enum y ValueType.
ValueType es un ejemplo de una clase base que restringe una variable. Todos los tipos de valor se derivan de ValueType. Si declara una variable como ValueType, puede asignar sólo tipos de valor a esa variable.
Reglas Básicas del uso del modificador MustInherit
- Contexto de declaración: sólo puede utilizar MustInherit en una instrucción Class.
- Modificadores combinados: no se puede especificar MustInherit junto con NotInheritable en la misma declaración.
Sintaxis: