functional-programming - programación - programacion funcional vs orientada a objetos
Sólido para la programación funcional. (2)
Proveniente de un lenguaje OOP, estoy familiarizado con los principios de SOLID del diseño orientado a objetos. Parece que algunos de estos encajarían en un modelo de programación funcional, mientras que otras partes no tienen sentido en un mundo que carece de estado. ¿Existe un conjunto similar de principios para refactorizar el código funcional?
Por lo que sé (no soy un experto), los principios de SOLID no dicen nada sobre el estado. Deben ser aplicables también en un lenguaje de programación funcional. Son más consejos sobre cómo lograr la modularidad.
Algunos de ellos son bastante obvios o al menos conocidos. La responsabilidad única es el principio de UNIX "haz una cosa y hazlo bien", que es aún más popular en los lenguajes funcionales donde la "composición" se usa ampliamente, de manera similar. El Principio de Segregación de Interfaz también es muy natural (tenga sus interfaces modulares y mantenga separados los conceptos ortogonales). Finalmente, la inversión de dependencia es solo un nombre para "abstracción" y está omnipresente en la programación funcional.
Los principios "OL", Open / Closed y LSP, están más orientados a lenguajes basados en la herencia como un concepto central de ingeniería de software. Los valores / módulos de lenguajes funcionales no tienen recursión abierta por defecto, por lo que la "herencia de implementación" solo se usa en casos muy específicos. Se prefiere la composición. No estoy seguro de cómo debe interpretar el principio Abrir / Cerrado en esa configuración. Puede considerar que se trata de encapsulación, que los programas funcionales también usan mucho, usando tipos abstractos y otros.
Finalmente, el Principio de Sustitución de Liskov puede parecer sobre la herencia. Los lenguajes funcionales no siempre utilizan subtipos, pero cuando lo hacen, se supone que los "tipos derivados" deben preservar la especificación de "tipos base". Los programadores funcionales, por supuesto, tienen cuidado de especificar y respetar la interfaz y las propiedades de sus programas, módulos, etc., y pueden usar un razonamiento algebraico (esto es equivalente a esto, así que puedo sustituirlo) basado en esas especificaciones al programar, refactorizar, Sin embargo, una vez que se deshace de la idea de "herencia por defecto", tiene menos problemas de violaciones de interfaz, por lo que el LSP no se enfatiza como una salvaguarda vital como lo es en OOP.
Este video presenta los principios de SOLID y cómo aplicarlos en Clojure.
Muestra cómo estos principios se mantienen tanto en el mundo funcional como en la programación orientada a objetos, ya que todavía tenemos que resolver los mismos problemas subyacentes. Y, en general, me hizo pensar que la Programación Funcional es más adecuada para el diseño SOLID.