¿Existe una teoría / abstracción detrás de OOP?

13

La programación funcional tiene el muy elegante cálculo Lambda y sus variantes como teoría de respaldo. ¿Existe tal cosa para OOP? ¿Qué es una abstracción para el modelo orientado a objetos?

Viclib
fuente
55
Cargas y cargas. ¿Has probado Google? Por ejemplo, hay una serie de talleres llamada FOOL dedicada a los Fundamentos de los lenguajes orientados a objetos que se ejecutan desde 1993. Eso solo rasca la superficie.
Dave Clarke
@DaveClarke. No estoy del todo de acuerdo. El cálculo Lambda es una base para la programación funcional en un sentido muy preciso. Por ejemplo, el informe de Haskell dice que todo el idioma de Haskell puede considerarse simplemente azúcar sintáctico para un idioma central que es equivalente al cálculo lambda mecanografiado. No conozco ningún lenguaje orientado a objetos que haga una afirmación similar con respecto a un cálculo. Entonces, tienes razón en que hay "cargas". Pero nada de eso es correcto.
Uday Reddy
@UdayReddy: Esto quizás se deba a la riqueza del lenguaje orientado a objetos.
Dave Clarke
1
@DaveClarke La riqueza de un tema puede significar que (1) es una buena palabra de moda, (2) realmente no entendemos el tema lo suficiente como para construir un consenso, (3) estamos mezclando varios temas que son bastante ortogonales . Aunque no he seguido de cerca la literatura (reciente) sobre la programación OO, siempre tuve la sensación de que era una mezcla de problemas sin ser muy explícita al respecto (por supuesto, esto se aplica más a los idiomas que al trabajo teórico). Estos problemas incluyen mecanografía, abstracción, estado, paralelismo, reutilización de código. Es improbable que una (una) teoría explique todas las variantes.
babou

Respuestas:

15

Hay cuatro enfoques principales, aunque estos solo rascan la superficie de lo que está disponible:

  • a través de lambdas y registros: la idea es codificar objetos, clases y métodos en términos de construcciones más tradicionales. El trabajo de Benjamin Pierce desde mediados de los 90 es representativo de este enfoque.
  • Cálculos de objetos de Abadi y Cardelli (véase el libro A Theory of Objects de Abadi y Cardelli : su abstracción principal es un registro de métodos, y el enfoque está más cerca de la realización basada en prototipos de programación orientada a objetos, aunque las clases y la herencia se pueden codificar en términos de los elementos más primitivos.
  • El cálculo de métodos múltiples de Castagna (ver el libro de Castagna Programación Orientada a Objetos Una Fundación Unificada ): su enfoque toma métodos múltiples que son la abstracción clave.
  • Cálculos basados ​​en clases (como en el libro Fundamentos de lenguajes orientados a objetos de Kim Bruce : Tipos y semántica o Featherweight Java ): estos enfoques tienen como objetivo capturar la esencia de la programación basada en clases y centrarse en las clases y la herencia.
Dave Clarke
fuente
12

La conexión entre el núcleo del modelo de objetos y la teoría de conjuntos se describe en los siguientes documentos:

Los documentos presentan la estructura de instancia y las relaciones de herencia entre objetos. Dicha estructura puede considerarse la mayor abstracción posible de OOP. Se muestra cómo la estructura se aplica a lenguajes de programación particulares (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) y también a lenguajes de ontología (Esquema RDF y OWL 2 Full).

En los documentos, el enfoque de las clases son objetos se toma para que la estructura central se ordene de forma individual. En la forma principal, la estructura se puede expresar como (O, ϵ , ≤, .ec) donde

  • O es el conjunto de objetos ,
  • ϵ es la relación de pertenencia (objeto) , un refinamiento de la relación instancia-de ,
  • ≤ es la relación de herencia , y
  • .ec es el mapa de powerclass que es una subrelación distinguida, posiblemente vacía, de ϵ.

El siguiente diagrama muestra una estructura central de muestra de acuerdo con el modelo de objetos de Ruby. Los enlaces verdes muestran la relación de herencia en la reducción transitiva reflexiva, los enlaces azules muestran la relación de pertenencia en la "reducción de subsunción": un enlace azul desde x puntos hasta el contenedor mínimo de x . El mapa de powerclass .ec está formado por enlaces azules horizontales. Los objetos de la imagen de este mapa son powerclasses (en gris). En Ruby se denominan clases propias o también clases singleton (el último término es bastante obsoleto). Los objetos s , u y v (en rosa) son terminales, los objetos restantes son descendientes de la raíz de herencia r .

  r = BasicObject; c = Class; A = c.new(r); B = c.new(A); s = A.new; u = B.new; v = B.new; class << s; end; class << v; end

Las partes centrales del modelo de objetos de todos los lenguajes anteriores se pueden ver como especializaciones de la estructura, sin ninguno o solo unos pocos componentes adicionales. Desde el punto de vista teórico, el caso más significativo de un componente adicional es el mapa singleton (denotado .ɛϲ ) introducido por Dylan. Esto convierte a Dylan en el único lenguaje de programación (de lo mencionado anteriormente) que no está sujeto a la condición de monotonicidad (≤) ○ (ϵ) ⊆ (ϵ) donde el símbolo de composición ○ se interpreta de izquierda a derecha.

Una forma de formalizar la conexión entre el núcleo del modelo de objetos y la teoría de conjuntos es a través de la familia de estructuras (O, ≤, r, .ec, .ɛϲ) llamadas estructuras de metaobjetos en los documentos referenciados, ya que x.ec o x.ɛϲ pueden considerarse como metaobjetos de x . En estas estructuras x.ec se define para cada objeto x y x.ɛς se define para cada delimitada ( "pequeño") objeto x . Las estructuras están sujetas a los nueve axiomas a continuación. La axiomatización utiliza una extensión de definición que es bastante simple para los primeros ocho axiomas ( Tdenota el conjunto de objetos terminales, aquellos que no son descendientes de r , y .ec es el cierre reflexivo transitivo de .ec ) sino que está involucrado para el último axioma.

  1. La herencia, , es un orden parcial.
  2. El mapa de powerclass, .ec , es una incrustación de orden de (O, ≤) en sí mismo.
  3. Los objetos de T.ec son mínimos.
  4. Cada clase de poder es un descendiente de r .
  5. El conjunto r.ec no tiene límite inferior.
  6. El mapa singleton, .ɛϲ , es inyectivo.
  7. Los objetos de O.ɛϲ.ec son mínimos.
  8. Para cada objeto x , y tal que x.ɛϲ esté definido, x.ɛϲ ≤ y.ec ↔ x ≤ y .
  9. Para cada objeto x , x.ɛϲ se define ↔ xd <ϖ .

En el último axioma, ϖ es un límite ordinal fijo, y .d es la función de rango derivada de la extensión de definición. La relación de pertenencia al objeto, ϵ, se obtiene como (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Según el último axioma, la restricción de dominio de ϵ al conjunto de objetos acotados es igual a ( .ɛϲ ) ○ (≤). En los documentos referenciados, esta relación se llama membresía acotada y se denota ∊. Como características significativas, esta relación está bien fundada. Esto está en contraste con ϵ que ​​no está bien fundado desde r ϵ r. Resulta que la correspondencia principal entre (la parte central de) la tecnología de objetos y la teoría de conjuntos se puede expresar como

∊ ↔ ∈

es decir, la pertenencia limitada corresponde a la pertenencia a conjuntos entre conjuntos bien fundados. Como caso especial, el universo parcial de von Neumann de rango ϖ + 1 es una estructura de metaobjetos por extensión de definición. En general, cada resumen ( ϖ + 1 ) - superestructura (O,) es, por definición, equivalente a una estructura de metaobjetos completa . Cada estructura de metaobjetos puede integrarse fielmente en una estructura de metaobjetos completa que a su vez puede integrarse fielmente en el universo von Neumann.

El término estructura básica se utiliza para una generalización de estructuras de metaobjetos. En esta generalización, se permite que .ec y. ( Sean (arbitrariamente) parciales, posiblemente vacíos. En particular, son posibles estructuras básicas finitas, con la estructura mínima que contiene solo la raíz de herencia r . Cada estructura básica puede extenderse a una estructura de metaobjeto mediante una terminación de clase de potencia seguida de una terminación de un solo tono que a su vez hace que las estructuras básicas se puedan incorporar fielmente al universo de von Neumann.

paon
fuente
@Raphael Mucho mejor, ¡gracias, paon!
David Richerby