¿Existen lenguajes de programación orientados a objetos que no estén basados en clases?

44

¿Hay lenguajes de programación orientados a objetos que no se basan en el paradigma de clase?

    
pregunta blunders 20.10.2011 - 21:04

8 respuestas

74

Por lo que sé, Self es el idioma original que inventó el paradigma de "clase libre" basado en prototypes . Ya existía (en una etapa experimental) en la década de 1980 y empuja el uso elegante de Smalltalk del patrón de prototipo al extremo, de modo que las clases se eliminen por completo.

Influyó en todos los demás lenguajes OO "sin clase" que conozco:

  • Javascript más prominente,
  • el lenguaje y entorno de programación clásico Squeak (que está construido sobre Smalltalk)
  • el lenguaje de script de paradigma múltiple Lua .
respondido por el DaveFar 20.10.2011 - 21:18
32

Los lenguajes como JavaScript son basados en prototipos , donde el comportamiento se reutiliza mediante la clonación de objetos existentes. El artículo de Wikipedia al que he vinculado indica que Lua, ActionScript y varios otros idiomas siguen este paradigma.

    
respondido por el Thomas Owens 20.10.2011 - 21:09
13

El lenguaje de programación orientado a objetos más popular del mundo no tiene clases, se llama Javascript y está basado en prototipos: enlace

    
respondido por el bezko 20.10.2011 - 21:11
6

La orientación a objetos es un término general para varios conceptos importantes que solo dependen en parte de los demás. Por ejemplo, la herencia se puede declarar caso por caso entre instancias en lugar de entre clases, o la clase entera puede representarse mediante un objeto concreto prototype , como escribió Thomas. Es más habitual separar la descripción de la estructura de la creación de la instancia. De manera similar, el enlace tardío significa que los objetos con nominalmente el mismo método no necesariamente hacen lo mismo cuando se invoca, y que la decisión se toma en tiempo de ejecución. Esto también es posible con el enfoque basado en prototipos. Y la encapsulación es esencialmente completamente independiente de si sus objetos son instancias de clases declaradas o no.

Dicho esto, la mayoría de los idiomas OO están firmemente en el campamento basado en la clase. Pero incluso entonces hay modismos que confunden la línea: el diseño controlado por dominio a menudo conduce a sistemas en los que la identidad de objetos particulares es mucho más importante que el diagrama de clases estático, y los decoradores permiten que los objetos de la misma clase o interfaz tengan mucho diferente comportamiento.

    
respondido por el Kilian Foth 20.10.2011 - 21:15
6

Fortress es un lenguaje orientado a objetos basado en rasgos en lugar de clases. La diferencia está principalmente en la composición de la implementación. El comportamiento de un objeto (definiciones de métodos) aún está determinado por las declaraciones en un punto específico del texto del programa. Así que en ese sentido es similar a los sistemas basados en clases.

Hay cálculos de objetos (por Cardelli, creo), que están puramente basados en objetos. Cada método es un miembro de instancia. Para formar nuevos objetos, tome el contenido de un objeto existente y agregue, elimine o reemplace algunos de sus miembros. Es un poco diferente de los prototipos, ya que el nuevo objeto no tiene enlace al objeto antiguo, solo parte de su contenido.

IIRC, es posible programar de manera similar usando Python y otros lenguajes orientados a tablas de hash: puedes agregar una función como miembro de la instancia y luego llamarla como método.

    
respondido por el Ryan Culpepper 20.10.2011 - 23:20
5

Ada, a partir de su revisión de 1995, Ada está orientada a objetos, pero a diferencia de muchos otros lenguajes OO, no combina tipos y módulos orientados a objetos en una sola construcción llamada "clase". En lugar de declarar un tipo como "clase Foo", y poner todas las declaraciones de métodos asociadas dentro de la declaración de clase, declara un paquete y declara el tipo (como record ) y otras cosas dentro del paquete. No es "libre de clases" como lo son algunos de los otros idiomas mencionados, es solo una forma ligeramente diferente de organizar las cosas.

Las características orientadas a objetos de Ada 95 se agregaron a la versión existente de 1983 del lenguaje; extendió el registro existente y las construcciones de paquetes para admitir la herencia et al.

    
respondido por el Keith Thompson 21.10.2011 - 00:42
5

Io es otro lenguaje orientado a objetos basado en prototipos. En realidad, se inspira en varios de los idiomas ya mencionados en otras respuestas.

  

Io es un lenguaje de programación dinámico basado en prototipos. Las ideas en Io.   están inspirados principalmente en Smalltalk (todos los valores son objetos), Self   (basado en prototipo), NewtonScript (herencia diferencial), Ley 1   (actores y futuros para la concurrencia), Lisp (el código es un tiempo de ejecución   árbol inspeccionable / modificable) y Lua (pequeño, empotrable).

    
respondido por el Zsolt Török 21.10.2011 - 13:06
4

Erlang. Y sí, Erlang es un lenguaje orientado a objetos, ya que cumple con los tres puntos de la definición de OO.

    
respondido por el Jörg W Mittag 21.10.2011 - 01:53

Lea otras preguntas en las etiquetas