Existe-t-il des langages de programmation à usage général avec des classes, des objets, des méthodes, des interfaces, etc., qui interdisent l'héritage basé sur les classes?
Cela ressemble beaucoup à une description de VBA - Visual Basic pour Applications, intégré à Microsoft Office et à d'autres hôtes compatibles VBA (par exemple AutoCAD, Sage 300 ERP, etc.), ou même VB6. Le "A" de "Basic" signifie "tout usage" de toute façon, il y a donc la partie "polyvalente".
VB6 / VBA a des classes (et donc des objets), des méthodes et des interfaces - vous pouvez définir une ISomething
interface dans un module de classe comme ceci:
Option Explicit
Public Sub DoSomething()
End Sub
Et puis avoir une autre classe qui fait cela:
Option Explicit
Implements ISomething
Private Sub ISomething_DoSomething()
'implementation here
End Sub
Une telle classe, n'exposant aucun membre public, ne pourrait être accessible que via son ISomething
interface - et il pourrait très bien y avoir des dizaines d'implémentations différentes ISomething
, donc le code OOP VBA est parfaitement capable de polymorphisme, et il est parfaitement légal pour une classe donnée pour implémenter plusieurs interfaces également.
Cependant, VB6 / VBA n'autorise pas l' héritage de classe , vous ne pouvez donc pas hériter d'une implémentation d'un autre type, uniquement son interface. Maintenant, que ce soit un accident, un défaut de conception, un coup de génie ou une énorme oubli laid est ouvert au débat; il n'est pas clair si VB6 / VBA prend cela à cœur , mais il le fait certainement respecter .
Si Go ne fait pas d'héritage de classe et est néanmoins un langage OOP , alors je ne vois pas pourquoi VB6 / VBA ne pourrait pas être considéré comme un langage OOP.</PreemptiveResponseToVBAHatersThatWillSayItIsNotAnOOPLanguage>
prototype
est également utile lorsque vous disposez de méthodes et de propriétés publiques qui doivent être partagées entre les instances. Il est également utile car il vous permet d'utiliser correctement l'instanceof
opérateur en JavaScript:if (foo instanceof Foo) { ...
.implements
mot - clé et les interfaces (par opposition à l'héritage d'état et comportement introduit avec l'utilisation duextends
mot - clé sur les classes contenant n'importe quelle implémentation).new
,this
etprototype
sont trop d'un champ de mines pour une utilisation courante par l'OMI.