A programação funcional tem o muito elegante Lambda Calculus e suas variantes como uma teoria de backup. Existe algo assim para OOP? O que é uma abstração para o modelo orientado a objetos?
A programação funcional tem o muito elegante Lambda Calculus e suas variantes como uma teoria de backup. Existe algo assim para OOP? O que é uma abstração para o modelo orientado a objetos?
Respostas:
Existem quatro abordagens principais, embora elas apenas arranhem a superfície do que está disponível:
A conexão entre o núcleo do modelo de objeto e a teoria dos conjuntos é descrita nos seguintes documentos:
Os documentos apresentam a estrutura das relações de instância e herança entre objetos. Essa estrutura pode ser considerada a mais alta abstração possível de OOP. É mostrado como a estrutura se aplica a linguagens de programação específicas (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) e também a linguagens de ontologia (RDF Schema e OWL 2 Full).
Nos documentos, as classes são objetos, a abordagem é adotada para que a estrutura principal seja classificada de maneira única. Na forma principal, a estrutura pode ser expressa como (O, ϵ , ≤, .ec) em que
Uma estrutura de núcleo de amostra de acordo com o modelo de objeto Ruby é mostrada no diagrama a seguir. Os links verdes mostram a relação de herança na redução transitiva reflexiva, os links azuis mostram a relação de associação na "redução de subsunção" - um link azul de x aponta para o menor contêiner de x . O mapa da classe power .ec é formado por links azuis horizontais. Os objetos da imagem deste mapa são classes de força (em cinza). Em Ruby, eles são chamados classes próprias ou também classes singleton (o último termo é bastante obsoleto). Os objetos s , u e v (em rosa) são terminais, os objetos restantes são descendentes da raiz da herança 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
As partes principais do modelo de objeto de todas as linguagens acima podem ser vistas como especializações da estrutura, com nenhum ou apenas alguns constituintes adicionais. Do ponto de vista teórico, o caso mais significativo de um constituinte adicional é o mapa de singleton (denotado .ɛϲ ) introduzido por Dylan. Isso faz de Dylan a única linguagem de programação (acima mencionada) que não está sujeita à condição de monotonicidade (≤) ○ (ϵ) ⊆ (ϵ) onde o símbolo de composição ○ é interpretado da esquerda para a direita.
Uma maneira de formalizar a conexão entre o núcleo do modelo de objeto e a teoria dos conjuntos é através da família de estruturas (O, ≤, r, .ec, .ɛϲ) denominadas estruturas de metaobjetos nos documentos referenciados, pois x.ec ou x.ɛϲ podem ser considerados como meta-objetos de x . Nessas estruturas, x.ec é definido para todo objeto x e x.ɛϲ é definido para todo objeto limitado ("pequeno") x . As estruturas estão sujeitas aos nove axiomas abaixo. A axiomatização utiliza uma extensão de definição bastante simples para os oito primeiros axiomas ( Tdenota o conjunto de objetos terminais - aqueles que não são descendentes de r , e .ec ∗ é o fechamento transitivo reflexivo de .ec ), mas envolvido pelo último axioma.
No último axioma, ϖ é um ordinal de limite fixo e .d é a função de classificação derivada pela extensão de definição. A relação de associação ao objeto, ϵ, é obtida como (( .ɛϲ ) ∪ ( .ec )) ○ (≤). De acordo com o último axioma, a restrição de domínio de ϵ para o conjunto de objetos delimitados é igual a ( .ɛϲ ) ○ (≤). Nos documentos referenciados, essa relação é chamada associação limitada e denotada ∊. Como característica significativa, essa relação é bem fundamentada. Isso contrasta com ϵ que não é fundamentado desde que r ϵ r. Acontece que a principal correspondência entre (a parte principal) da tecnologia de objetos e a teoria dos conjuntos pode ser expressa como
∊ ↔ ∈
ou seja, associação limitada corresponde à associação de conjuntos entre conjuntos bem fundamentados. Como um caso especial, o universo parcial de von Neumann da classificação ϖ + 1 é uma estrutura de metaobjeto por extensão de definição. Em geral, toda superestrutura ( ϖ + 1 ) - (O, ∊ ) é definitivamente equivalente a uma estrutura completa de metaobjetos. Toda estrutura de metaobjeto pode ser fielmente incorporada a uma estrutura completa de metaobjeto que, por sua vez, pode ser fielmente incorporada ao universo de von Neumann.
O termo estrutura básica é usado para uma generalização de estruturas de metaobjetos. Nesta generalização, .ec e .ɛϲ podem ser (arbitrariamente) parciais, possivelmente vazios. Em particular, estruturas básicas finitas são possíveis, com a estrutura mínima contendo apenas a raiz da herança r . Toda estrutura básica pode ser estendida a uma estrutura de metaobjeto por uma conclusão de classe de poder seguida por uma conclusão de singleton que, por sua vez, torna estruturas básicas fielmente incorporáveis ao universo de von Neumann.