C'è una teoria / astrazione dietro OOP?


13

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?


5
Carichi e carichi. Hai provato Google? Ad esempio, esiste una serie di seminari chiamata FOOL dedicata alle Fondazioni di linguaggi orientati agli oggetti in esecuzione dal 1993. Questo graffia solo la superficie.
Dave Clarke,

@DaveClarke. Non sono del tutto d'accordo. Il calcolo lambda è una base per la programmazione funzionale in un senso molto preciso. Ad esempio, il rapporto Haskell afferma che l'intero linguaggio Haskell può essere considerato semplicemente zucchero sintattico per un linguaggio di base equivalente al calcolo lambda tipizzato. Non conosco alcun linguaggio orientato agli oggetti che asserisca una domanda simile rispetto a un calcolo. Quindi, hai ragione che ci sono "carichi". Ma niente è giusto.
Uday Reddy,

@UdayReddy: Ciò è forse dovuto alla ricchezza del linguaggio orientato agli oggetti.
Dave Clarke,

1
@DaveClarke La ricchezza di un argomento può significare che (1) è una buona parola d'ordine, (2) non capiamo davvero abbastanza l'argomento per la costruzione di un consenso, (3) stiamo mescolando diverse questioni che sono praticamente ortogonali . Sebbene non abbia seguito da vicino la (recente) letteratura sulla programmazione OO, ho sempre avuto la sensazione che si trattasse di problemi di mixx senza essere molto esplicito al riguardo (ovviamente questo vale più per le lingue che per il lavoro teorico). Questi problemi includono la digitazione, l'astrazione, la statualità, il parallelismo, il riutilizzo del codice. È improbabile che una (una) teoria spieghi tutte le varianti.
babou,

Risposte:


15

Esistono quattro approcci principali, anche se questi graffiano solo la superficie di ciò che è disponibile:

  • tramite lambda e record: l'idea è di codificare oggetti, classi e metodi in termini di costrutti più tradizionali. Il lavoro di Benjamin Pierce della metà degli anni '90 è rappresentativo di questo approccio.
  • I calcoli degli oggetti di Abadi e Cardelli (vedi il libro A Teoria degli oggetti di Abadi e Cardelli : la loro principale astrazione è una registrazione di metodi, e l'approccio è più vicino alla realizzazione basata su prototipi di programmazione orientata agli oggetti, sebbene le classi e l'eredità possano essere codificate in termini degli elementi più primitivi.
  • Calcolo multimetodo di Castagna (vedi il libro di Castagna Programmazione orientata agli oggetti Una fondazione unificata ): il suo approccio prende multimetodi sono l'astrazione chiave.
  • Calcoli basati sulle classi (come nel libro di Kim Bruce Foundations of Object-oriented Languages: Types and Semantics o Featherweight Java ): questi approcci mirano a catturare l'essenza della programmazione basata su classi e si concentrano su classi ed eredità.

12

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

  • O è l'insieme di oggetti ,
  • ϵ è la relazione di appartenenza (oggetto) , un perfezionamento dell'istanza di relazione,
  • ≤ è la relazione di ereditarietà e
  • .ec è la mappa powerclass che è una distinzione, possibilmente vuota, di ϵ.

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.

  1. L'ereditarietà, , è un ordine parziale.
  2. La mappa powerclass, .ec , è un incorporamento dell'ordine di (O, ≤) in se stesso.
  3. Gli oggetti di T.ec sono minimi.
  4. Ogni powerclass è un discendente di r .
  5. Il set r.ec non ha limite inferiore.
  6. La mappa singleton, .ɛϲ , è iniettiva.
  7. Gli oggetti da O.ɛϲ.ec sono minimi.
  8. Per ogni oggetto x , y tale che x.ɛϲ è definito, x.ɛϲ ≤ y.ec ↔ x ≤ y .
  9. Per ogni oggetto x , x.ɛϲ è definito ↔ xd <ϖ .

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.


@Raphael Molto meglio - grazie, paon!
David Richerby,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.