Entonces ... he estado investigando un poco. Lo que sigue es una pequeña lección de historia para los interesados. :) Salte a la conclusión en la parte inferior si solo le interesa la respuesta.
1967 :
SIMULA 67 , el primer lenguaje de programación orientado a objetos define palabras clave como clase , objeto , llamada por referencia , llamada por valor y virtual .
El sistema de herencia de SIMULA se conocía originalmente con un nombre diferente, concatenación (y luego conocido como prefijo ), en referencia al hecho de que el código de los supertipos se copiaba y 'concatenaba' con el código de los subtipos. Más tarde surgió otra forma de sistema de herencia , la delegación , donde las llamadas se delegan por referencia al tipo correcto.
Virtual probablemente se refiere al proceso que debe realizarse para enviar una llamada a la implementación correcta mediante el uso de una tabla de método virtual . Es virtual en comparación con una implementación fija / concreta.
1971 :
Niklaus Wirth, escribe sobre un concepto definido como refinamiento gradual . Básicamente explica cómo dividir un programa en soluciones parciales en las que se puede extender.
1974 :
Este es el primer artículo que encontré que acuña el término tipos de datos abstractos de Barbara Liskov .
Un tipo de datos abstractos define una clase de objetos abstractos que se caracteriza completamente por las operaciones disponibles en esos objetos. Esto significa que se puede definir un tipo abstracto definiendo las operaciones de caracterización para ese tipo. Cuando un programador hace uso de un objeto de datos abstractos, solo le preocupa el comportamiento que exhibe ese objeto, pero no los detalles de cómo se logra ese comportamiento mediante una implementación.
Este documento también define un grupo de operaciones que parece especificar lo que ahora conocemos como interfaz .
Interesante terminología científica (artículo de 1996):
Herencia : un mecanismo de nivel más bajo por el cual los objetos o clases pueden compartir comportamientos o datos.
Subtipo : expresa la especialización conceptual. Una forma específica de herencia, también llamada herencia de interfaz .
Principios de abstracción : el proceso de organizar nuestro conocimiento de un dominio de aplicación en clasificaciones jerárquicas de ordenaciones de abstracciones, con el fin de obtener una mejor comprensión de los fenómenos en cuestión.
Abstracciones parcialmente implementadas : abstracciones cuyas definiciones se han dejado a propósito incompletas.
Clases abstractas : Término específico para una clase parcialmente implementada en sistemas orientados a objetos.
Herencia no estricta : permite que las operaciones se redefinan (o incluso se eliminen) en subclases.
Herencia estricta : herencia compatible con el comportamiento.
Conclusión :
La clase abstracta es el término más general para usar en sistemas orientados a objetos. Parece que las funciones virtuales puras y no puras solo se originan en C ++. Por ejemplo, esta entrevista con Stroustrup hace parecer que inventó los términos. Los artículos científicos usan terminología más general.
Virtual se origina en SIMULA, lo que hace que su uso sea generalizado, pero no es un término general. Ya define los detalles de implementación. Hablar en términos de tipos de herencia es más apropiado. No virtual por defecto corresponde a herencia estricta por defecto, mientras que virtual por defecto corresponde a herencia no estricta .
Cualquier persona interesada en ajustar la entrada de wikipedia ? :)