La programmazione funzionale ha il molto elegante Lambda Calculus e le sue varianti come teoria del backup. Esiste qualcosa del genere per OOP? Che cos'è un'astrazione per il modello orientato agli oggetti?
La programmazione funzionale ha il molto elegante Lambda Calculus e le sue varianti come teoria del backup. Esiste qualcosa del genere per OOP? Che cos'è un'astrazione per il modello orientato agli oggetti?
Risposte:
Esistono quattro approcci principali, anche se questi graffiano solo la superficie di ciò che è disponibile:
La connessione tra il nucleo del modello a oggetti e la teoria degli insiemi è descritta nei seguenti documenti:
I documenti presentano la struttura dell'istanza e le relazioni di ereditarietà tra gli oggetti. Tale struttura può essere considerata la massima astrazione possibile di OOP. Viene mostrato come la struttura si applica a particolari linguaggi di programmazione (Ruby, Python, Java, Scala, Smalltalk-80, Objective-C, CLOS, Perl, Dylan, JavaScript) e anche ai linguaggi ontologici (Schema RDF e OWL 2 Full).
Nei documenti, le classi sono oggetti e l' approccio viene adottato in modo tale che la struttura principale sia ordinata singolarmente. Nella forma principale, la struttura può essere espressa come (O, ϵ , ≤, .ec) dove
Una struttura di base del campione secondo il modello di oggetti Ruby è mostrata dal diagramma seguente. I collegamenti verdi mostrano la relazione di ereditarietà nella riduzione transitiva riflessiva, i collegamenti blu mostrano la relazione di appartenenza nella "riduzione della sussunzione" - un collegamento blu da x punti al contenitore minimo di x . La mappa powerclass .ec è formata da legami orizzontali blu. Gli oggetti dall'immagine di questa mappa sono motori (in grigio). In Ruby sono chiamati eigenclasses o anche classi singleton (quest'ultimo termine è piuttosto deprecato). Gli oggetti s , u e v (in rosa) sono terminali, gli oggetti rimanenti sono i discendenti della radice ereditaria 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
Le parti principali del modello a oggetti di tutte le lingue di cui sopra possono essere viste come specializzazioni della struttura, senza o solo alcuni componenti aggiuntivi. Dal punto di vista teorico, il caso più significativo di un componente aggiuntivo è la mappa singleton (indicata con. Ɛϲ ) introdotta da Dylan. Ciò rende Dylan l'unico linguaggio di programmazione (dal sopra menzionato) che non è soggetto alla condizione di monotonicità (≤) ○ (ϵ) ⊆ (ϵ) in cui il simbolo di composizione ○ è interpretato da sinistra a destra.
Un modo per formalizzare la connessione tra il nucleo del modello di oggetto e la teoria degli insiemi è attraverso la famiglia di strutture (O, ≤, r, .ec, .ɛϲ) chiamate strutture dei metaoggetto nei documenti di riferimento poiché x.ec o x.ɛϲ possono essere considerati come metaobject di x . In queste strutture x.ec viene definita per ogni oggetto x e x.ɛς è definito per ogni delimitata ( "piccolo") oggetto x . Le strutture sono soggette ai nove assiomi sottostanti. L'assiomatizzazione usa un'estensione definita che è abbastanza semplice per i primi otto assiomi ( Tdenota l'insieme di oggetti terminali - quelli che non sono discendenti di r , e .ec ∗ è la chiusura transitiva riflessiva di .ec ) ma piuttosto coinvolta per l'ultimo assioma.
Nell'ultimo assioma, ϖ è un limite ordinale fisso e .d è la funzione di rango derivata dall'estensione di definizione. La relazione di appartenenza all'oggetto, ϵ, è ottenuta come (( .ɛϲ ) ∪ ( .ec )) ○ (≤). Secondo l'ultimo assioma, la restrizione del dominio di ϵ all'insieme di oggetti limitati è uguale a ( .ɛϲ ) ○ (≤). Nei documenti di riferimento, questa relazione è chiamata appartenenza delimitata e indicata con ∊. Come caratteristiche significative, questa relazione è fondata. Ciò è in contrasto con ϵ che non è fondato da r ϵ r. Si scopre che la principale corrispondenza tra (la parte centrale della) tecnologia degli oggetti e la teoria degli insiemi può essere espressa come
∊ ↔ ∈
cioè l'appartenenza limitata corrisponde all'insieme stabilito tra insiemi ben fondati. Come caso speciale, l'universo parziale di rango di von Neumann ϖ + 1 è una struttura a metaoggetto per estensione di definizione. In generale, ogni estratto ( ϖ + 1 ) - sovrastruttura (O, ∊ ) equivale in modo definitivo a una struttura completa di metaoggetto. Ogni struttura di metaoggetto può essere incorporata fedelmente in una struttura completa di metaoggetto che a sua volta può essere fedelmente incorporata nell'universo di von Neumann.
Il termine struttura di base viene utilizzato per una generalizzazione delle strutture di metaoggetto. In questa generalizzazione, .ec e .ɛς permessi per essere (arbitrariamente) parziale, eventualmente vuoto. In particolare, sono possibili strutture di base finite, con la struttura minima contenente solo la radice ereditaria r . Ogni struttura di base può essere estesa a una struttura a metaoggetto mediante un completamento in Powerclass seguito da un completamento singleton che a sua volta rende le strutture di base fedelmente incorporabili nell'universo di von Neumann.