Come funziona “Lingua Oriented Programming” confrontare OOP / funzionale nel mondo reale

StackOverflow https://stackoverflow.com/questions/1703869

  •  19-09-2019
  •  | 
  •  

Domanda

Recentemente ho cominciato a leggere un po 'di F # legati letteratura, parlando di "Real World programmazione funzionale" e "Expert F #" e. g .. All'inizio è facile, perché ho una certa esperienza in Haskell, e so C #. Ma quando si tratta di " Lingua Oriented Programming " Io proprio non capisco. - Ho letto alcune spiegazioni ed è come la lettura di un documento accademico che ottiene più astratto e strano con ogni frase

.

Qualcuno ha un esempio facile per questo tipo di cose e come si confronta con paradigmi esistenti? Non è solo la fantasia accademica, non è vero? ;)

Grazie, Wishi

È stato utile?

Soluzione

F # ha alcuni meccanismi per fare programmazione in uno stile che si potrebbe chiamare "linguaggio-oriented".

In primo luogo, le sottigliezze di sintassi (chiamate di funzione non hanno bisogno di parentesi, in grado di definire propri operatori infissi, ...) fare in modo che molte librerie definite dall'utente hanno l'aspetto di DSL embedded.

In secondo luogo, il meccanismo F # "citazioni" può consentire di citare il codice e quindi eseguirlo con un motore alternativo semantica / valutazione.

In terzo luogo, F # "espressioni di calcolo" (flussi di lavoro aka, monadi, ...) forniscono anche un modo per fornire un tipo di semantica alternativi per alcuni blocchi di codice.

Tutte queste rientrano un pò nella categoria EDSL.

Altri suggerimenti

Lingua programma orientato (LOP) può essere utilizzato per descrivere uno dei seguenti.

Creazione di un linguaggio esterno (DSL)

Questa è forse l'uso più comune della LOP, ed è dove si dispone di un dominio specifico - come i pacchetti di spedizione UPS tramite tipi transito attraverso percorsi, ecc Piuttosto che cercare di codificare tutti questi soggetti specifici del dominio all'interno del programma codice, è piuttosto di creare un linguaggio di programmazione separata solo per quel dominio. Così si può codificare il problema in un linguaggio esterno separato.

Creazione di un linguaggio interno

A volte si desidera che il codice di programma a guardare meno come 'codice' e la mappa più da vicino per il dominio del problema. Cioè, hanno il codice di 'leggere in modo più naturale'. Un'interfaccia fluente è un esempio di questo: Ottima interfaccia . Inoltre, F # ha modelli attivi che supportano questa abbastanza bene.

un blog postare su LOP un po 'indietro che fornisce alcuni esempi di codice.

In Object Oriented Programming, si tenta di modellare un problema utilizzando oggetti. È quindi possibile collegare gli oggetti insieme per eseguire funzioni ... e alla fine risolvere il problema originale.

Nel linguaggio di programmazione orientato, piuttosto che utilizzare un oggetto esistente Oriented o funzionale linguaggio di programmazione, la progettazione di un nuovo linguaggio specifico dominio che è più adatto per risolvere in modo efficace il problema.

Il Oriented Programming lingua termine può essere sovraccarico in tale potrebbe avere significati diversi per persone diverse.

Ma in termini di come l'ho usato, significa che si crea una connessione DSL ( http: //en.wikipedia.org/wiki/Domain_Specific_Language ) prima di iniziare a risolvere il problema.

Una volta che il DSL è creato si sarebbe poi scrivere il programma in termini di DSL.

L'idea è che la vostra DSL è più adatto a esprimere il problema di un linguaggio di uso generale sarebbe stato.

Alcuni esempi sarebbe la sintassi del file marca o Ruby on Rails classe ActiveRecord.

non ho direttamente linguaggio di programmazione orientato utilizzato in situazioni del mondo reale (la creazione di un linguaggio vero e proprio), ma è utile pensare e aiuta gli oggetti di dominio-driven design migliore.

In un certo senso, qualsiasi codice di sviluppo del mondo reale in Lisp e Scheme può essere considerato "lingua-oriented", dal momento che si sta sviluppando il "linguaggio" della vostra applicazione e il suo albero astratto come si lungo. cetriolo è un altro esempio del mondo reale I 'Ho sentito parlare.

Si prega di notare che ci sono alcuni problemi di questo approccio (e qualsiasi approccio dominio-driven) nello sviluppo del mondo reale. Uno dei principali problemi che ho affrontato prima è mancata corrispondenza tra la logica che ha senso nel dominio e la logica che ha senso nel software. Dominio (attività) la logica può essere estremamente contorta e senza senso -. E provoca modelli di dominio per abbattere

Un facile esempio di un linguaggio specifico del dominio, citato qui , è SQL. Inoltre: UNIX shell script.

Naturalmente, se si sta facendo un sacco di ops di base e hanno un sacco di sovrapposizione con il linguaggio di base, probabilmente è overengineering.

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