Alan Kay no inventó objetos

La gente continúa argumentando que los lenguajes modernos orientados a objetos de hecho "no están completamente orientados a objetos" porque no cumplen con la definición de OOP Alan Kay. En mi opinión, esto tiene sentido, aunque no estoy de acuerdo con la conclusión. Recientemente, he conocido personas que dicen que fue Kay quien inventó los objetos. Esto en realidad no es cierto.


Alan Kay no inventó objetos. Estaban en Simula , lo que lleva a Smalltalk-72 como la principal fuente de inspiración (p. 117). Un número de 1981 de Byte, una revista popular que popularizó Smalltalk y OOP, dijo que "la idea básica de objetos, mensajes y clases vino de SIMULA". Dice que Simula permite a los usuarios crear "sistemas orientados a objetos", que pueden ser demasiado, pero no obstante. El equipo de Smalltalk conocía bien el sistema de objetos Simula y se inspiró en él.


Una de las razones por las que tal mito sigue vivo fue lo que el propio Kay dijo en 1998 :


Solo les recuerdo que en la última OOPSLA intenté transmitir a todos que Smalltalk NO es solo una sintaxis o biblioteca de clases, sino incluso clases. Lamento haber acuñado previamente el término "objetos" para este tema, ya que hace que muchas personas se centren en una idea más pequeña.

Y más adelante en esta entrevista él continúa:


Quiero decir, inventé el término "objetos". Como hicimos los objetos primero, no había otros objetos para radicalizar esto.

Más tarde dejó de decir esto , pero la gente sigue usando esa cita como un hecho.


Alan Kay inventó el término "Programación Orientada a Objetos"


Esto es absolutamente cierto.


OOP estaba en clases y objetos


Recientemente, muchos continúan argumentando que OOP en realidad no está en clases y objetos, y que de hecho, los mensajes más importantes sí lo son. En una publicación de 1998, después de que Kay dijo que lamenta "objetos", también dice que "una gran idea es la mensajería". Él además escribe :


OOP para mí son solo mensajes, retención local y protección, ocultando el estado y luego vinculando todo. Esto se puede hacer en Smalltalk y en LISP. Probablemente hay otros sistemas donde esto es posible, pero no sé sobre ellos.

En los primeros OOP, los mensajes se consideraban importantes, principalmente para las instalaciones de servicio. Así es como Don Ingalls explica OOP en su introducción a Smalltalk-76 :


Smalltalk está más orientado a objetos que a funciones, y esto a menudo confunde a las personas con experiencia en informática. Por ejemplo, <someobject>+4 significa enviar +4 objeto como mensaje. La principal diferencia es que todo está controlado por el objeto, no por + . Si <someobject> es un entero de 3, entonces el resultado es un entero de 7. Sin embargo, si <someobject> era la cadena 'Meta' , el resultado podría ser Meta4 . Por lo tanto, la carga semántica va junto con los objetos del sistema, y ​​el código sigue siendo una forma abstracta, simplemente dirigiendo el flujo de mensajes.

En Microelectronics and the Personal Computer, Kay habla de un sistema de mensaje a la acción en el que "cada acción pertenece a una familia", y habla de expandir las actividades en el "punto de vista" de las relaciones de objeto como la frontera futura. En el manual Smalltalk-72, escribe (p. 18):


La idea principal al escribir pequeños programas de conversación es definir clases que manejen las relaciones entre los objetos en el entorno creado.

Al ver las primeras fuentes, se forma la imagen de que la OOP consta de tres ideas principales: clases que definen el protocolo y la implementación, objetos como instancias de clases y mensajes como medios de comunicación. La idea de que las clases y los objetos eran secundarios a los mensajes surgió mucho más tarde.


Smalltalk fue el primer lenguaje real orientado a objetos


ACM presentó el estreno de Turing a Dahl y Nyugor, y los llamó "coautores de la OLP". Byte también escribe que Simula estaba orientado a objetos, y en el artículo "La revolución de la computadora aún no ha sucedido", Kay llama a Sketchpad "muy orientado a objetos". En mi opinión, esto no reconoce adecuadamente los méritos de Smalltalk. A diferencia de otros sistemas, en Smalltalk:


  • No había primitivas sin objeto: los números eran objetos, los errores eran objetos, las clases eran objetos, los mensajes eran objetos.
  • Puede pasar un mensaje a cualquier objeto, incluidos otros mensajes.
  • Los métodos y las implementaciones se asociaron con objetos, no con una sesión.

El último punto es el más complicado y posiblemente el más importante, aunque nadie explica realmente qué lo hace tan especial. En Simula, invocar un método faltante provoca un error. Esto es parte de la especificación de Simula. En Smalltalk-80, si ningún método coincide con el mensaje, el objeto predeterminado devuelve un mensaje doesNotUnderstand . La persona que llama puede responder o transmitir un mensaje o señalar un error. Una clase también puede anular la acción predeterminada y hacer algo más que devolver doesNotUnderstand .


Esto también significa que el sistema de mensajería no depende de la estructura interna de los objetos. Ni siquiera tienen que ser parte de un proyecto. Se deduce que puede hacer cosas tales como enviar mensajes a objetos escritos en diferentes idiomas , enviar definiciones de objetos por correo , enviar mensajes por SMS, etc. En mi opinión, este es precisamente el poder de la "mensajería", pero al mismo tiempo es uno de los aspectos menos estudiados.


Smalltalk tenía un contexto ambiental


La gente no inventa herramientas espontáneamente. Tienen situaciones y tareas específicas, y están tratando de encontrar una solución a estos problemas. Las innovaciones en Smalltalk y OOP no son una excepción.


Alan Kay estaba interesado en el tema de las computadoras personales. Su trabajo en FLEX, Dynabook y Smalltalk se basa en esto. En su opinión, la PC debería haber estado completamente bajo el control del usuario; todo, desde la lógica del núcleo del sistema hasta la representación gráfica, podría configurarse y explorarse durante la operación. La transmisión de mensajes y la vinculación tardía resuelven varios problemas. Si un niño instala un nuevo juego, ¿necesito volver a compilar todo el sistema operativo para usar el nuevo programa? No: permite enviar un mensaje arbitrario a cualquier objeto y confiar en el procesamiento del protocolo durante el trabajo para completar la tarea. (*) Si una persona viola la lógica del sistema de sonido, ¿debería caer todo el sistema operativo? Por supuesto que no, así que deje que los objetos decidan cómo procesar los mensajes ellos mismos. Los objetos funcionan bien aquí.


Ole Dahl y Kirsten Nyugor intentaron resolver un problema completamente diferente. Estaban interesados ​​en la simulación . Un estudio en la guía Simula está modelando la propagación de la infección entre una población fija. El sistema está completamente cerrado: tiene un conjunto fijo de código, ejecuta la simulación y obtiene el resultado. Para ellos, la mensajería es inútil. Pero la capacidad de definir simulaciones en términos de otras simulaciones, de especializar entidades y modelar el tiempo como un objeto de primera clase es increíblemente útil. Los objetos también funcionan bien aquí.


Entonces, ¿quién utilizó los objetos "correctamente"? Esta es una pregunta irrazonable. Hicieron cosas diferentes porque tenían tareas diferentes. Nuestra idea moderna de OOP es una síntesis de todas sus ideas, así como las ideas de Adele Goldberg, Barbara Liskov, David Parnassus, Bertrand Meyer, Gul Ag y muchos otros. Pero ninguno de ellos puede decir qué es "OOP". Los conceptos evolucionan, al igual que las tareas.


tl; dr


Las entrevistas realizadas hace más de 30 años no son buenas fuentes.




* Quizás esto hace que Powershell sea el sucesor espiritual de Smalltalk.

Source: https://habr.com/ru/post/455638/


All Articles