SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
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)
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)
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
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
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)
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#
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
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.
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
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.
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)
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
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
¿Dónde se utiliza FP?
● Cálculos matemáticos
● IA
● Entornos de alta concurrencia
● BigData - MapReduce
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.
Debate
● MVC ¿OOP o FP?
● OOP vs FP
– Modelados de dominios
– Parallel programming
– UI
Daniel Pecos Martínez
@danielpecos
http://danielpecos.com

Más contenido relacionado

La actualidad más candente

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
 

La actualidad más candente (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 a OOP vs FP Paradigm Comparison

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
 
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdfUnidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdfEDWINERNESTOMADRIDME
 
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
 
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
 
presentacinorm-150325230016-conversion-gate01.pptx
presentacinorm-150325230016-conversion-gate01.pptxpresentacinorm-150325230016-conversion-gate01.pptx
presentacinorm-150325230016-conversion-gate01.pptxssuser948499
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Programación a no Orientación para cambiar el paradigma
Programación a no Orientación para cambiar el paradigmaProgramación a no Orientación para cambiar el paradigma
Programación a no Orientación para cambiar el paradigmaanytrix
 

Similar a OOP vs FP Paradigm Comparison (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
 
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdfUnidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
 
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
 
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
 
presentacinorm-150325230016-conversion-gate01.pptx
presentacinorm-150325230016-conversion-gate01.pptxpresentacinorm-150325230016-conversion-gate01.pptx
presentacinorm-150325230016-conversion-gate01.pptx
 
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
 
Programación a no Orientación para cambiar el paradigma
Programación a no Orientación para cambiar el paradigmaProgramación a no Orientación para cambiar el paradigma
Programación a no Orientación para cambiar el paradigma
 
Samir
SamirSamir
Samir
 

Más de Daniel Pecos Martínez

Más de 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
 

OOP vs FP Paradigm Comparison

  • 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)
  • 3.
  • 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)
  • 6.
  • 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
  • 18.
  • 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