¿Cómo llamaron a la programación orientada a objetos antes de que Alan Kay inventara el término?

22

Alan Kay afirma que "inventé el término" orientado a objetos ", y puedo decirle que no tenía en mente C ++". Lo que tenía en mente, por supuesto, era Smalltalk. Pero no inventó la programación orientada a objetos en sí; Obtuvo las ideas básicas de Simula. Entonces, si el término aún no se había inventado, ¿cómo se llamaban originalmente programación orientada a objetos en Simula?

Mason Wheeler
fuente

Respuestas:

39

En realidad, Alan Kay no tenía en mente a Smalltalk cuando se le ocurrió el término "programación orientada a objetos":

En Utah, en algún momento después del 66 de noviembre, cuando, influenciado por Sketchpad, Simula, el diseño de ARPAnet, el Burroughs B5000 y mi experiencia en Biología y Matemáticas, pensé en una arquitectura para la programación. Probablemente fue en 1967 cuando alguien me preguntó qué estaba haciendo y yo dije: "Es una programación orientada a objetos".

La concepción original de la misma tenía las siguientes partes.

  • Pensé en los objetos como células biológicas y / o computadoras individuales en una red, solo capaces de comunicarse con los mensajes (por lo que los mensajes llegaron al principio, tomó un tiempo ver cómo hacer mensajes en un lenguaje de programación lo suficientemente eficiente como para sé útil).
  • Quería deshacerme de los datos. El B5000 casi hizo esto a través de su arquitectura HW casi increíble. Me di cuenta de que la metáfora de la célula / computadora completa eliminaría los datos, y que "<-" sería solo otra señal de mensaje (me tomó bastante tiempo pensar esto porque realmente pensé en todos estos símbolos como nombres para funciones y procedimientos.
  • Mi formación matemática me hizo darme cuenta de que cada objeto podría tener varias álgebras asociadas, y podría haber familias de estos, y que estos serían muy, muy útiles. El término "polimorfismo" se impuso mucho más tarde (creo que Peter Wegner) y no es del todo válido, ya que realmente proviene de la nomenclatura de funciones, y quería un poco más que funciones. Creé un término "genérico" para tratar comportamientos genéricos en una forma cuasi algebraica.
  • No me gustó la forma en que Simula I o Simula 67 heredaron (aunque pensé que Nygaard y Dahl eran simplemente pensadores y diseñadores tremendos). Así que decidí dejar de lado la herencia como una característica incorporada hasta que lo entendí mejor.

Smalltalk fue el resultado de esta concepción, tomando prestados y extendiendo los conceptos de "objeto" y "clase" de Simula, que Simula a su vez heredó de ALGOL, como se describe en "El desarrollo de los lenguajes de Simula" por Kristen Nygaard y Ole-Johan Dahl (1978, página 253):

En ALGOL, los bloques (incluidos los procedimientos) se ven externamente como operaciones generalizadas. Al introducir mecanismos para la secuencia cuasi-paralela, ~ esencialmente la misma construcción podría desempeñar el papel de procesos en paralelo, y a través de mecanismos para nombrar instancias de bloque y acceder a sus contenidos podrían funcionar como objetos de datos generalizados. Los beneficios esenciales de combinar datos y operaciones en una sola construcción ya estaban allí para ser explorados.

Un resultado de esta exploración fue el descubrimiento de que los "atributos del procedimiento" podrían ser útiles. El siguiente ejemplo de una clase de objetos de automóvil "abstractos" se cita del documento de Definición del lenguaje (Dahl y Nygaard 1965), sec. 5.3.

Otra inspiración, especialmente para las subclases, fue la clase de registro de CAR Hoare (página 258):

La idea de la subclase de Hoare (68) era un punto de partida natural, pero había dos dificultades:

  1. Necesitábamos subclases de procesos con acciones propias y pilas de datos locales, no solo de registros de datos puros.
  2. También necesitábamos agrupar propiedades de proceso comunes de tal manera que pudieran aplicarse más tarde, en una variedad de situaciones diferentes que no necesariamente se conocen de antemano.

Se pasó mucho tiempo durante el otoño de 1966 tratando de adaptar la construcción de la clase de grabación de Hoare para cumplir con nuestros requisitos, sin éxito. La solución llegó repentinamente, con la idea de "prefijar", en diciembre de 1966. Estábamos pensando en términos de cabina de atolón en un puente, con una cola de autos que eran camiones o autobuses. (Este ejemplo vuelve a aparecer en (Dahl y Nygaard 1968)).

Los términos "clase" y "objeto" también aparecen en SIMULA 67 COMMON BASE LANGUAGE por Ole-Johan Dahl, Bjorm Myhrhaug y Kristen Nygaard (páginas 4-5):

El concepto de bloque corresponde a la noción intuitiva de "subproblema" o "sub-algoritmo", que es una unidad útil de descomposición en áreas de aplicación ortodoxas.

Un bloque es una descripción formal o "patrón" de una estructura de datos agregados y sus algoritmos y acciones asociados.

...

Se introduce un concepto de bloque extendido a través de una declaración de "clase" y un mecanismo de interacción asociado, como "referencias de objeto" (punteros), acceso remoto ", operación" casi paralela "y" concatenación de bloque ".

Las clases se analizan con más detalle en el capítulo 1.3.3 (página 5):

Un nuevo concepto central en Simula 67 es el "objeto". Un objeto es un programa autónomo (instancia de bloque), que tiene sus propios datos locales y acciones definidas por una "declaración de clase". La declaración de clase define un patrón de programa (datos y acción), y se dice que los objetos que se ajustan a ese patrón "pertenecen a la misma clase".

...

Entonces, aunque el término "orientado a objetos" aún no se inventó, tanto "clase" como "objeto" se usaron de manera similar a su uso moderno antes de que Alan Kay comenzara a desarrollar Smalltalk en 1969.

Ivan Sutherland llega a identificar a Simula como el primer lenguaje de programación orientado a objetos, en Sketchpad: un sistema de comunicación gráfica hombre-máquina (página 4), que también reconoce las influencias de CAR Hoare, Douglas T. Ross , ALGOL y Sketchpad:

Sin embargo, el intento de Sutherland de eliminar la división entre usuarios y programadores no fue el único sistema que, al no hacerlo, proporcionó el salto imaginativo a un nuevo paradigma de programación. La Simula de Nygaard y Dahl [7] fue el primer lenguaje de programación convencional que incorporó los principios de orientación a objetos, pero la implementación de Sketchpad de la herencia basada en clases y en instancias (aunque no se llama objetos) precedió a Simula por varios años.

Parece haber habido una influencia común a través del trabajo de Douglas T. Ross, a quien se menciona en los reconocimientos de esta disertación y también se cita en el informe técnico del MIT Lincoln Laboratory basado en ella. Ross se sentó en el comité Algol 68 con CAR Hoare a mediados de la década de 1960, donde su trabajo previo sobre una estructura de datos similar a un registro (llamado plex) influyó en las ideas de Hoare sobre tipos de datos abstractos [3], luego acreditados por Nygaard y Dahl como el origen de los mecanismos de definición de clase en Simula [7].

El proyecto fundamental Dynabook de Alan Kay, que condujo tanto a la Estrella Xerox como a la explosión de interés en la programación orientada a objetos a través de su lenguaje Smalltalk, fue influenciado directamente por Sketchpad. Kay ha escrito sobre el hecho de que la génesis de Smalltalk reside en la aparición coincidente en su escritorio de una cinta de distribución de Simula y una copia de la tesis de Sutherland Sketchpad [5]. Kay reconoció que los dos sistemas se basaban en los mismos conceptos de tipo subyacentes (aparentemente derivados a través de dos rutas diferentes del complejo de Ross), y que estos podrían formar la base de un sistema de programación más ampliamente utilizable. Al comparar estas dos rutas de influencia, Simula fue un proyecto mucho más grande que Sketchpad, reconocido correctamente como el primer lenguaje de programación orientado a objetos,

Sin embargo, Alan Kay, obviamente, considera Smalltalk como el primer lenguaje orientado a objetos :

Aunque tiene antepasados ​​nobles, la contribución de Smalltalk es un nuevo paradigma de diseño, que llamé orientado a objetos, para atacar grandes problemas del programador profesional y hacer posibles los pequeños para el usuario novato. El diseño orientado a objetos es un intento exitoso de mejorar cualitativamente la eficiencia de modelar los sistemas dinámicos cada vez más complejos y las relaciones de usuario posibles gracias a la explosión de silicio.

y habiendo acuñado el término, creo que no hay mucho debate allí.

Para responder finalmente a su pregunta: algunos de los conceptos centrales de la orientación a objetos existían en Simula y en lenguajes anteriores como Algol y LISP, pero el paradigma en sí no existía, por lo que no era realmente necesario un nombre.

Smalltalk fue diseñado con la orientación a los objetos en mente, al menos lo que Alan Kay pensó como orientación a los objetos :

OOP para mí significa solo mensajes, retención local y protección y ocultación del proceso estatal, y un enlace tardío extremo de todas las cosas. Se puede hacer en Smalltalk y en LISP. Posiblemente hay otros sistemas en los que esto es posible, pero no estoy al tanto de ellos.

La arquitectura puede parecer una amalgama de conceptos anteriores, pero Smalltalk introdujo sus conceptos centrales, marcando así la primera implementación del paradigma.

Yannis
fuente
2
+1 Como siempre, excelente respuesta Yannis! Aprendí bastante de esto.
Jonathan Henson el
66
En realidad, hay mucho debate y una buena razón para ello. A pesar de la afirmación autogrande de Alan Kay de un "nuevo paradigma", prácticamente no hay forma de definir "orientado a objetos" que incluya Smalltalk pero excluya Simula. La idea de "todo es un objeto" estaba presente en algunas implementaciones (y es principalmente un concepto en Smalltalk también, como optimización, los objetos enteros pequeños tienen una representación que es prácticamente indistinguible de lo que usaría algo como C o Pascal).
Jerry Coffin
1
@JerryCoffin No estoy en desacuerdo con que la mayoría de los conceptos y principios estaban allí, nada nuevo bajo el sol, en The Early History of Smalltalk Kay incluso hace referencia a Platón como una inspiración para la orientación a objetos, entre muchas otras influencias. Personalmente, seguiré pensando que Smalltalk introdujo el paradigma, porque fue la primera implementación diseñada con el paradigma en mente, mientras que en implementaciones anteriores los conceptos relacionados eran características, centrales o menores, pero no la filosofía de conducción que trajo adelante el lenguaje.
Yannis
1
@JerryCoffin (cont ...) Sin embargo, ese es un territorio de guerra de llamas, y realmente no creo que importe. Creo que la cita de Sutherland que he incluido presenta adecuadamente el hecho de que no todos están de acuerdo en que Kay "inventó" el paradigma, y ​​mi opinión personal al respecto no es más que una nota al pie.
Yannis
55
En realidad, el concepto central no es "toda entidad es un objeto", sino "cada acción es un mensaje enviado". Alan Kay incluso dice que lamenta nombrarlo "orientado a objetos" y que algo como "orientado a mensajes" habría sido un término mejor.
Jörg W Mittag el