Are there any general-purpose programming languages with classes, objects, methods, interfaces, and so on, which disallow class-based inheritance?
Si tratta di una descrizione molto simile a VBA - Visual Basic for Applications, incorporata in Microsoft Office e altri host abilitati per VBA (ad esempio AutoCAD, Sage 300 ERP, ecc.) o anche VB6. La "A" di "Basic" sta per "All-purpose" comunque, quindi c'è la parte "general-purpose".
VB6 / VBA ha classi (e quindi oggetti), metodi e interfacce - puoi definire un'interfaccia ISomething
in un modulo di classe come questo:
Option Explicit
Public Sub DoSomething()
End Sub
E poi avere un'altra classe che faccia questo:
Option Explicit
Implements ISomething
Private Sub ISomething_DoSomething()
'implementation here
End Sub
Una tale classe, che non espone nessun membro pubblico, è sempre accessibile tramite la sua interfaccia ISomething
- e potrebbero esserci decine e decine di implementazioni diverse di ISomething
, quindi il codice VBA OOP è perfettamente in grado di polimorfismo ed è perfettamente legale per una determinata classe implementare anche più interfacce.
VB6 / VBA non consente l'ereditarietà della classe , tuttavia non puoi ereditare un'implementazione da un altro tipo, ma solo la sua interfaccia. Ora, se questo è un incidente, un difetto di progettazione, un colpo di genio o un'enorme supervisione è aperto al dibattito; non è chiaro se VB6 / VBA tenga questo a cuore , ma sicuramente lo impone .
Se Go non esegue l'ereditarietà della classe ed è nondimeno un linguaggio OOP , quindi non vedo perché VB6 / VBA non possa essere considerato un linguaggio OOP. </PreemptiveResponseToVBAHatersThatWillSayItIsNotAnOOPLanguage>