2010-08-07 24 views
21

Message-passing es una parte fundamental de Erlang. Alan Kay tiene argued que el paso de mensajes es un concepto más importante que los objetos en su visión de la programación orientada a objetos (¡y él "inventó" el término!).¿Está Erlang orientado a objetos?

¿Se puede considerar a Can Erlang como un lenguaje de programación orientado a objetos (a la Smalltalk)?

Respuesta

6

Creo que en el nivel superior Erlang está orientado a objetos dado que usted cree en los conceptos originales discutidos alrededor del término. Con esto quiero decir aislamiento, paso de mensajes, polimorfismo.

Los procesos de Erlang pueden aferrarse al estado, realizar acciones en ese estado y están aislados de otros procesos, ya que no se pueden afectar directamente entre sí. Como cualquier proceso puede recibir cualquier mensaje (y un mensaje puede delegarse fácilmente en otro proceso que podría enviar una respuesta al remitente original), creo que también cumple con el polimorfismo.

Ciertamente, Erlang en un nivel inferior muestra sus aspectos funcionales, pero una vez más creo que en el nivel superior (donde está pasando y coordinando mensajes entre procesos) Erlang se comporta de forma orientada a objetos. Simplemente no puede quedar atrapado pensando que la orientación a objetos tiene que ver con las clases, la herencia y las llamadas a métodos (que es diferente del envío de mensajes). Solo así se nos ha proporcionado el paradigma en la mayoría de los lenguajes principales.

17

Citando de Wikipedia, que cita a here:

Benjamin Cuire Pierce y algunos otros investigadores ven como inútil cualquier intento de destilar programación orientada a objetos a un conjunto mínimo de características.

Pero al mirar a su propio intento inútil:

  • Asignación dinámica - si se trata de un proceso de Erlang como un objeto, entonces sí, que está apoyado.
  • Encapsulación: si trata el envío/respuesta de mensajes como una llamada a método, es compatible.
  • Subtipo polimorfismo - tipo de - si se estira la definición de los comportamientos suficientes, es apoyado
  • objeto de herencia (o delegación) - sin ninguna comprobación de la corrección, se puede sustituir un objeto por otro - así que digamos que está bien
  • recursividad abierto - es apoyado (envíe al propio proceso)

Así que sí - con un poco de humo y destellos, podría intentar alegando que Erlang está orientado a objetos. Pero podría utilizar los mismos trucos para presentar C como un lenguaje OO, porque puede usar el estilo OO e implementar vtables manualmente.

La respuesta de cualquier persona en su sano juicio que mire a Erlang probablemente sea "no" Erlang es un lenguaje funcional/orientado a mensajes.

Otra respuesta podría ser "¿por qué molestarse en clasificar"/"¿quién necesita saber"?

+3

el Sr. X no hablar explícitamente sobre la forma OO Alan Kay significa el término, que es bastante menos que lo que esponjoso "OO" significa hoy. Claramente, C no es OO en el sentido Kay, ya que el lenguaje no tiene noción de transmisión de mensajes. (¡Y el mensaje que pasa no es una invocación al método!) –

28

Joe Armstrong tiene gone on record diciendo que él piensa que Erlang es "posiblemente la única lenguaje orientado a objetos" (el contexto añade "OO en el sentido Alan Kay de la palabra").Johnson, en la misma entrevista, señala las mismas cosas que dice Sean Copenhaver en su respuesta: en las pequeñas, Erlang es un lenguaje puramente funcional; en general, con procesos, se ve exactamente como la orientación a objetos estilo Kay.

+1

Ah, dang, me olvidé completamente de esa entrevista. +1 por ponerlo allí. InfoQ tiene una pareja con Joe Armstrong y es muy interesante escucharlo hablar sobre cómo Erlangers ve las cosas. –

+0

La cita es: "No estoy seguro si creo esto o no, pero erlang podría ser el único lenguaje orientado a objetos". –

6

Joe Armstrong ha publicado una publicación en su blog sobre OO y ha respondido esta pregunta.

Como Erlang se hizo popular a menudo nos preguntamos "¿Es Erlang OO" - bueno, por supuesto la verdadera respuesta fue "No por supuesto que no" - pero no quiere decir esto en voz alta - por lo que inventó una serie de maneras ingeniosas de respondiendo a la pregunta que fueron diseñadas para dar la impresión de que Erlang era (algo así) OO (si agitaba las manos mucho) pero no realmente (Si escucharon lo que realmente dijimos, y lea la letra pequeña cuidadosamente).

Por cierto, el artículo es una crítica muy interesante OO: http://harmful.cat-v.org/software/OO_programming/why_oo_sucks

Cuestiones relacionadas