Quindi ... ho fatto una piccola ricerca. Quella che segue è una piccola lezione di storia per chi è interessato. :) Salta alla conclusione in fondo se sei interessato solo alla risposta.
1967 :
SIMULA 67 , il primo linguaggio di programmazione orientato agli oggetti definisce le parole chiave come classe , oggetto , chiamata per riferimento , chiamata per valore e virtuale .
Il sistema di eredità di SIMULA era originariamente noto con un nome diverso, concatenazione (e in seguito noto come prefisso ), facendo riferimento al fatto che il codice dei supertipi veniva copiato e "concatenato" con il codice dei sottotipi. Successivamente è emersa un'altra forma di sistema di ereditarietà , la delega , in cui le chiamate sono delegate in riferimento al tipo corretto.
Virtual molto probabilmente si riferisce al processo che deve essere eseguito per inviare una chiamata all'implementazione corretta utilizzando una tabella dei metodi virtuali . È virtuale rispetto a un'implementazione fissa / concreta.
1971 :
Niklaus Wirth, scrive di un concetto definito come perfezionamento graduale . Spiega sostanzialmente come dividere un programma in soluzioni parziali su cui può essere esteso.
1974 :
Questo è il primo documento che ho trovato che conia il termine tipi di dati astratti di Barbara Liskov .
Un tipo di dati astratto definisce una classe di oggetti astratti che è completamente caratterizzata dalle operazioni disponibili su tali oggetti. Ciò significa che un tipo astratto può essere definito definendo le operazioni caratterizzanti per quel tipo. Quando un programmatore utilizza un oggetto dati astratto, si preoccupa solo del comportamento che quell'oggetto esibisce, ma non di alcun dettaglio su come tale comportamento viene raggiunto mediante un'implementazione.
Questo documento definisce anche un cluster operativo che sembra specificare ciò che ora conosciamo come interfaccia .
Interessante terminologia scientifica (articolo del 1996):
Ereditarietà : un meccanismo di livello più basso mediante il quale oggetti o classi possono condividere comportamenti o dati.
Sottotipizzazione : esprime la specializzazione concettuale. Una forma specifica di eredità, chiamata anche eredità dell'interfaccia .
Principi di astrazione : il processo di organizzazione della nostra conoscenza di un dominio di applicazione in classifiche gerarchiche degli ordinamenti di astrazioni, al fine di ottenere una migliore comprensione dei fenomeni in questione.
Astrazioni parzialmente attuate : astrazioni le cui definizioni sono state volutamente lasciate incomplete.
Classi astratte : termine specifico per una classe parzialmente implementata in sistemi orientati agli oggetti.
Eredità nascosta : consente di ridefinire (o addirittura rimuovere) le operazioni in sottoclassi.
Eredità rigorosa : eredità compatibile con il comportamento.
Conclusione :
La classe astratta è il termine più generale da utilizzare nei sistemi orientati agli oggetti. Sembra che le funzioni virtuali pure e non pure provengano solo da C ++. Ad esempio, questa intervista con Stroustrup sembra che abbia inventato i termini. Gli articoli scientifici usano una terminologia più generale.
Virtual ha origine da SIMULA, il che comporta una diffusione del suo utilizzo, ma non è un termine generale. Definisce già i dettagli di implementazione. Parlare in termini di tipi di eredità è più appropriato. Non virtuale per impostazione predefinita corrisponde all'eredità rigorosa per impostazione predefinita, mentre virtuale per impostazione predefinita corrisponde all'eredità non rigorosa .
Qualcuno interessato a modificare la voce di Wikipedia ? :)