Existe-t-il des langages de programmation orientés objet qui ne sont pas basés sur le paradigme de classe?
Existe-t-il des langages de programmation orientés objet qui ne sont pas basés sur le paradigme de classe?
Réponses:
Autant que je sache, Self est la langue d'origine qui a inventé le paradigme "sans classe" basé sur des prototypes . Il existait déjà (à un stade expérimental) dans les années 1980 et pousse à l'extrême l' utilisation élégante du modèle prototype par Smalltalk , de telle sorte que les classes sont complètement éliminées.
Cela a influencé toutes les autres langues OO "sans classe" que je connais:
Les langages tels que JavaScript sont basés sur des prototypes , dans lesquels le comportement est réutilisé en clonant des objets existants. L'article de Wikipedia que j'ai lié à indique que Lua, ActionScript et un certain nombre d'autres langages suivent ce paradigme.
Le langage de programmation orienté objet le plus populaire dans le monde ne possède pas de classes, il s'appelle Javascript et est basé sur un prototype: http://en.wikipedia.org/wiki/Prototype-based_programming
L'orientation objet est un terme générique qui désigne plusieurs concepts importants qui ne sont que partiellement contingents. Par exemple, l'héritage peut être déclaré au cas par cas entre instances plutôt qu'entre classes, ou la classe entière peut être représentée par un prototype
objet concret , comme l'a écrit Thomas. Il est plus habituel de séparer la description de la structure de la création d'instance. De même, une liaison tardive signifie que les objets ayant théoriquement la même méthode ne font pas nécessairement la même chose quand elle est invoquée et que la décision est prise au moment de l'exécution. C’est également possible avec l’approche basée sur un prototype. Et l’encapsulation est essentiellement indépendante du fait que vos objets soient des instances de classes déclarées ou non.
Cela dit, la plupart des langues OO sont fermement ancrées dans le camp des classes. Mais même dans ce cas, certains idiomes sont flous: la conception pilotée par le domaine conduit souvent à des systèmes dans lesquels l’identité d’objets particuliers est beaucoup plus importante que le diagramme de classes statique, et les décorateurs permettent aux objets de la même classe ou de la même interface comportement différent.
La forteresse est un langage orienté objet basé sur des traits plutôt que sur des classes. La différence réside principalement dans la composition de la mise en œuvre. Le comportement d'un objet (définitions de méthodes) est toujours déterminé par les déclarations en un point spécifique du texte du programme. En ce sens, cela ressemble aux systèmes basés sur des classes.
Il y a des calculs d'objet (de Cardelli, je pense), qui sont purement basés sur des objets. Chaque méthode est un membre d'instance. Vous formez de nouveaux objets en reprenant le contenu d'un objet existant et en ajoutant, supprimant ou remplaçant certains de ses membres. C'est un peu différent des prototypes, car le nouvel objet n'a aucun lien avec l'ancien, mais seulement une partie de son contenu.
IIRC, il est possible de programmer de manière similaire en utilisant Python et d’autres langages orientés hashtable: vous pouvez ajouter une fonction en tant que membre d’instance, puis l’appeler en tant que méthode.
Ada, depuis sa révision de 1995, Ada est orienté objet, mais contrairement à beaucoup d'autres langages OO, il ne combine pas les types et les modules orientés objet dans une construction unique appelée "classe". Plutôt que de déclarer un type en tant que "classe Foo" et de placer toutes les déclarations de méthode associées dans la déclaration de classe, vous déclarez un package et déclarez le type (en tant que a record
) et d'autres éléments à l'intérieur du package. Ce n'est pas "sans classe" de la même manière que certaines des autres langues mentionnées, c'est juste une manière légèrement différente d'organiser les choses.
Les fonctionnalités orientées objet d'Ada 95 ont été ajoutées à la version 1983 existante du langage; il a étendu les constructions d'enregistrement et de package existantes pour prendre en charge héritage et al.
Io est un autre langage orienté objet basé sur un prototype. Il s’inspire en réalité de plusieurs des langues déjà mentionnées dans d’autres réponses.
Io est un langage de programmation dynamique basé sur un prototype. Les idées dans Io sont principalement inspirées de Smalltalk (toutes les valeurs sont des objets), Self (basé sur un prototype), NewtonScript (héritage différentiel), Act1 (acteurs et futures pour la concurrence), Lisp (le code est une arborescence pouvant être inspectée / modifiable à l'exécution) et Lua (petit, incorporable).
Erlang. Et oui, Erlang est un langage orienté objet, car il remplit les trois points de la définition de OO.