¿FP y OO ortogonales?

13

He escuchado esta y otra vez y estoy tratando de entender y validar la idea de que FP y OO son ortogonales.

En primer lugar, ¿qué significa que 2 conceptos sean ortogonales?

FP fomenta la inmutabilidad y la pureza tanto como sea posible. y OO parece algo creado para el estado y la mutación (¿una versión ligeramente organizada de la programación imperativa?). Y me doy cuenta de que los objetos pueden ser inmutables. Pero OO parece implicar estado / cambio para mí.

Parecen opuestos. ¿Eso significa que son ortogonales?

Un lenguaje como Scala facilita la ejecución de OO y FP, ¿esto afecta la ortogonalidad de los 2 métodos?

    
pregunta letronje 16.10.2010 - 18:01

4 respuestas

22

El término "ortogonal" proviene de las matemáticas, donde tiene un sinónimo: "perpendicular". En este contexto, se podría entender que "las dos cosas no tienen nada que ver entre sí".

Cuando las personas comparan FP y OO, a menudo confunden dos ejes separados.

Por un lado, tiene programación funcional versus programación imperativa. Jonas ofrece una buena comparación de los dos. La versión de una oración dice que "flujo de datos versus flujo de control".

El otro eje es la abstracción de datos. Los lenguajes como Haskell usan tipos de datos abstractos para, bueno, datos abstractos. Smalltalk utiliza objetos, que fusionan los datos y las operaciones de esos datos en una sola unidad. William Cook explica mejor de lo que pude en su artículo En Understanding Data Abstraction, Revisited .

Es perfectamente comprensible que la mayoría de las personas terminen pensando que FP y OO son opuestos: la mayoría de los lenguajes OO son imperativos, por lo que si comparas, por ejemplo, Haskell y Java, tienes flujo de datos + ADT versus control flow + object. ¡Pero hay otras posibilidades! Matthias Felleisen explica cómo casarse felizmente con FP y OO en su charla Objetos funcionales .

    
respondido por el Frank Shearar 16.10.2010 - 21:37
9
  

En primer lugar, ¿qué significa que 2 conceptos sean ortogonales?

Significa que los dos conceptos no tienen ideas contrastantes o no son incompatibles entre sí.

  

FP fomenta la inmutabilidad y la pureza tanto como sea posible. y OO parece algo creado para el estado y la mutación (¿una versión ligeramente organizada de la programación imperativa?). Y me doy cuenta de que los objetos pueden ser inmutables. Pero OO parece implicar estado / cambio para mí.

     

Parecen opuestos. ¿Cómo afecta su ortogonalidad?

     

Un lenguaje como Scala facilita la ejecución de OO y FP, ¿esto afecta la ortogonalidad de los 2 métodos?

OO es sobre encapsulación, composición de objetos, abstracción de datos, polimorfismo mediante subtipos y mutación controlada cuando sea necesario (la OI también fomenta la inmutabilidad). FP se refiere a la composición de funciones, la abstracción de control y el polimorfismo restringido (también conocido como polimorfismo paramétrico). Así las dos ideas no son contradictorias. Ambos le proporcionan diferentes tipos de poderes y mecanismos de abstracción, que es posible tener en un solo idioma. De hecho, esta es la tesis sobre la cual se construyó Scala !

En su Experimento Scala en Google, Martin Odersky explica muy bien cómo cree que ambos conceptos - OO y FP - son ortogonales entre sí y cómo Scala unifica los dos paradigmas de manera elegante y perfecta en un nuevo paradigma conocido popularmente en la comunidad de Scala como paradigma objeto-funcional. Debes ver hablar por ti. :-)

Otros ejemplos de lenguajes funcionales de objeto: OCaml , F # , Nemerle .

    
respondido por el missingfaktor 16.10.2010 - 18:36
7

Ortogonal aproximadamente significa "independiente".

Entonces, si FP y OO son ortogonales, eso significa que puedes usar la inmutabilidad tanto si usas objetos como si no, y puedes usar objetos si son inmutables o no.

    
respondido por el Note to self - think of a name 16.10.2010 - 18:05
0

* He escuchado esto una y otra vez y estoy tratando de entender y validar la idea de que FP y OO son ortogonales. *

En primer lugar, ¿qué significa que 2 conceptos sean ortogonales?

Cita de Wikipedia: "La ortogonalidad garantiza que la modificación del efecto técnico producido por un componente de un sistema no crea ni propaga efectos secundarios a otros componentes del sistema".

Simplemente, solo significa que el cambio a un sistema no lo hace, y no puede afectar un cambio en el otro sistema.

Por ejemplo, un automóvil tiene componentes y controles ortogonales (por ejemplo, acelerar el vehículo no influye en nada más que en los componentes relacionados exclusivamente con la función de aceleración. No afecta a la radio por ejemplo (aunque no estoy seguro de si afecta Reproducción de CD, ya que el mío se salta a veces).

FP fomenta la inmutabilidad y la pureza tanto como sea posible. y OO parece algo creado para el estado y la mutación (¿una versión ligeramente organizada de la programación imperativa?). Y me doy cuenta de que los objetos pueden ser inmutables. Pero OO parece implicar estado / cambio para mí.

Parecen opuestos. ¿Eso significa que son ortogonales?

Kinda. El problema es que ninguno de estos conceptos está realmente definido como una roca. Pero sí, tienes la esencia de esto.

    
respondido por el Rook 16.10.2010 - 18:09
Comentarios Recientes

El problema de proporcionar una antena óptima en línea se puede resolver haciendo campos de radio de muchas antenas. Pero, ¿cómo calculamos ese campo? Por ejemplo, ¿es posible encontrar la rigidez de la propagación en función de las propiedades de polarización? Solo una vez su campo está cerca de lo normal (con valores entre 0 ° / N y 180 ° / N), el proceso de sintonización de transmisión de todas las antenas tiene un control estricto. En tal situación, se espera que produzca la antena de manera óptima,... Lee mas