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?
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?
Respuestas:
Hay cuatro enfoques principales, aunque estos solo rascan la superficie de lo que está disponible:
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
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.
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.