[functional-programming] Esiste una metodologia di ingegneria del software per la programmazione funzionale?



5 Answers

Per Clojure, consiglio di tornare alla buona vecchia modellazione relazionale. Out of the Tarpit è una lettura di ispirazione.

Question

L'ingegneria del software come viene insegnata oggi è interamente incentrata sulla programmazione orientata agli oggetti e sulla visione "naturale" orientata agli oggetti del mondo. Esiste una metodologia dettagliata che descrive come trasformare un modello di dominio in un modello di classe con diversi passaggi e un sacco di artefatti (UML) come diagrammi del caso d'uso o diagrammi di classe. Molti programmatori hanno interiorizzato questo approccio e hanno una buona idea su come progettare un'applicazione orientata agli oggetti da zero.

Il nuovo hype è la programmazione funzionale, che viene insegnata in molti libri e tutorial. Ma per quanto riguarda l'ingegneria del software funzionale? Durante la lettura di Lisp e Clojure, sono arrivato a due dichiarazioni interessanti:

  1. I programmi funzionali sono spesso sviluppati dal basso verso l'alto anziché dall'alto verso il basso ('On Lisp', Paul Graham)

  2. I programmatori funzionali utilizzano mappe in cui gli OO-programmatori utilizzano oggetti / classi ("Clojure for Java Programmers", talk di Rich Hickley).

Quindi qual è la metodologia per un progetto sistematico (basato su modelli?) Di un'applicazione funzionale, ad esempio in Lisp o Clojure? Quali sono i passaggi comuni, quali risorse utilizzare, come li mappo dallo spazio del problema allo spazio della soluzione?







Esiste lo stile "calcolo del programma" / "design per calcolo" associato al Prof. Richard Bird e all'algebra del gruppo di programmazione dell'Università di Oxford (Regno Unito), non credo che sia troppo inverosimile considerare questa metodologia.

Personalmente, mentre mi piace il lavoro prodotto dal gruppo AoP, non ho la disciplina per praticare il design in questo modo. Comunque questa è la mia mancanza, e non uno dei calcoli del programma.




La programmazione OO accoppia strettamente i dati con il comportamento. La programmazione funzionale separa i due. Quindi non hai diagrammi di classe, ma hai strutture dati e in particolare hai tipi di dati algebrici. Questi tipi possono essere scritti in modo molto simile al tuo dominio, inclusa l'eliminazione di valori impossibili per costruzione.

Quindi non ci sono libri e libri su di esso, ma c'è un approccio ben definito, come dice il proverbio, che rende i valori impossibili non rappresentabili.

In tal modo, è possibile effettuare una serie di scelte sulla rappresentazione di determinati tipi di dati come funzioni e, al contrario, rappresentare alcune funzioni come unione di tipi di dati, in modo da ottenere, ad esempio, serializzazione, specifiche più ristrette, ottimizzazione, ecc. .

Quindi, dato che, scrivi delle funzioni sui tuoi annunci in modo tale da stabilire una sorta di algebra - cioè ci sono leggi fisse che valgono per queste funzioni. Alcuni sono forse idempotenti, lo stesso dopo più applicazioni. Alcuni sono associativi. Alcuni sono transitivi, ecc.

Ora hai un dominio sul quale hai funzioni che compongono secondo leggi ben educate. Un semplice DSL incorporato!

Oh, e date delle proprietà, potete ovviamente scrivere test automatici randomizzati su di loro (ala QuickCheck) .. e questo è solo l'inizio.




Vedi la mia risposta ad un altro post:

In che modo Clojure proclama la separazione delle preoccupazioni?

Sono d'accordo sul fatto che sia necessario scrivere altro sull'argomento su come strutturare applicazioni di grandi dimensioni che utilizzano un approccio FP (più altro deve essere fatto per documentare le interfacce utente basate su FP)




Ho recentemente trovato questo libro: modellazione di dominio funzionale e reattivo

Penso che sia perfettamente in linea con la tua domanda.

Dalla descrizione del libro:

La modellazione del dominio funzionale e reattiva ti insegna come pensare al modello di dominio in termini di funzioni pure e come comporli per costruire astrazioni più grandi. Inizierai con le basi della programmazione funzionale e passerai gradualmente ai concetti e ai modelli avanzati che devi conoscere per implementare modelli di dominio complessi. Il libro dimostra come modelli avanzati di FP come i tipi di dati algebrici, la progettazione basata sulla classe di tipografia e l'isolamento degli effetti collaterali possono rendere il tuo modello composto per la leggibilità e la verificabilità.




Related