Domanda

C'è una specie di bellezza in relazioni superanti. Considera i seguenti esempi:

  1. Gli atomi sono composti da particelle subatomiche, le molecole sono composte da atomi, le cellule sono composte da molecole, gli organi sono composti da cellule, le persone sono composte da organi, le società sono composte da persone.
  2. Le complesse strategie del Game of Go sono costruiti sulla necessità di fare strutture con "due occhi" in modo da sopravvivere - tuttavia la cosa "due occhi" non è mai dichiarata nelle regole, ma è essa stessa una proprietà emergente delle regole molto semplici di Go.
  3. La completezza di Turing di Conway's_game_of_life può essere dimostrato in termini di alianti, pistole e astronavi, che sono in giro in base al concetto di onde e spento e Set di regole molto semplici.

In tutti i casi, un insieme minimo di oggetti e un insieme minimo di regole alla fine portano a una struttura molto complessa.

La mia prima domanda: È possibile delineare un insieme piccolo e minimalista di "oggetti" e "regole" di programmazione che possono essere utilizzati per costruire un linguaggio OOP?

Ora il intelligente L'informatica probabilmente indicherà la completezza di Turing di Regola 110 E dì che questo è tutto ciò di cui hai bisogno! Ma non è proprio quello che sto cercando. Piuttosto, a rischio di porre domande mal definite, quali sono i concetti più semplici e comprensibili umani che possono essere integrati in un linguaggio di programmazione orientato agli oggetti?

Per un esempio cattivo e incompleto che suggerisce ciò che voglio, definisci tre oggetti concettuali: a riferimento, un funzione, e un Titolare delle informazioni. Allora (livello 2?) Definisci a struttura Essere un titolare di informazioni che detiene altre informazioni tramite riferimenti ad altre cartelle di informazione. Un rudimentale classe (Livello 3?) Aumentare le strutture con un riferimento alle funzioni, ma dovrebbe essere costruita una struttura aggiuntiva per gestire i concetti di funzioni private vs. pubbliche. Alla fine dovremmo arrivare a un linguaggio OOP completo che era stato costruito esclusivamente su concetti fondamentali e da nessuna parte eravamo imbroglione mediante ottimizzazioni hardcoding o sale sintattico con codice macchina. E idealmente, il risultato finale sarebbe comunque un codice attraente e leggibile.

La mia seconda domanda: Ci sono lingue OOP là fuori che già si avvicinano a questo?

È stato utile?

Soluzione

Prototipi

Il Io Il riferimento del linguaggio dà un buon suggerimento: l'apprendimento più semplice all'OOP sembra essere Programmazione basata sul prototipo. Tutto ciò di cui hai bisogno è fondamentalmente array associativi e funzioni di prima classe.

Poiché è possibile implementare molte strutture di dati tra cui il dizionario in termini di funzioni, presto ci zucchero di sintassi e Calcolo Lambda, che copre un intero modello di calcolo completa.

Altri suggerimenti

io è probabilmente la lingua più vicina là fuori a quello che stai cercando.

Domanda interessante, ma non sono del tutto sicuro che sia ragionevole.

Considera che 1 e 0 sono i nostri atomi di informatica. Sono strettamente indivisibili. E diverse combinazioni di loro danno origine a programmi con tutti i tipi di proprietà sorprendenti. Ma non è appropriato scrivere in 1 e 0, poiché il livello di astrazione è troppo basso.

Penso che lo stesso problema sarebbe successo alla tua lingua. Se fosse abbastanza flessibile da consentire la costruzione di qualcosa, sarebbe inutilizzabile e, se non lo era, non soddisferà le tue esigenze.

Smalltalk è costruito su un insieme molto limitato di primitivi, ma i ideom oo sono atomici lì. In teoria, puoi costruire un linguaggio complesso arbitrario sopra una base semplice come Logica SK o calcolo Lambda. Le funzionalità OO non sono diverse, possono essere ridotte a un set più primitivo. Qualsiasi sistema OO in cima a una macro LISP primitive può essere un buon esempio.

Aggiornare: E dai un'occhiata Sistemi di riscrittura del termine In generale, è una tecnica potente per definire la semantica complessa in cima a cose più semplici.

Consiglio anche di leggere un libro http://www.cambridge.org/gb/knowledge/isbn/item1132720/?site_locale=en_gb

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top