¿Hay algún lenguaje de programación orientado a objetos que no esté basado en el paradigma de clase?
44
¿Hay algún lenguaje de programación orientado a objetos que no esté basado en el paradigma de clase?
Respuestas:
Hasta donde yo sé, Self es el lenguaje original que inventó el paradigma "sin clases" basado en prototipos . Ya existía (en una etapa experimental) en la década de 1980 y empuja el uso elegante del patrón prototipo de Smalltalk al extremo, de modo que las clases se eliminan por completo.
Influyó en todos los otros idiomas OO "sin clase" que conozco:
fuente
Los lenguajes como JavaScript se basan en prototipos , donde el comportamiento se reutiliza clonando objetos existentes. El artículo de Wikipedia con el que me vinculé indica que Lua, ActionScript y otros lenguajes siguen este paradigma.
fuente
El lenguaje de programación orientado a objetos más popular del mundo no tiene clases, se llama Javascript y está basado en prototipos: http://en.wikipedia.org/wiki/Prototype-based_programming
fuente
La orientación a objetos es un término general para varios conceptos importantes que solo dependen en parte uno del otro. Por ejemplo, la herencia se puede declarar caso por caso entre instancias en lugar de entre clases, o la clase completa se puede representar por un
prototype
objeto concreto , como escribió Thomas. Es más habitual separar la descripción de la estructura de la creación de la instancia. Del mismo modo, 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. Eso 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 campo de clase. Pero incluso entonces hay expresiones idiomáticas que difuminan la línea: el diseño impulsado por el 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 comportamiento diferente
fuente
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. Entonces, en ese sentido, es similar a los sistemas basados en clases.
Hay cálculos de objetos (por Cardelli, creo), que se basan exclusivamente en objetos. Cada método es un miembro de instancia. Usted forma nuevos objetos tomando el contenido de un objeto existente y agregando, eliminando o reemplazando algunos de sus miembros. Es ligeramente diferente de los prototipos, ya que el nuevo objeto no tiene ningún enlace con el objeto antiguo, solo algunos de sus contenidos.
IIRC, es posible programar de manera similar usando Python y otros lenguajes orientados a tablas hash: puede agregar una función como miembro de instancia y luego llamarla como método.
fuente
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 colocar todas las declaraciones de método asociadas dentro de la declaración de clase, declara un paquete y declara el tipo (como a
record
) y otras cosas dentro del paquete. No es "libre de clases" en la forma en que 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 herencia et al.
fuente
Io es otro lenguaje orientado a objetos basado en prototipos. En realidad, se inspira en varios de los idiomas ya mencionados en otras respuestas.
fuente
Erlang Y sí, Erlang es un lenguaje orientado a objetos, ya que cumple con los tres puntos de la definición de OO.
fuente