Dove sono tutti i modelli di progettazione di programmazione funzionale? [chiuso]


75

La letteratura sulla programmazione OO è piena di modelli di progettazione. La maggior parte dei libri sulla programmazione orientata agli oggetti dedica un capitolo o due alla progettazione di modelli come fabbriche e decoratori. Quindi quali sono gli schemi equivalenti nei linguaggi funzionali e perché nessuno ha ancora scritto un libro su di essi? C'è qualcosa di speciale nei linguaggi funzionali che ovvia alla necessità di modelli di progettazione?


6
Ci sono modelli di design decisamente funzionali - prendiamo ad esempio la memoria o le monadi - Mi chiedo anche se qualcuno li abbia raccolti in un posto però ...
FinnNk

2
FinnNk Monad è più una classe di tipo che un modello di progettazione ^ _ ^
alternativa il

Per haskell, Gabriel Gonzalez ha alcuni post sul blog, ad esempio haskellforall.com/2012/08/the-category-design-pattern.html
bennofs


1
La riduzione della mappa è una. Sono deluso che non ci sia un buon elenco di schemi
Sridhar Sarnobat,

Risposte:


48

OO e programmazione funzionale sono due paradigmi di programmazione molto diversi e i modelli di progettazione (DP) sono una parte significativa della progettazione e della programmazione di OO. DP non ha tale ruolo nella programmazione funzionale.

Si potrebbe anche dire che DP non è necessario nella programmazione funzionale - non esiste prurito per cui DP è una cura.


41
Non sono sicuro che sarei d'accordo sul fatto che i modelli di progettazione non si applicano a FP. FP presenta ancora problemi comuni che vengono risolti in modi particolari e comuni. Problemi diversi da quelli risolti in OO, ma comunque problemi. Penso che probabilmente sia solo qualcosa a cui è stata data molta meno attenzione rispetto a OO, dal momento che FP è meno comune nel mondo commerciale al momento.
d11wtq

22
Affermare che il modello di progettazione non esiste nella programmazione funzionale è disinformazione. Il più semplice contro-esempio è la monade. Non è necessario utilizzare la monade nella programmazione funzionale, ma è un modello molto comune seguito dalle persone per facilitare l'applicazione della pura programmazione delle funzioni. Questa è in sostanza la definizione del modello di progettazione.
voidvector

3
I modelli di progettazione si applicano a tutte le attività di progettazione, sia di programmazione che di progettazione della casa. In effetti, i concetti stessi dei linguaggi di pattern provengono dall'architettura: en.wikipedia.org/wiki/A_Pattern_Language .
BobDalgleish,

2
Hmm. Flussi osservabili, convalida ferroviaria e inferno, praticamente ogni monade è un modello di progettazione, giusto?
Chet,

2
@voidvector Le monadi non sono semplicemente un modello di progettazione. In FP, le monadi sono usate come funzioni tra i sistemi di tipi e il concetto stesso deriva dalla teoria delle categorie, una branca della matematica. Sono usati per descrivere un particolare tipo di relazioni tra una struttura algebrica in generale. Sarebbe più preciso affermare che la programmazione funzionale è un dato di progettazione per facilitare l'uso della matematica nella programmazione.
John Cramerus,


13

Il semplice fatto è che molti Pattern OO sarebbero considerati Idiomi in linguaggi funzionali (specialmente i pattern GoF originali). Ad esempio, il modello Iterator (integrato in linguaggi come C # ora) non è necessario in un Lisp o ML con operatori di sequenza.

Molti dei modelli che utilizziamo nei sistemi OO sono lì per aiutarci a rimuovere i "non essenziali" in modo che possiamo concentrarci su oggetti di codifica. In altre parole, i modelli sono soluzioni per le parti non interessanti dell'applicazione. Dovremmo sfruttare i modelli per soddisfare le esigenze comuni che sono state risolte in precedenza (come i modelli in Fowlers Patterns of Enterprise Application Architecture per gestire cose come la trasmissione di database o xUnit Patterns per migliorare i test delle unità) in modo da poterci concentrare sull'aggiunta di valore aziendale per l'applicazione.

Sono sicuro che oltre alle specifiche dei modelli GoF, ci sono modelli di progettazione che saranno applicabili anche alla programmazione funzionale. Il fatto è che OO è il paradigma dominante. Scrivere un libro di schemi che si rivolge agli sviluppatori funzionali ... francamente non otterrà il via libera da un editore. Questo è ciò a cui si riduce. Non c'è abbastanza mercato per i Functional Patterns per avere un numero significativo di libri dedicati all'argomento.


9

Una bella chiacchierata (~ 45 min) su questo argomento di Stuart Sierra:

http://www.infoq.com/presentations/Clojure-Design-Patterns

Non necessariamente vincolante e autorevole, ma ho riconosciuto alcuni dei suoi esempi dalla mia esperienza con FP per l'analisi dei dati.

Esempi scritti in Clojure, ma probabilmente applicabili a qualsiasi linguaggio FP. I nomi che dà agli schemi che copre sono:

  • Stato / Evento
  • conseguenze
  • Accumulatore
  • Ridurre / Combina
  • Espansione ricorsiva
  • conduttura
  • involucro
  • Gettone
  • Osservatore
  • Strategia

6

Se sei veramente interessato all'apprendimento dei modelli di design, non cercare oltre Haskell. Se ti prendi il tempo per imparare la lingua nel modo più difficile in cui ti imbatti e ti senti più a tuo agio con la maggior parte dei modelli di base, sono integrati nella lingua.

Non saltare le monadi. Ci sono un sacco di spiegazioni prolissi là fuori e ci vuole un po 'per far affondare le idee, ma se continui a collegarti, alla fine ti sorgerà e rimarrai stupito da quanti modelli di design possono essere basarsi su questa unica astrazione / interfaccia.

Una volta che grugnisci Haskell, avrai abbastanza dell'arsenale FP a tua disposizione per essere pericoloso. Il punto è, continua fino a quando non lo ottieni. Non ci sono scorciatoie.


-3

Nella misura in cui la metodologia di progettazione per FP è quella di progettare i tuoi tipi per riflettere accuratamente lo spazio del problema e l'implementazione dovrebbe seguire automaticamente, l'equivalente FP di un libro sui modelli di progettazione è qualcosa come le Strutture di dati puramente funzionali di Chris Okasaki .


1
Il libro di Okasaki è l'equivalente della parte della struttura dei dati di numerosi libri sulla struttura dei dati e degli algoritmi che di solito considerano solo la struttura dei dati mutabile.
AProgrammer

1
Non penso che equiparare le strutture di dati ai modelli di progettazione sia adatto. Non è come se i programmatori OO si limitassero ad agitare le braccia finché non compaiono le definizioni di classe appropriate.
davidk01,

Sì, il libro di Okasaki è a un livello inferiore rispetto ai modelli di progettazione.
Finlandia,
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.