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?
books
design-patterns
functional-programming
davidk01
fuente
fuente
Respuestas:
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.
Se podría argumentar que los patrones de diseño son un signo de características faltantes en un lenguaje de programación.
Peter Norvig descubrió que 16 de los 23 patrones en el libro Design Patterns son " invisibles o simples r" en Lisp o Dylan.
"Muchos patrones implican orientación a objetos o, en general, un estado mutable y, por lo tanto, pueden no ser tan aplicables en lenguajes de programación funcionales, en los que los datos son inmutables o tratados como tales". - http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
fuente
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).
fuente
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.
fuente
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:
fuente
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.
fuente
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 .
fuente