SlideShare a Scribd company logo

Object Oriented Programming vs Functional Programming - Valencia.rb

Charla del día 1 de Abril de 2014 sobre Programación Funcional, inlcuyendo temas como closures, tail call optimization y function composition. Repo con los ejemplos en: https://github.com/valenciarb/functional-programming

1 of 22
Download to read offline
OOP vs FP
Daniel Pecos Martínez
@danielpecos
http://danielpecos.com
Valencia.rb - 1 Abril 2014
¿Qué es un paradigma?
Es un estilo fundamental de programación, una
forma de construir la estructura y elementos de los
programas computacionales.
Wikipedia
Es una forma de hacer las cosas. En informática, es
el modo en el que se abordan la resolución de
problemas.
DPM (Yo mismo)
Object Oriented Programming vs Functional Programming - Valencia.rb
http://plwords.herokuapp.com/
Programación Imperativa
● Características
– Define las acciones a seguir para resolver el problema
– Basado en statements que modifican el estado
– Fuertemente influenciada por arquitectura Von Neumann
● Paradigmas que se incluyen
– Estructurada: evita hacer uso de funciones que rompen el flujo
de programa (GOTOs)
– Procedural: descomposición del problema en subrutinas
– Orientación a Objetos (OOP)
Object Oriented Programming vs Functional Programming - Valencia.rb

Recommended

Documento sin título
Documento sin títuloDocumento sin título
Documento sin títuloPauCardenas19
 
Walter stiven tafur 1003 algoritmos
Walter stiven tafur 1003 algoritmosWalter stiven tafur 1003 algoritmos
Walter stiven tafur 1003 algoritmoswalteray10
 
Algoritmos
AlgoritmosAlgoritmos
AlgoritmosH3ll3nA
 
Técnicas de programación estructurada
Técnicas de programación estructuradaTécnicas de programación estructurada
Técnicas de programación estructuradaGabriel Mondragón
 
Pseudocodigos y diagramas de flujo
Pseudocodigos y diagramas de flujoPseudocodigos y diagramas de flujo
Pseudocodigos y diagramas de flujoojitos1567
 
Revista analisis numerico
Revista analisis numericoRevista analisis numerico
Revista analisis numericoomar abou
 

More Related Content

What's hot

Dpss u3 a2_edcm
Dpss u3 a2_edcmDpss u3 a2_edcm
Dpss u3 a2_edcmal10509673
 
Algoritmos por-omor-azuaje2
Algoritmos por-omor-azuaje2Algoritmos por-omor-azuaje2
Algoritmos por-omor-azuaje2OmarAzuaje3
 
Proceso de la programacion
Proceso de la programacionProceso de la programacion
Proceso de la programacionLuis Epinoza
 
CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA
CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA
CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA Marcelo Herrera
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programaciónclaudia polo jaraba
 
Consulta sobre Lenguajes de Programación Lineal y Estructurada.
Consulta sobre Lenguajes de Programación Lineal y Estructurada.Consulta sobre Lenguajes de Programación Lineal y Estructurada.
Consulta sobre Lenguajes de Programación Lineal y Estructurada.Luis Jaya
 
Programacin estructurada
Programacin estructuradaProgramacin estructurada
Programacin estructuradaRubixita12
 
Algebra junior rico2
Algebra junior rico2Algebra junior rico2
Algebra junior rico2JuniorRico1
 

What's hot (10)

Dpss u3 a2_edcm
Dpss u3 a2_edcmDpss u3 a2_edcm
Dpss u3 a2_edcm
 
Algoritmos por-omor-azuaje2
Algoritmos por-omor-azuaje2Algoritmos por-omor-azuaje2
Algoritmos por-omor-azuaje2
 
Proceso de la programacion
Proceso de la programacionProceso de la programacion
Proceso de la programacion
 
CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA
CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA
CONSULTA DE PROGRAMACION LINEAL Y ESTRUCTURADA
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programación
 
Consulta sobre Lenguajes de Programación Lineal y Estructurada.
Consulta sobre Lenguajes de Programación Lineal y Estructurada.Consulta sobre Lenguajes de Programación Lineal y Estructurada.
Consulta sobre Lenguajes de Programación Lineal y Estructurada.
 
Programacin estructurada
Programacin estructuradaProgramacin estructurada
Programacin estructurada
 
mapa mental
mapa mentalmapa mental
mapa mental
 
Algebra junior rico2
Algebra junior rico2Algebra junior rico2
Algebra junior rico2
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 

Similar to Object Oriented Programming vs Functional Programming - Valencia.rb

Unidad 2 programación estructurada
Unidad 2 programación estructuradaUnidad 2 programación estructurada
Unidad 2 programación estructuradaRoberth Camana
 
Paradigmas de Programación
Paradigmas de ProgramaciónParadigmas de Programación
Paradigmas de ProgramaciónJose Sanchez
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmaticaJose Gallardo
 
01 uni1-estructuras de datos-introduccion a las ed
01 uni1-estructuras de datos-introduccion a las ed01 uni1-estructuras de datos-introduccion a las ed
01 uni1-estructuras de datos-introduccion a las edFranco Guamán
 
Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....
Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....
Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....JhoanJavierDeLosSant
 
Programación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a ObjetosProgramación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a Objetosanytrix
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programaciónMay Ibarra
 
Introducción a ORMs
Introducción a ORMsIntroducción a ORMs
Introducción a ORMsmaxfontana90
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Capítulo 3 Algoritmos recursivos.pdf
Capítulo 3 Algoritmos recursivos.pdfCapítulo 3 Algoritmos recursivos.pdf
Capítulo 3 Algoritmos recursivos.pdfIgor Rodriguez
 

Similar to Object Oriented Programming vs Functional Programming - Valencia.rb (20)

Programacion Funcional
Programacion FuncionalProgramacion Funcional
Programacion Funcional
 
Unidad 2 programación estructurada
Unidad 2 programación estructuradaUnidad 2 programación estructurada
Unidad 2 programación estructurada
 
1127082.ppt
1127082.ppt1127082.ppt
1127082.ppt
 
Paradigmas de Programación
Paradigmas de ProgramaciónParadigmas de Programación
Paradigmas de Programación
 
Tema 1[1][1]
Tema 1[1][1]Tema 1[1][1]
Tema 1[1][1]
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
 
Javaqert
JavaqertJavaqert
Javaqert
 
Javaqert
JavaqertJavaqert
Javaqert
 
Programacion java
Programacion javaProgramacion java
Programacion java
 
01 uni1-estructuras de datos-introduccion a las ed
01 uni1-estructuras de datos-introduccion a las ed01 uni1-estructuras de datos-introduccion a las ed
01 uni1-estructuras de datos-introduccion a las ed
 
Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....
Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....
Actividad 14. Diseño de Algoritmos Paralelos - Jhoan De Los Santos (22-1005)....
 
Programación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a ObjetosProgramación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a Objetos
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Introducción a ORMs
Introducción a ORMsIntroducción a ORMs
Introducción a ORMs
 
presentacion Fermath
presentacion Fermathpresentacion Fermath
presentacion Fermath
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Introduccion a haskell
Introduccion a haskellIntroduccion a haskell
Introduccion a haskell
 
Samir
SamirSamir
Samir
 
samir
samirsamir
samir
 
Capítulo 3 Algoritmos recursivos.pdf
Capítulo 3 Algoritmos recursivos.pdfCapítulo 3 Algoritmos recursivos.pdf
Capítulo 3 Algoritmos recursivos.pdf
 

More from Daniel Pecos Martínez

More from Daniel Pecos Martínez (7)

20170405 - Ecosistema Javascript
20170405 - Ecosistema Javascript20170405 - Ecosistema Javascript
20170405 - Ecosistema Javascript
 
T2 - JDBC
T2 - JDBCT2 - JDBC
T2 - JDBC
 
T3 - JPA
T3 - JPAT3 - JPA
T3 - JPA
 
T1 - Introducción
T1 - IntroducciónT1 - Introducción
T1 - Introducción
 
Tema 3 - Seguridad en Internet
Tema 3 - Seguridad en InternetTema 3 - Seguridad en Internet
Tema 3 - Seguridad en Internet
 
Tema 2 - Introducción a la Criptografía
Tema 2 - Introducción a la CriptografíaTema 2 - Introducción a la Criptografía
Tema 2 - Introducción a la Criptografía
 
Tema 1 - Introducción a la Seguridad Informática
Tema 1 - Introducción a la Seguridad Informática Tema 1 - Introducción a la Seguridad Informática
Tema 1 - Introducción a la Seguridad Informática
 

Object Oriented Programming vs Functional Programming - Valencia.rb

  • 1. OOP vs FP Daniel Pecos Martínez @danielpecos http://danielpecos.com Valencia.rb - 1 Abril 2014
  • 2. ¿Qué es un paradigma? Es un estilo fundamental de programación, una forma de construir la estructura y elementos de los programas computacionales. Wikipedia Es una forma de hacer las cosas. En informática, es el modo en el que se abordan la resolución de problemas. DPM (Yo mismo)
  • 5. Programación Imperativa ● Características – Define las acciones a seguir para resolver el problema – Basado en statements que modifican el estado – Fuertemente influenciada por arquitectura Von Neumann ● Paradigmas que se incluyen – Estructurada: evita hacer uso de funciones que rompen el flujo de programa (GOTOs) – Procedural: descomposición del problema en subrutinas – Orientación a Objetos (OOP)
  • 7. Paradigm Description Main characteristics Related paradigm(s) Examples Imperative Computation as statements that directly change a program state (datafields) Direct assignments, common data structures, global variables C, C++, Java, PHP, Python Structured A style of imperative programming with more logical program structure Structograms, indentation, either no, or limited use of, goto statements Imperative C, C++, Java Procedural Derived from structured programming, based on the concept of modular programming or the procedure call Local variables, sequence, selection, iteration, and modularization Structured, imperative C, C++, Lisp, PHP, Python Object-oriented Treats datafields as objects manipulated through pre-defined methods only Objects, methods, message passing, information hiding, data abstraction, encapsulation, polymorphism, inheritance, serialization-marsh alling C++, C#, Eiffel, Java, PHP, Python, Ruby, Scala
  • 8. OOP ● Características – Abstracción – Encapsulamiento – Modularidad – Polimorfismo – Herencia ● SOLID – Single responsibility pr inciple – Open/closed principle – Liskov substitution pri nciple – Interface segregation p rinciple – Dependency inversion principle
  • 9. Programación Declarativa ● Características – Describe la lógica de la computación sin definir el flujo de control – Eliminación (o reducción) de los efectos colaterales ● Paradigmas que se incluyen – Lógico – Orienta a restricciones (constraint programming) – Dataflow – Funcional (FP)
  • 10. Paradigm Description Main characteristics Related paradigm(s) Examples Declarative Defines computation logic without defining its detailed control flow 4GLs, spreadsheets, report program generators SQL, regular expressions, CSS Logical Define and query relations Use of unifications to solve equations between symbolic expressions Prolog Constraint programming Relations between variables are stated in the form of constraints Used as complement to other paradigms. Optimizations problems are a typical use case Functional, logical, imperative Dataflow Direct graph of data flowing between operations Numeric processing. Operations treated as chained black boxes. Functional Functional Treats computation as the evaluation of mathematical functions avoiding state and mutable data Lambda calculus, compositionality, formula, recursion, referential transparency, no side effects Erlang, Haskell, Lisp, Clojure, Scala, F#
  • 11. FP ● Características – Evita estado y/o datos mutables – Transparencia referencial (funciones puras) – First class & Higher order functions – La iteración se reemplaza por recursividad ● Conceptos Clave – Closures – Monads – Tail recursion – Currying – Lazy Evaluation
  • 12. Imperative vs Functional Characteristic Imperative approach Functional approach Programmer focus How to perform tasks (algorithms) and how to track changes in state. What information is desired and what transformations are required. State changes Important. Non-existent. Order of execution Important. Low importance. Primary flow control Loops, conditionals, and function (method) calls. Function calls, including recursion. Primary manipulation unit Instances of structures or classes. Functions as first-class objects and data collections.
  • 13. Closures ● Una closure es el binomio formado por – Una función junto – El contexto en el que se definió ● Permite acceder y modificar variables no locales a la función desde cualquier sitio en el que se invoque dicha función, aunque el contexto no sea directamente accesible ● Se utilizan para ocultar el estado ● En JS se usan intensivamente como funciones anónimas en callbacks
  • 14. Tail Call Optimization Técnica de compilación que optimiza la recursividad, cuando la llamada recursiva es la última instrucción del bloque, permitiendo la reutilización del stack frame para sucesivas invocaciones.
  • 15. Currying ● Técnica que permite convertir una función multi-parámetro en una cadena de funciones mono-parámetro f(x,y,z) = g(x)(y)(z) mult = (x, y) → x * y doubler = (x) → mult(x, 2)
  • 16. Lazy evaluation ● Estrategia que retrasa la evaluación de expresiones hasta que su valor es necesario ● Evita evaluación de expresiones repetidas ● Beneficios: – Mejora de rendimiento – Construcción de estructuras de datos infinitas – Estructuras de control como abstracciones en vez de primitivos
  • 17. La joya de la corona: function composition ● Mecanismo para construir funciones de mayor complejidad a partir de funciones simples ● Requiere que el lenguaje soporte higher order functions
  • 19. ¿Dónde se utiliza FP? ● Cálculos matemáticos ● IA ● Entornos de alta concurrencia ● BigData - MapReduce
  • 20. FP desde las trincheras ● Uso el lenguaje X en mi día a día ¿Puedo utilizar programación funcional? ● Sí, por supuesto. Pero... No será tan natural como si lo hicieras en un lenguaje que te lo facilitase. Debes conocer los límites.
  • 21. Debate ● MVC ¿OOP o FP? ● OOP vs FP – Modelados de dominios – Parallel programming – UI