Definición formal / contraparte en matemáticas para "objetos" de modelos orientados a objetos

9

Esta es una pregunta que hice en el foro de matemáticas SE, y me remitieron aquí. Así que aquí está la cuestión-

Soy un novato tanto en matemática formal como en informática teórica, así que por favor tengan paciencia conmigo si encuentran que mi pregunta no está bien formulada. El modelado orientado a objetos parece muy útil para definir interacciones complejas al simular el mundo real. Pero se usa principalmente en programación. Me preguntaba si tenemos un concepto similar en matemáticas. Cuando hacemos programación, podemos entender el concepto de "Objetos" y "Programación Orientada a Objetos" y simplemente implementarlo. Pero, ¿tenemos una definición formal de "objetos" en términos de teoría de conjuntos? O para el caso, ¿alguna otra teoría matemática formal?

¿Podemos implementar / definir formalmente tres conceptos primarios de modelado orientado a objetos? 1. Encapsulación 2. Herencia 3. Polimorfismo

Sé que la pregunta es demasiado amplia, pero realmente agradecería si me puede proporcionar algunos consejos para que pueda entender mejor estos conceptos.

usuario1260776
fuente
2
Realmente hay dos preguntas como lo veo. Uno está pidiendo un formalismo de conceptos orientados a objetos. El otro está pidiendo conceptos orientados a objetos en matemáticas. Quizás sería mejor hacer dos preguntas separadas. Hay mucho material para responder la primera pregunta, aunque probablemente solo un poco para la segunda. (Y tal vez mañana encuentre tiempo para responder la pregunta.)
Dave Clarke
Gracias ... ¿podría sugerirme un material para la formalización de conceptos orientados a objetos que se considere estándar o "libro de texto"? Esperaré su respuesta para la segunda ... :)
user1260776
2
El libro estándar (de hace unos años) es Una teoría de los objetos . El trabajo más reciente es Featherweight Java . También hay una serie de talleres llamados Fundamentos de lenguajes orientados a objetos que tratan estos temas.
Dave Clarke
¡Gracias! Los
examinaré

Respuestas:

9

La respuesta es complicada, por dos razones.

  1. Diferentes personas en informática interpretan el término "objeto" de manera diferente. Una es que un objeto consta de algunos datos y operaciones agrupados. La otra es que un objeto es todo eso, pero también tiene "estado", es decir, es una forma de entidad cambiante .

  2. Hay cuestiones filosóficas profundas que ver con lo que significa "cambio" (y qué significa "entidad", ya que está cambiando constantemente), y si las descripciones matemáticas en realidad capturan entidades cambiables.

Objeto en el sentido de datos + operaciones : eso es bastante estándar en matemáticas. Tome cualquier libro de texto de teoría de grupo. Tendrá en alguna parte una definición como . (Es un operador de conjugación). El es un "objeto" en esta terminología. Tiene algunos datos ( ) y una operación . O puede hacerlo más objeto-y tomando el par o el triplehg(x)=gxg1hggxgxg1g,xgxg1g,xgxg1,xg1xg. Puede construir este tipo de "objetos" en cualquier lenguaje de programación funcional que tenga abstracción lambda y alguna forma de formar tuplas. La "Teoría de los objetos" de Abadi y Cardelli trata ampliamente con objetos de este tipo.

Objetos con estado (u objetos que cambian ): ¿Las matemáticas tienen tales cosas? No lo creo. No he visto a un matemático hablar sobre nada que cambie, no en su vida profesional. Newton solía escribir para la posición de una partícula, que supuestamente está cambiando, y para su velocidad de cambio. Los matemáticos finalmente descubrieron que lo que Newton estaba hablando era una función de números reales en un espacio vectorial, y era otra de esas funciones, que era la primera derivada de con respecto axx˙x(t)x˙x(t)t. A partir de esto, muchos matemáticos de pensamiento profundo han concluido que el cambio realmente no existe y que todo lo que tienes son funciones del tiempo. Pero lo que estaba cambiando en la mecánica newtoniana no era la posición, sino la partícula . La posición es su estado instantáneo. Ningún matemático o físico pretendería que una partícula es una idea matemática. Es una cosa física.

Así es con los objetos. Son cosas "físicas", y los estados son sus atributos matemáticos. Para una buena discusión de este aspecto, vea el Capítulo 3 de la Estructura e interpretación de programas de computadora de Abelson y Sussman . Este es un libro de texto en el MIT y lo enseñan a todos los científicos e ingenieros, quienes creo que entienden perfectamente las cosas "físicas".

El hecho de que las partículas no sean matemáticas no significa que no podamos tratarlas matemáticamente. Si le pide a un matemático que modele un sistema de dos partículas, él inmediatamente inventará dos funciones y las llamará y . Entonces, las dos partículas se reducen a dos índices sin sentido (1 y 2). Esta es la forma en que el matemático dice que no sabemos cuáles son esas partículas y que no nos importa. Todo lo que necesitamos saber es que sus posiciones evolucionan independientemente (o por separado). Entonces, los modelaremos por dos funciones separadas.x 2 ( t )x1(t)x2(t)

Del mismo modo, la forma matemática estándar para modelar programas orientados a objetos es tratar cada objeto como un índice en el espacio de estado. La única diferencia es que dado que los objetos van y vienen, y la estructura del sistema es dinámica, necesitamos extenderlo a un modelo de "mundo posible" donde cada mundo es básicamente una colección de índices. La asignación y desasignación de objetos implicaría moverse de un mundo a otro.

Sin embargo hay un problema. A diferencia de la mecánica, queremos que el estado de nuestros objetos se encapsule . Pero las descripciones matemáticas de los objetos ponen estados por todo el lugar, destruyendo completamente la encapsulación. Hay un truco matemático llamado "parametricidad relacional" que se puede utilizar para recortar las cosas a su tamaño. No lo abordaré ahora, excepto para enfatizar que es un truco matemático, no una explicación muy conceptual de la encapsulación. Una segunda forma de modelar objetos matemáticamente, con encapsulación, es refinar los estados y describir el comportamiento del objeto en términos de eventos observables. Para una buena discusión de ambos modelos, puedo referirme a mi artículo titulado Objetos y clases en lenguajes similares a Algol .


[Nota agregada:]

Un buen análisis de los fundamentos matemáticos de los objetos se puede encontrar en el artículo de William Cook " Sobre la comprensión de la abstracción de datos, revisitado ".

Uday Reddy
fuente
2
Sabía que alguien aquí podría responder ...
Andrej Bauer
Gracias Uday, por su tiempo y respuesta detallada. Cuando hice esta pregunta, estaba pensando solo en el sentido de "datos + operaciones", y nunca se me ocurrió que la teoría de grupo puede representar "OBJETO" como "datos + operaciones". Además, también revisaré los enlaces que ha referido.
user1260776
@AndrejBauer. Sí, probablemente me fui por la borda. El OP probablemente estaba usando "matemáticas" como una palabra para formalización, en lugar de una disciplina.
Uday Reddy
@Uday, podría no haber formulado correctamente la pregunta, pero cuando quise decir "matemáticas", me refería claramente a las matemáticas formales. Mi pensamiento era "la teoría de conjuntos" forma la base de las matemáticas, cómo "explicar" o "derivar" los objetos de la modelización OO en términos de teoría de conjuntos. ¿Cómo unimos todo esto? Teoría de conjuntos, objetos y lógica formal (como lógica de primer orden) ... "Aunque no entiendo tu respuesta completamente, puedo entender" lo que dijiste, y te aseguro que esta es la respuesta que esperaba. ¡Gracias! (Mis ideas no están completamente organizadas, por favor, perdóname, todavía soy novato :))
user1260776
2
@ user1260776. Entiendo. Pero mi punto es que "formal" y "matemáticas" son ideas diferentes. Puede formalizar conceptos sin reducirlos (o derivarlos) de las matemáticas. Newton formalizó la mecánica pero no se molestó en reducir las "partículas" a "conjuntos". Personalmente, estoy muy feliz de seguir el ejemplo de Newton y admitir cosas que no reduzco a sets. Pero, supongo que tenemos que saber cuándo reducir y cuándo no reducir. Después de haber sido entrenado como físico, me parece bastante fácil de hacer. Para muchos otros informáticos, puede que no sea tan fácil.
Uday Reddy,
0

creo que hay una descripción teórica bastante buena de los objetos en el viejo libro clásico "estructura e interpretación de programas de computadora" [1] por abelson & sussman, basado en el esquema (una variante de lisp). ahora gratis en línea! esto muestra cómo el concepto de orientación a objetos puede integrarse incluso en el cálculo lambda (~ alias Lisp) si tiene algún mecanismo para almacenar el estado local. Según tengo entendido, este fue un libro de texto estándar del MIT por muchos años. sin decir que esta es la mejor referencia en el subj; Estoy seguro de que hay otros mejores en este punto.

No creo que esto se haya formalizado totalmente en ningún lugar del que haya oído hablar, pero en términos generales, los objetos se componen básicamente de código + datos en forma de

  • métodos (con parámetros)
  • estado, es decir, variables de instancia

en alguna forma encapsulada. posiblemente otros aspectos como la herencia no son fundamentales. como se afirma en abelson & sussman, lo que ellos llaman "azúcar sintáctico".

[1] estructura e interpretación de programas de computadora por abelson & sussman

vzn
fuente
3
Por supuesto, los objetos en el sentido de la programación orientada a objetos se han formalizado. Hay libros de Abadi y Cardelli, Castanga y Kim Bruce dedicados al tema. Ha habido 10 años de talleres en la serie FOOL dedicados a los fundamentos de la programación orientada a objetos. Las conferencias ECOOP y OOPSLA regularmente tenían documentos sobre los fundamentos de OO. De hecho, el primer artículo sobre la semántica de OO tiene aproximadamente 20 años.
Dave Clarke
@vzn, gracias por la respuesta.
Revisaré
DC-- Lo expresé mal. Más exactamente, creemos que es seguro decir que las definiciones formales de lo que constituye exactamente un "objeto" o cuáles son los componentes clave / fundamentales de la POO tienden a variar significativamente en la literatura. las definiciones probablemente se han expandido significativamente con el tiempo. por ejemplo, sospecho que la herencia se agregó más tarde y la idea original era principalmente solo código + datos en forma encapsulada.
vzn
Otro ejemplo de una característica de OOP que no se acuerda como fundamental por lo que puedo decir es la herencia múltiple que se ve, por ejemplo, en C ++, pero se evita intencionalmente en Java a favor de las interfaces. etc
vzn