¿Dónde están todos los patrones de diseño de programación funcional? [cerrado]

75

La literatura de programación OO está llena de patrones de diseño. La mayoría de los libros sobre programación orientada a objetos dedican uno o dos capítulos al diseño de patrones como fábricas y decoradores. Entonces, ¿cuáles son los patrones equivalentes en lenguajes funcionales y por qué nadie ha escrito aún un libro sobre ellos? ¿Hay algo especial sobre los lenguajes funcionales que obvia la necesidad de patrones de diseño?

davidk01
fuente
66
Definitivamente hay patrones de diseño funcionales, por ejemplo, la memorización o las mónadas. También me pregunto si alguien los ha reunido en un solo lugar ...
FinnNk
2
FinnNk Monad es más una clase de tipo que un patrón de diseño ^ _ ^
alternativa el
Para Haskell, Gabriel González tiene algunas publicaciones en el blog, por ejemplo haskellforall.com/2012/08/the-category-design-pattern.html
bennofs
1
Mapa reducir es uno. Estoy decepcionado de que no haya una buena lista de patrones
Sridhar Sarnobat

Respuestas:

48

La programación funcional y OO son dos paradigmas de programación muy diferentes, y los patrones de diseño (DP) son una parte importante del diseño y la programación OO. DP no tiene ese papel en la programación funcional.

Incluso se podría decir que no se necesitan DP en la programación funcional: no hay picazón para la cual DP sea la cura.

Maglob
fuente
41
No estoy seguro de estar de acuerdo en que los patrones de diseño no se aplican a FP. FP todavía presenta problemas comunes que se resuelven de manera particular y común. Problemas diferentes a los resueltos en OO, pero aun así problemas. Creo que probablemente es algo a lo que se le ha prestado mucha menos atención que en OO, ya que FP es menos común en el mundo comercial en este momento.
d11wtq
22
Afirmar que el patrón de diseño no existe en la programación funcional es información errónea. El contraejemplo más fácil es la mónada. No necesita usar mónada en la programación funcional, pero es un patrón muy común que las personas siguen para facilitar la aplicación de la programación de funciones puras. Esa es, en esencia, la definición del patrón de diseño.
voidvector
3
Los patrones de diseño se aplican a todas las actividades de diseño, ya sea programación o diseño de la casa. De hecho, los conceptos mismos de los lenguajes de patrones provienen de la arquitectura: en.wikipedia.org/wiki/A_Pattern_Language .
BobDalgleish
2
Hmm Flujos observables, validación ferroviaria e infierno, casi cada mónada es un patrón de diseño, ¿verdad?
Chet
2
@voidvector Las mónadas no son simplemente un patrón de diseño. En FP, las mónadas se usan como functores entre sistemas de tipos, y el concepto en sí proviene de la teoría de categorías, una rama de las matemáticas. Se utilizan para describir un tipo particular de relaciones entre estructuras algebraicas en general. Sería más exacto decir que la programación funcional es un diseño básico para facilitar el uso de las matemáticas en la programación.
John Cramerus
67

Jeremy Gibbons está escribiendo el libro. Hasta que esté terminado, puede leer su blog, Patrones en programación funcional . Recomienda leer sus publicaciones de la más antigua a la más reciente.

Explore sus publicaciones también. Cubre los patrones Gang of Four en Patrones de diseño como programas genéricos de tipo de datos de orden superior y describe los patrones de programación con ecuaciones recursivas en la programación de origami (pliegues y despliegues).

Corbin March
fuente
13

El simple hecho es que muchos patrones OO se considerarían modismos en lenguajes funcionales (especialmente los patrones GoF originales). Por ejemplo, el patrón Iterator (integrado en lenguajes como C # ahora) simplemente no es necesario en un Lisp o ML que tiene operadores de secuencia.

Muchos de los patrones que utilizamos en los sistemas OO están ahí para ayudarnos a eliminar los "elementos no esenciales" para que podamos centrarnos en la codificación de objetos. En otras palabras, los patrones son soluciones a las partes no interesantes de la aplicación. Deberíamos aprovechar los patrones para abordar las necesidades comunes que se han resuelto antes (como los patrones en Fowlers Patterns of Enterprise Application Architecture para tratar cosas como la transmisión de bases de datos, o xUnit Patterns para aumentar las pruebas unitarias) para que podamos centrarnos en agregar valor comercial para la aplicación

Estoy seguro de que más allá de los detalles de los patrones GoF, hay patrones de diseño que también serán aplicables a la programación funcional. El caso es que OO es el paradigma dominante. Escribir un libro de patrones que apunte a desarrolladores funcionales ... bueno, francamente no recibirá la aprobación de un editor. A eso se reduce todo. No hay suficiente mercado para los Patrones Funcionales para tener un número significativo de libros dedicados al tema.

Michael Brown
fuente
9

Una buena charla (~ 45 min) sobre este tema por Stuart Sierra:

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

No necesariamente vinculante y autoritario, pero reconocí algunos de sus ejemplos de mi propia experiencia usando FP para el análisis de datos.

Ejemplos escritos en Clojure, pero probablemente aplicables a cualquier lenguaje FP. Los nombres que le da a los patrones que cubre son:

  • Estado / evento
  • Consecuencias
  • Acumulador
  • Reducir / combinar
  • Expansión recursiva
  • Tubería
  • Envoltura
  • Simbólico
  • Observador
  • Estrategia
Aaron Johnson
fuente
6

Si está realmente interesado en aprender los patrones de diseño, no busque más, Haskell Si se toma el tiempo de aprender el idioma de la manera difícil con la que se encontrará y se sentirá cómodo con la mayoría de los patrones fundamentales, están incorporados al idioma.

No te saltes las mónadas. Hay un montón de explicaciones de largo aliento por ahí y se necesita algo de tiempo para que las ideas se asimilen, pero si sigues desconectando, eventualmente te sorprenderá y te sorprenderá cuántos patrones de diseño pueden ser construir sobre esta abstracción / interfaz.

Una vez que hayas asimilado a Haskell, tendrás suficiente del arsenal de FP a tu disposición para ser peligroso. El punto es, sigue hasta que lo entiendas. No hay atajos.

Mario T. Lanza
fuente
-3

En la medida en que la metodología de diseño para FP es diseñar sus tipos para reflejar con precisión el espacio del problema y la implementación debe seguir automáticamente, el equivalente de FP de un libro sobre patrones de diseño es algo así como las Estructuras de datos puramente funcionales de Chris Okasaki .

geekosaur
fuente
1
El libro de Okasaki es el equivalente de la parte de estructura de datos de numerosos libros de algoritmos y estructura de datos que generalmente consideran solo una estructura de datos mutable.
Programador
1
No creo que igualar las estructuras de datos para diseñar patrones se ajuste a la ley. No es que los programadores de OO simplemente agiten sus brazos hasta que aparezcan las definiciones de clase adecuadas.
davidk01
Sí, el libro de Okasaki está en un nivel más bajo que los patrones de diseño.
FinnNk