Pregunta

he estado expuesto principalmente a la programación OO hasta ahora y estoy con ganas de aprender un lenguaje funcional. Mis preguntas son:

  • ¿Cuándo se decide sobre la programación funcional orientada a objetos?
  • ¿Cuáles son las definiciones de los problemas típicos en la programación funcional es una mejor opción?
¿Fue útil?

Solución

  Qué

Cuando se elige sobre la programación funcional orientada a objetos?

Cuando consideran que un tipo diferente de la evolución del software:

  • Los lenguajes orientados a objetos son buenos cuando se tiene un conjunto fijo de operaciones en cosas , y por ejemplo el código evoluciona, se agregan principalmente cosas nuevas. Esto se puede lograr mediante la adición de nuevas clases que implementan los métodos existentes, y las clases existentes se quedan solos.

  • Los lenguajes funcionales son buenos cuando se tiene un conjunto fijo de cosas , y por ejemplo el código evoluciona, se agregan principalmente nueva operaciones en las cosas existentes. Esto se puede lograr mediante la adición de nuevas funciones que calculan con tipos de datos existentes, y las funciones existentes no son solo.

Cuando la evolución va por el camino equivocado, tiene problemas:

  • Adición de una nueva operación para un programa orientado a objetos puede requerir la edición de muchas definiciones de clase para agregar un nuevo método.

  • La adición de un nuevo tipo de cosas a un programa funcional puede requerir la edición de muchas definiciones de función para añadir un nuevo caso.

Este problema se ha conocido desde hace muchos años; en 1998, Phil Wadler denominó el "problema de la expresión" . Aunque algunos investigadores piensan que el problema de la expresión se puede tratar con las características del lenguaje tales como mixins, una solución ampliamente aceptada aún no ha golpeado la corriente principal.

  

¿Cuáles son las definiciones de los problemas típicos en la programación funcional es una mejor opción?

Los lenguajes funcionales tienen éxito en la manipulación de datos simbólicos en forma de árbol. Un ejemplo favorito es compiladores, donde origen y lenguas intermedios cambian rara vez (en su mayoría los mismos cosas ), pero los autores de compiladores siempre están añadiendo nuevas traducciones y mejoras en el código u optimizaciones (nuevas operaciones en las cosas). Compilación y traducción en términos más generales son "aplicaciones asesinas" de los lenguajes funcionales.

Otros consejos

Usted no necesariamente tiene que elegir entre los dos paradigmas. Puede escribir software con una arquitectura OO usando muchos conceptos funcionales. FP y OOP son ortogonales en la naturaleza .

Tomemos, por ejemplo, C #. Se podría decir que es sobre todo programación orientada a objetos, pero hay muchos conceptos y construcciones de PF. Si se tiene en cuenta Linq , las construcciones más importantes que permiten LINQ de existir son funcionales en la naturaleza:. lambda expresiones

Otro ejemplo, F #. Se podría decir que es sobre todo FP, pero hay muchos conceptos de POO y construcciones disponibles. Se pueden definir las clases, las clases abstractas, interfaces, frente a la herencia. Incluso puede utilizar la mutabilidad cuando se hace el código más claro o cuando se aumenta drásticamente el rendimiento.

Muchos lenguajes modernos son multi-paradigma.

Lecturas recomendadas

Como estoy en el mismo barco (fondo programación orientada a objetos, el aprendizaje FP), me gustaría que sugerir algunas lecturas que realmente he apreciado:

Programación Orientada a Objetos ofertas:

  1. La encapsulación, a
    • Control de mutación del estado interno
    • límite de acoplamiento a la representación interna
  2. Subtipificación, lo que permite:
    • sustitución de tipos compatibles (polimorfismo)
    • un medio de intercambio de crudo aplicación entre las clases (herencia de implementación)

Programación Funcional, en Haskell o incluso en Scala, puede permitir la sustitución a través del mecanismo más general de las clases de tipos. estado interno mutable es disuadir o se prohibido. La encapsulación de representación interna también se puede lograr. Ver Haskell vs POO para una buena comparación.

La afirmación de que Norman "Adición de un nuevo tipo de cosas a un programa funcional puede requerir la edición de muchas definiciones de función para añadir un nuevo caso." depende de qué tan bien el tipo clases del código funcional ha empleado. Si Coincidencia de patrones en un determinado tipo abstracto de datos se transmite a través de una base de código, que de hecho se sufre de este problema, pero es tal vez un mal diseño para empezar.

EDITED referencia eliminado para conversiones implícitas cuando se habla de clases de tipo. En Scala, clases de tipo están codificados con parámetros implícitos, no conversiones, aunque conversiones implícitas son otro medio a acheiving sustitución de tipos compatibles.

  1. Si estás en un entorno fuertemente concurrente, a continuación, la programación funcional pura es útil. La falta de concurrencia estado mutable hace casi trivial. Ver Erlang.

  2. En un lenguaje multiparadigma, es posible que desee modelar algunas cosas funcionalmente si la existencia de estado mutable es necesario un detalle de implementación, y por lo tanto FP es un buen modelo para el dominio del problema. Por ejemplo, ver las listas por comprensión en Python o std.range en el lenguaje de programación D . Estos se inspiran en la programación funcional.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top