Skip to main content

¿Qué es una clase virtual?

Una clase virtual es una clase que se asigna solo una vez en la memoria, de modo que los hijos de esa clase usan solo una copia de esa clase principal que se establece en la memoria. Una clase es un grupo de objetos que comparten rasgos o atributos comunes. Al hacer que una clase sea virtual, los lenguajes de programación orientados a objetos tienen la capacidad de usar herencia múltiple cuando las clases primarias de segunda generación o más se derivan de clases base ancestrales comunes. Dependiendo del lenguaje de programación de la computadora al que se hace referencia, la palabra clave "virtual", palabra clave similar, o la sintaxis y la semántica de una clase se utilizan para implicar que una clase en particular debe considerarse virtual.

No todos los lenguajes de programación orientados a objetos permiten la herencia múltiple, que es cuando una clase secundaria se puede derivar de varias clases principales al mismo tiempo. En un lenguaje de programación como C ++, una clase puede heredar todos los datos y funciones miembro de ambas clases principales a la vez y tener acceso a ambos conjuntos de datos y funciones principales. Otros lenguajes que admiten herencia múltiple incluyen Perl, Python, Tcl y Eiffel.

Se produce un problema en varias jerarquías de herencia cuando dos o más clases principales utilizadas para crear una clase secundaria se derivan originalmente de solo una o la misma clase de abuelos. Esto se llama el problema del diamante, el nombre deriva de cómo se vería la jerarquía en esta situación. Cuando un programa compilador intenta crear una instancia de una clase, como una clase de nieto hecha de dos clases para padres con un abuelo común, se hacen dos copias del abuelo en la memoria, una para cada padre.

Debido a la ambigüedad causada por múltiples copias del mismo abuelo en la memoria, el compilador no puede determinar qué copia del abuelo debe usar el nieto para acceder a los datos o funciones de los abuelos. Para remediar esta situación, en C ++ el abuelo se convierte en una clase virtual al declarar a los padres. Esto hace que el compilador solo haga una copia del abuelo en la memoria que ambos padres comparten. Una vez que el abuelo se ha convertido en una clase virtual, el compilador no tiene problemas para decidir cómo debe acceder el nieto al abuelo porque solo hay una copia del abuelo.

Se debe tener mucho cuidado al estructurar jerarquías de clases, especialmente cuando se incluirán o se convertirán en la base de jerarquías mucho más grandes en el futuro. La utilización adecuada de una clase virtual da a las jerarquías de clase mayor libertad en el desarrollo; sin embargo, tienen el potencial de causar errores que son difíciles de localizar. El estudio de principios sólidos de ingeniería de programación de computadoras ayudará a asegurar que no ocurran efectos secundarios inesperados de una organización de programa inadecuada.