Então ... eu tenho feito uma pequena pesquisa. O que se segue é uma pequena lição de história para os interessados. :) Pule para a conclusão na parte inferior, se você estiver interessado apenas na resposta.
1967 :
O SIMULA 67 , a primeira linguagem de programação orientada a objetos, define as palavras-chave como classe , objeto , chamada por referência , chamada por valor e virtual .
O sistema de herança do SIMULA era originalmente conhecido por um nome diferente, concatenação (e mais tarde conhecido como prefixo ), referindo-se ao fato de que o código dos supertipos foi copiado e 'concatenado' com o código dos subtipos. Mais tarde , surgiu outra forma de sistema de herança , a delegação , onde as chamadas são delegadas por referência ao tipo correto.
O virtual provavelmente se refere ao processo que precisa ser executado para despachar uma chamada para a implementação correta usando uma tabela de método virtual . É virtual em comparação com uma implementação fixa / concreta.
1971 :
Niklaus Wirth, escreve sobre um conceito definido como Stepwise Refinement . Ele explica basicamente como dividir um programa em soluções parciais nas quais pode ser estendido.
1974 :
Este é o primeiro artigo que encontrei que inventa o termo tipos de dados abstratos de Barbara Liskov .
Um tipo de dado abstrato define uma classe de objetos abstratos que é completamente caracterizada pelas operações disponíveis nesses objetos. Isso significa que um tipo abstrato pode ser definido definindo as operações de caracterização para esse tipo. Quando um programador faz uso de um objeto de dados abstratos, ele se preocupa apenas com o comportamento que esse objeto exibe, mas não com detalhes de como esse comportamento é alcançado por meio de uma implementação.
Este artigo também define um cluster de operações que parece especificar o que sabemos agora como interface .
Terminologia científica interessante (artigo de 1996):
Herança : um mecanismo de nível mais baixo pelo qual objetos ou classes podem compartilhar comportamento ou dados.
Subtipagem : expressa especialização conceitual. Uma forma específica de herança, também chamada herança de interface .
Princípios de abstração : O processo de organizar nosso conhecimento de um domínio de aplicativo em classificações hierárquicas de ordenações de abstrações, a fim de obter uma melhor compreensão dos fenômenos em questão.
Abstrações parcialmente implementadas : abstrações cujas definições foram propositadamente deixadas incompletas.
Classes abstratas : Termo específico para uma classe parcialmente implementada em sistemas orientados a objetos.
Herança não restrita : permite que as operações sejam redefinidas (ou mesmo removidas) nas subclasses.
Herança estrita : herança comportamentalmente compatível.
Conclusão :
Classe abstrata é o termo mais geral a ser usado em sistemas orientados a objetos. Parece que as funções virtuais puras e não puras são originárias apenas do C ++. Por exemplo, esta entrevista com Stroustrup parece que ele inventou os termos. Trabalhos científicos usam terminologia mais geral.
O Virtual é originário do SIMULA, o que faz com que seu uso seja generalizado, mas não é um termo geral. Ele já define os detalhes da implementação. Falar em termos de tipos de herança é mais apropriado. Por padrão, não virtual corresponde a herança estrita por padrão, enquanto virtual por padrão corresponde a herança não restrita .
Alguém interessado em ajustar a entrada da Wikipedia ? :)