functional-programming programacion ejemplos - ¿Existe una metodología de ingeniería de software para la programación funcional?





6 Answers

Para Clojure, recomiendo volver al buen modelo relacional antiguo. Fuera del Tarpit es una lectura inspiradora.

javascript ventajas desventajas

La ingeniería de software, tal como se enseña hoy, está totalmente centrada en la programación orientada a objetos y la visión "natural" orientada a objetos del mundo. Existe una metodología detallada que describe cómo transformar un modelo de dominio en un modelo de clase con varios pasos y una gran cantidad de artefactos (UML) como diagramas de casos de uso o diagramas de clases. Muchos programadores han internalizado este enfoque y tienen una buena idea sobre cómo diseñar una aplicación orientada a objetos desde cero.

El nuevo bombo es la programación funcional, que se enseña en muchos libros y tutoriales. Pero ¿qué pasa con la ingeniería de software funcional? Mientras leía acerca de Lisp y Clojure, encontré dos declaraciones interesantes:

  1. Los programas funcionales a menudo se desarrollan de abajo hacia arriba en lugar de de arriba abajo ('On Lisp', Paul Graham)

  2. Los programadores funcionales usan mapas donde los programadores de OO usan objetos / clases ('Clojure for Java Programmers', charla de Rich Hickley).

Entonces, ¿cuál es la metodología para un diseño sistemático (basado en un modelo?) De una aplicación funcional, es decir, en Lisp o Clojure? ¿Cuáles son los pasos comunes, qué artefactos utilizo, cómo los asigno del espacio problemático al espacio de la solución?




La programación OO acopla estrechamente los datos con el comportamiento. La programación funcional separa los dos. Por lo tanto, no tiene diagramas de clase, pero sí tiene estructuras de datos y, en particular, tiene tipos de datos algebraicos. Esos tipos se pueden escribir para que coincidan muy estrechamente con su dominio, incluida la eliminación de valores imposibles por construcción.

Así que no hay libros y libros sobre él, pero hay un enfoque bien establecido para, como dice el refrán, hacer que los valores imposibles de representar.

Al hacerlo, puede hacer un rango de opciones sobre la representación de ciertos tipos de datos como funciones y, a la inversa, representar ciertas funciones como una unión de tipos de datos para que pueda obtener, por ejemplo, serialización, especificaciones más estrictas, optimización, etc. .

Luego, dado eso, escribe funciones sobre sus anuncios de manera que establezca algún tipo de álgebra , es decir, hay leyes fijas que se aplican a estas funciones. Algunos son quizás idempotentes, lo mismo después de múltiples aplicaciones. Algunos son asociativos. Algunos son transitivos, etc.

Ahora tiene un dominio sobre el que tiene funciones que se componen de acuerdo con leyes de buen comportamiento. Un simple DSL incrustado!

Ah, y dadas las propiedades, puede, por supuesto, escribir pruebas aleatorias automatizadas de ellos (ala QuickCheck) ... y eso es solo el comienzo.




Ver mi respuesta a otro post:

¿Cómo se acerca Clojure a la separación de preocupaciones?

Estoy de acuerdo en que se debe escribir más sobre el tema sobre cómo estructurar aplicaciones grandes que utilizan un enfoque de PF (y se necesita hacer más para documentar las IU basadas en PF)







Recientemente he encontrado este libro: Modelado de dominios funcional y reactivo

Creo que está perfectamente en línea con su pregunta.

De la descripción del libro:

El modelado de dominios funcional y reactivo le enseña cómo pensar el modelo de dominio en términos de funciones puras y cómo componerlas para construir abstracciones más grandes. Comenzará con los conceptos básicos de la programación funcional y progresará gradualmente hacia los conceptos y patrones avanzados que necesita conocer para implementar modelos de dominio complejos. El libro muestra cómo los patrones avanzados de PF, como los tipos de datos algebraicos, el diseño basado en clase de tipos y el aislamiento de los efectos secundarios, pueden hacer que su modelo se componga para facilitar la lectura y la verificación.




Existe el estilo de "cálculo de programa" / "diseño por cálculo" asociado con el Prof. Richard Bird y el grupo de Álgebra de Programación en la Universidad de Oxford (Reino Unido), no creo que sea demasiado exagerado considerar esto como una metodología.

Personalmente, aunque me gusta el trabajo producido por el grupo AoP, no tengo la disciplina para practicar el diseño de esta manera. Sin embargo, ese es mi defecto, y no uno de cálculo del programa.






Related