Estoy a punto de comenzar un proyecto de simulación / modelado. Ya sé que OOP se utiliza para este tipo de proyectos. Sin embargo, estudiar Haskell me hizo considerar el uso del paradigma FP para modelar un sistema de componentes. Déjame elaborar:
Digamos que tengo un componente de tipo A, caracterizado por un conjunto de datos (un parámetro como temperatura o presión, un PDE y algunas condiciones límite, etc.) y un componente de tipo B, caracterizado por un conjunto diferente de datos (diferentes o el mismo parámetro, diferentes PDE y condiciones de contorno). Supongamos también que las funciones / métodos que se aplicarán en cada componente son los mismos (un método de Galerkin, por ejemplo). El estado mutable del objeto se usaría para parámetros no constantes.
Si tuviera que usar un enfoque OOP, crearía dos objetos que encapsularían los datos de cada tipo, los métodos para resolver el PDE (la herencia se usaría aquí para la reutilización del código) y la solución al PDE.
Por otro lado, si tuviera que usar un enfoque de FP, cada componente se desglosaría en partes de datos y las funciones que actuarían sobre los datos para obtener la solución para el PDE. Los parámetros no constantes se pasarían como funciones de otra cosa (tiempo, por ejemplo) o se expresarían mediante algún tipo de mutabilidad (emulación de mutabilidad, etc.). Este enfoque me parece más simple suponiendo que las operaciones lineales en los datos serían triviales.
Para concluir, ¿la implementación del enfoque FP sería realmente más simple y fácil de administrar (agregar un tipo diferente de componente o un nuevo método para resolver el pde) en comparación con el de OOP?
Vengo de un entorno de C ++ / Fortran, además no soy un programador profesional, así que corrígeme en cualquier cosa que me haya equivocado.
fuente
En mi humilde opinión, para casi todas las tareas de complejidad razonable, la pregunta "es un estilo FP o estilo OOP, la mejor opción" no puede responderse objetivamente. Por lo general, en tal situación, la pregunta no es "FP u OOP", sino cómo combinar las mejores partes de ambos paradigmas para resolver su problema.
El problema que ha esbozado anteriormente parece ser muy matemático, y supongo que necesitará algunas operaciones matriciales. OOP es muy bueno para modelar tipos de datos abstractos, y el cálculo matricial se puede implementar fácilmente como "objetos matriciales" con operaciones en matrices. Implementar esto de una manera en que todas las operaciones matriciales sean parte de una clase matricial le ayuda a mantener las cosas juntas que pertenecen juntas, manteniendo así una buena estructura general.
Por otro lado, las PDE son ecuaciones de funciones, y la solución puede volver a funcionar. Por lo tanto, utilizar un enfoque funcional para ese tipo de "componentes" puede parecer natural aquí. Esas funciones pueden tener parámetros de matriz, que muestran un ejemplo de cómo combinar OOP y FP. Otro ejemplo sería una implementación de clase de matriz, que utiliza herramientas funcionales para asignar una determinada operación a cada elemento de su matriz. Entonces, aquí, tampoco es "OOP versus FP" sino "OOP combinado con FP" lo que le brinda los mejores resultados.
fuente