Cual es la diferencia entre programación funcional y orientada a objetos.

paradigma

¿Cuál es la diferencia entre programación funcional y orientada a objetos?

Existen dos paradigmas de programación muy populares en desarrollo y diseño de software. Probablemente has oido hablar de ellos en más de una ocasión. Reciben el nombre de programación orientada a objetos y programación funcional. Pero, que son exactamente y cuáles son las diferencias entre estos dos paradigmas. Echemos un vistazo.

¿Qué es la programación orientada a objetos?

La programación orientada a objetos es un paradigma en el que el programa usa objetos para representar lo que estas programando (muchas veces objetos del mundo real). Estos objetos podrían ser estructuras de datos. Los objetos guardan información interna de ellos en atributos. Los atributos son manipulados mediante métodos o funciones que son programados en los mismos objetos.

Por ejemplo, podríamos tener un objeto Persona que representa todos los datos que una persona podría tener: Peso, altura, color de pie, color de pelo, corte de pelo… Estos son los atributos. Entonces el objeto persona además podría hacer cosas como: leventar una caja, bajar una caja, comer, dormir, etc. Estos son las funciones que usan los datos que los objetos albergan.

Los ingenieros que usan la programación orientada a objetos dicen que es un estilo de programación que te permite modelar escenarios del mundo real de una manera mucho más simple. Esto permite una buena transición desde los requerimientos un código que funcione como lo que el cliente espera.

Algunos ejemplos de lenguajes orientados a objeto son: C++, Java, Python, C#, Objective-C, and Swift.

¿Qué la programación funcional?

La programación funcional es la forma de programar que intenta evitar cambios de estados y datos cambiantes. En la programación orientada a funciones, la salida de una función siempre debería ser la misma ante entradas similares.

Esto es porque la salidas de las funciones en programación funcional depende unicamente de los argumentos de la función, y lo que pasa por detrás no es magia. Esto elimina los efectos secundarios de cambios en el código.

Por ejemplo, si se llama a la función getSum(x,y). Esta calcula la suma de dos entradas y devuelve la suma. Dados los mismos valores para x e y, siempre obtendremos el mismo valor de salida para la suma.

Esto permite que la función sea extremadamente predecible dentro dentro del programa. Cada pequeña función hace su parte y solo su parte. De esta forma conseguimos un código muy limpio y modular que funciona junto en armonía. Esto es incluso más sencillo que viene con test unitarios.

Algunos ejemplos de lenguajes de programación funcional son: Lisp, Clojure, y F#.

Problemas con la programación orientada a objetos

Existen unos pocos problemas con la programación orientada a objetos. En primer lugar, es bien conocido que no es tan reusable. Como algunas de tus funciones dependen de la clase que la este usando es complicado usar algunas funciones con otras clases

Además, típicamente es menos eficiente y mas complejo de mantener. Muchas veces, algunos objetos tienen diseños orientados a grandes arquitecturas que pueden llegar a ser extremadamente complejos de mantener.

Problemas con la programación funcional

Problemas con la programación funcional

La programación funcional no está libre de defectos. Realmente se necesita una mentalidad diferente para abordar su código desde un punto de vista funcional. Es fácil pensar en términos orientados a objetos, porque es similar a cómo el objeto que se está modelando sucede en el mundo real.

La programación funcional tiene que ver con la manipulación de datos. La conversión de un escenario del mundo real a solo datos puede tomar un pensamiento adicional.

Debido a su dificultad para aprender a programar de esta manera, hay menos personas que programan usando este estilo, lo que podría dificultar la colaboración con otra persona o aprender de otros porque naturalmente habrá menos información sobre el tema.

 

Comparación de programación orientada a objetos y programación funcional

Ambos conceptos de programación tienen el objetivo de crear programas fácilmente comprensibles, libres de errores y que se puedan desarrollar rápidamente. Ambos conceptos tienen diferentes métodos para almacenar los datos y cómo manipular los datos.

En la programación orientada a objetos, se almacenan los datos en atributos de objetos y tiene funciones que funcionan para ese objeto y realizan la manipulación.

En la programación funcional, vemos todo como una transformación de datos. Los datos no se almacenan en los objetos, se transforma creando nuevas versiones de esos datos y manipulándolos usando una de las muchas funciones.

Espero que tengan una idea más clara de cuál es la diferencia entre la programación orientada a objetos y los paradigmas de programación funcional.

Ambos se pueden usar por separado o se pueden mezclar hasta cierto punto para satisfacer sus necesidades.

En última instancia, debe tener en cuenta las ventajas y desventajas de usar ambos antes de tomar esa decisión.

Este articulo es una traducción.

Artículo original de Antonio Cucciniello se puede encontrar en what-difference-between-functional-and-object-oriented-programming 

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *