programación multiparadigma, conveniencia y actualidad

77
FIMAT XXI Programación Funciona- l/OO Actualidad de la PMP .NET Software distribuido y concurrente Aquí y allá... Técnicas tradicionales Programación Orientada a Objetos Realidad de la industria del software Errores de software Crisis del Software Paradigmas Paradigmas de programación Paradigma Funcional Programación Funcional Ejemplo Haskell Definición de P ROGRAMACIÓN MULTIPARADIGMA, CONVENIENCIA Y ACTUALIDAD José Albert Cruz Almaguer [email protected] Departamento de Técnicas de Programación Universidad de las Ciencias Informáticas Mayo de 2009

Upload: jose-almaguer

Post on 15-Jun-2015

83 views

Category:

Software


0 download

DESCRIPTION

An analysis about the convenience of using more than one programming paradigm in an application.

TRANSCRIPT

Page 1: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PROGRAMACIÓN MULTIPARADIGMA ,CONVENIENCIA Y ACTUALIDAD

José Albert Cruz [email protected]

Departamento de Técnicas de ProgramaciónUniversidad de las Ciencias Informáticas

Mayo de 2009

Page 2: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

SUMARIO

1 ACTUALIDAD DE LA PMP.NETSoftware distribuido y concurrenteAquí y allá...Paradigmas

Paradigmas de programaciónProgramación FuncionalEjemplo

Técnicas funcionales2 SCALA

Desarrollo de software en la actualidadApreciando Scala

Tipos de funcionesClausuras

Técnicas de PFPattern matchingClases case

Patrones

FOS sobre listas

Page 3: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

C# 3.0: EXPRESIONES LAMBDA, LINQEXPRESIONES LAMBDA

Manera mucho más concisa de manejar métodosanónimos y por lo tanto de simplificar el trabajo condelegados:

var l i s t = new L i s t < i n t > ( ) ;l i s t . AddRange(new i n t [ ] { 20 , 1 , 4 , 8 , 9 , 44 } ) ;var evenNumbers = l i s t . F i n d A l l (

i => ( i % 2) == 0 ) ;

Page 4: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

C# 3.0: EXPRESIONES LAMBDA, LINQLINQ

La mayoría del tiempo la pasamos manipulando datos:ADO.NET, XML, reflection y las colecciones. Cada unade las APIs presenta sus características con muypocas facilidades de integración: OO/X mismatch.

Page 5: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

C# 3.0: EXPRESIONES LAMBDA, LINQLINQ

El API de LINQ es un intento (satisfactorio) de proveeruna manera consistente en la cual los programadorespuedan obtener y manipular “datos" en el sentidoamplio de la palabra.

s t r ing [ ] currentVideoGames = { " Morrowind " ," BioShock " , " Ha l f L i f e 2 : Episode 1 " ," The Darkness " , " Daxter " , " System Shock 2 " } ;

IEnumerable<str ing > subset =from g in currentVideoGameswhere g . Length > 6 orderby gse lec t g ;

Page 6: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

F#

“...the somewhat mathematical slant of functionalprogramming just seems naturally appealing toprofessionals whose primary domain is described withmathematical notation - domains such as financial,scientific and technical computing..."

S. SomasegarSenior Vice President, Developer DivisionMicrosoft

Page 7: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

SOFTWARE DISTRIBUIDO Y CONCURRENTEERLANG

Funcional

Concurrente

Muy eficiente

Diseñado para sistemas de tiempo real

Page 8: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

SOFTWARE DISTRIBUIDO Y CONCURRENTEERLANG

loop ( ) −>receive

{ rec tang le , Width , Ht } −>i o : fo rmat ( " Area o f rec tang le i s ~p~n " ,

[ Width ∗ Ht ] ) , loop ( ) ;{ c i r c l e , R} −>

i o : fo rmat ( " Area o f c i r c l e i s ~p~n " ,[ 3.14159 ∗ R ∗ R] ) , loop ( ) ;

Other −>i o : fo rmat ( " I don ’ t know what the area

o f a ~p i s ~n " , [ Other ] ) , loop ( )end .

Page 9: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

SOFTWARE DISTRIBUIDO Y CONCURRENTEERLANG

1> Pid = spawn ( fun area_server0 : loop / 0 ) .<0.36.0 >2> Pid ! { rec tang le , 6 , 10 } .Area of rec tang le i s 60{ rec tang le ,6 ,10 }3> Pid ! { c i r c l e , 23 } .Area of c i r c l e i s 1661.90{ c i r c l e ,23 }

Page 10: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

OTRAS TECNOLOGÍAS

1 JavaScript/ActionScript2 JavaFX3 Clojure4 Haskell5 R6 Mathematica7 Ruby: RoR8 Python

Page 11: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PROGRAMACIÓN ORIENTADA A OBJETOS

Entes que se solicitan servicios a travésde mensajesCada objeto es caracterizado por:

atributos ⇒ ESTADOmétodos ⇒ Alteran el estado y/o informan sobre él

Desde cualquier punto se puede alterar elestado de cualquier objeto

niveles de acceso en clases/metodologías de ISW: NOSUFICIENTES, sobran los ejemplos:

Page 12: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COSTO DE LOS ERRORES DE SOFTWARE

Software errors cost the U.S. economy $60billion annually in rework, lost productivityand actual damages. We all know softwarebugs can be annoying, but faulty software canalso be expensive, embarrassing, destructiveand deadly.

http://www.nist.gov/public_affairs/releases/n02-10.htm

Page 13: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

CRISIS DEL SOFTWARE

Los programadores que se enfrentan a laconstrucción de grandes sistemas desoftware observan que sus productos noson fiables.

La raíz del problema radica en la dificultadde demostrar que el sistema cumple losrequisitos especificados.

Page 14: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

CRISIS DEL SOFTWARE

Los programadores que se enfrentan a laconstrucción de grandes sistemas desoftware observan que sus productos noson fiables.

La raíz del problema radica en la dificultadde demostrar que el sistema cumple losrequisitos especificados.

Page 15: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

POSIBLES SOLUCIONES

Ingeniería del Software: solución de losproblemas de Análisis y Diseño degrandes proyectos.

Síntesis de Programas: obtener a partirde unas especificaciones formales códigoejecutable.

Modelo de computación diferente almodelo imperativo tradicional.

Page 16: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

POSIBLES SOLUCIONES

Ingeniería del Software: solución de losproblemas de Análisis y Diseño degrandes proyectos.

Síntesis de Programas: obtener a partirde unas especificaciones formales códigoejecutable.

Modelo de computación diferente almodelo imperativo tradicional.

Page 17: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

POSIBLES SOLUCIONES

Ingeniería del Software: solución de losproblemas de Análisis y Diseño degrandes proyectos.

Síntesis de Programas: obtener a partirde unas especificaciones formales códigoejecutable.

Modelo de computación diferente almodelo imperativo tradicional.

Page 18: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

MODELO DE COMPUTACIÓN

Los problemas son inherentesal modelo computacionalutilizado y su solución no seencontrará a menos que seutilice un modelo diferente.

Page 19: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PROGRAMACIÓN DECLARATIVA

Establece qué debe ser computado, pero

No necesariamente cómo computarlo

Page 20: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PROGRAMACIÓN DECLARATIVA

Establece qué debe ser computado, pero

No necesariamente cómo computarlo

Page 21: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LENGUAJE DECLARATIVO

Sus frases describen relaciones entre losdatos

Oculta los algoritmos dentro de lasemántica del lenguaje

Page 22: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LENGUAJE DECLARATIVO

Sus frases describen relaciones entre losdatos

Oculta los algoritmos dentro de lasemántica del lenguaje

Page 23: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

CONSTRUCCIÓN DE PROGRAMAS

Imperativa : estudiar las secuencias deinstrucciones que debo dar al computadorpara buscar la solución (acciones arealizar)

Declarativa : ¿cómo expresar ladescripción del problema para que elcomputador pueda buscar las soluciones?(conocimiento acerca del problema)

Page 24: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

CONSTRUCCIÓN DE PROGRAMAS

Imperativa : estudiar las secuencias deinstrucciones que debo dar al computadorpara buscar la solución (acciones arealizar)

Declarativa : ¿cómo expresar ladescripción del problema para que elcomputador pueda buscar las soluciones?(conocimiento acerca del problema)

Page 25: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PARADIGMA FUNCIONAL

Abstracción fundamental: la funciónmatemática

Programar consiste en definir funciones apartir de otras más sencillas (usandooperaciones básicas: composición,recursión y condicional)

Page 26: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PARADIGMA FUNCIONAL

Abstracción fundamental: la funciónmatemática

Programar consiste en definir funciones apartir de otras más sencillas (usandooperaciones básicas: composición,recursión y condicional)

Page 27: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PARADIGMA FUNCIONAL

Transparencia referencial: el valor quedevuelve una función está únicamentedeterminado por el valor de susargumentos, por lo que una expresióntiene siempre el mismo valor.

Page 28: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COMPROBACIÓN DE PRIMALIDAD

prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]

&& ⇒ denota conjunción

rem n x /= 0 ⇒ expresa que el resto de ladivisión de n por x es distinto de cero. Enotras palabras: x no es un divisor propiode n

Page 29: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COMPROBACIÓN DE PRIMALIDAD

prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]

&& ⇒ denota conjunción

rem n x /= 0 ⇒ expresa que el resto de ladivisión de n por x es distinto de cero. Enotras palabras: x no es un divisor propiode n

Page 30: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COMPROBACIÓN DE PRIMALIDAD

prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]

&& ⇒ denota conjunción

rem n x /= 0 ⇒ expresa que el resto de ladivisión de n por x es distinto de cero. Enotras palabras: x no es un divisor propiode n

Page 31: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COMPROBACIÓN DE PRIMALIDADNUESTRO PRIMER PROGRAMAHASKELL

prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]

( x -> rem n x /= 0 ) ⇒ es la propiedad deno ser un divisor propio de n

[2..n-1] ⇒ denota la lista de enterosdesde 2 hasta n-1 (incluido)

Page 32: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COMPROBACIÓN DE PRIMALIDADNUESTRO PRIMER PROGRAMAHASKELL

prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]

( x -> rem n x /= 0 ) ⇒ es la propiedad deno ser un divisor propio de n

[2..n-1] ⇒ denota la lista de enterosdesde 2 hasta n-1 (incluido)

Page 33: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

COMPROBACIÓN DE PRIMALIDADNUESTRO PRIMER PROGRAMAHASKELL

prime n =n > 1 && a l l ( \ x −> rem n x /= 0 ) [ 2 . . n−1]

all ⇒ denota la prueba de que todos losmiembros de la lista cumplen con lapropiedad

Page 34: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

DEFINIENDO FUNCIONESECUACIONES CON GUARDAS

Las funciones pueden definirse usando guardedequations: una secuencia de expresiones lógicas queson usadas para escoger una de las definiciones, elproceso de búsqueda comienza por la primera (dearriba a abajo) y continúa hasta que se encuentre unaque evalúe a True.

s igno n | n < 0 = −1| n == 0 = 0| otherwise = 1

Page 35: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

DEFINIENDO FUNCIONESPATTERN MATCHING

Una secuencia de expresiones llamadas patrones esusada para escoger entre un conjunto de posiblesresultados:

True & True = TrueTrue & False = FalseFalse & True = FalseFalse & False = False

De ellas se coge el primer resultado para el que sesatisfaga el patrón.

Page 36: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PATTERN MATCHINGL ISTAS POR COMPREHENSIÓN

Pattern matching para escoger elementos, esencia delpatrón send/recieve de la librería Actors:

> [ x | ( x , ’M’ ) <− [ ( 1 , ’M’ ) , (2 , ’F ’ ) ,(4 , ’M’ ) ] ]

[ 1 , 4 ]

Page 37: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

TÉCNICAS DEPROGRAMACIÓN FUNCIONALEXPRESIONES LAMBDA

Las funciones pueden ser construidas “sin nombre"usando expresiones lambda:

\ x −> 2 ∗ x

Page 38: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

EXPRESIONES LAMBDAUTILIDAD

Formalización de la definición de funciones curried:

add x y = \ x −> ( \ y −> x + y )

Evitar crear funciones que solo se usan una vez:

impares n = [ f t | t <− [ 0 . . n−1]where f x = x ∗ 2 + 1

impares n = [ ( \ x −> x∗2+1) t | t < − [0 . .n−1]

Page 39: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

TÉCNICAS DEPROGRAMACIÓN FUNCIONALFUNCIONES DE ORDEN SUPERIOR

Definición: una función es considerada de ordensuperior si espera una función como argumento odevuelve una función como resultado:

tw ice f x = f ( f x )

> tw ice ( \ x−>x ∗2) 312

Page 40: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PROCESAMIENTO DE LISTASMAP: APLICA UNA FUNCIÓN A TODOS LOS ELEMENTOS DE UNA LISTA

map f xs = [ f x | x <− xs ]

> map ( \ x−>x+1) [ 1 , 3 , 5 , 7 ][ 2 , 4 , 6 , 8 ]

Page 41: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LA FUNCIÓN MAP

Definición recursiva:

map f [ ] = [ ]map f ( x : xs ) = f x : map f xs

Page 42: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PROCESAMIENTO DE LISTAS

filter: Selecciona a todos los elementos de una listaque satisfacen un determinado predicado, dondepredicado (o propiedad) es una función que retorna unvalor lógico.

f i l t e r p xs = [ x | x <− xs , p x ]

Page 43: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LA FUNCIÓN FILTER

Definición recursiva:

f i l t e r p [ ] = [ ]f i l t e r p ( x : xs ) | p x = x : f i l t e r p xs

| otherwise f i l t e r p xs

Page 44: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LA FUNCIÓN FOLDR

Muchas funciones sobre listas pueden ser definidasusando el siguiente patrón de recursión:

f [ ] = vf ( x : xs ) = x op f xs

Page 45: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LA FUNCIÓN FOLDREJEMPLOS

La función mapea lista vacía ([]) a un valor v, y,cualquier lista no vacía a un operador op (binario)aplicado a la cabeza de la lista y al resultado deprocesar recursivamente la cola de la lista:

suma [ ] = 0suma ( x : xs ) = x + suma xs

producto [ ] = 1producto ( x : xs ) = x ∗ producto xs

o [ ] = Falseo ( x : xs ) = x or o xs

Page 46: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LA FUNCIÓN FOLDRDEFINICIÓN

La función foldr (foldl) encapsula este patrón derecursión con el operador y el valor v comoargumentos:

suma = f o l d r ( + ) 0

producto = f o l d r ( ∗ ) 1

o [ ] = f o l d r ( or ) False

y [ ] = f o l d r (and ) True

Page 47: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

LA FUNCIÓN FOLDR1DEFINICIÓN

La función foldr1 puede definirse así:

fo ld r1 op [ x ] = x

fo ld r1 op ( x : xs ) = op x ( fo ld r1 op xs )

Siendo # un operador binario infijo:

fo ld r1 ( # ) [ x1 , x2 , . . . , xn ] =x1 # ( x2 # ( . . . ( xn−1 # xn ) . . . ) )

Page 48: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

EJEMPLODEFINIENDO EL MÁXIMO DE UNA LISTA :

max l i s t l i s t = fo ld r1 max l i s t

Page 49: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

DESARROLLO DE SOFTWARE EN LA ACTUALIDAD

Muchos LPs trabajando juntos

JavaScript

Perl/Python/Ruby/Groovy (scripting en elservidor)

JavaFX (UI)

Java (business logic)

SQL (for database access)

Integración: XML, strings.

Page 50: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

DESARROLLO DE SOFTWARE EN LA ACTUALIDAD

Muchos LPs trabajando juntos

JavaScript

Perl/Python/Ruby/Groovy (scripting en elservidor)

JavaFX (UI)

Java (business logic)

SQL (for database access)

Integración: XML, strings.

Page 51: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

ALTERNATIVA : LENGUAJES ESCALABLES

Un lenguaje es escalable si es adecuado paradesarrollar tanto programas pequeños y comograndes.

Tratar necesidades de dominiosespecíficos meiante DSLs en vez delenguajes externos.

Scala logra esto mediante una mescla deusuarios expertos (para el framework) yno expertos (para el código deaplicación).

Page 52: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

ALTERNATIVA : LENGUAJES ESCALABLES

Un lenguaje es escalable si es adecuado paradesarrollar tanto programas pequeños y comograndes.

Tratar necesidades de dominiosespecíficos meiante DSLs en vez delenguajes externos.

Scala logra esto mediante una mescla deusuarios expertos (para el framework) yno expertos (para el código deaplicación).

Page 53: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

ALTERNATIVA : LENGUAJES ESCALABLES

Un lenguaje es escalable si es adecuado paradesarrollar tanto programas pequeños y comograndes.

Tratar necesidades de dominiosespecíficos meiante DSLs en vez delenguajes externos.

Scala logra esto mediante una mescla deusuarios expertos (para el framework) yno expertos (para el código deaplicación).

Page 54: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

EJEMPLOS

Añadir estructuras de control:

using (new BufferedReader (new Fi leReader ( path ) ) ) {

f => p r i n t l n ( f . readLine ( ) )}

En vez de:

val f = new BufferedReader (new Fi leReader ( path ) )

t r y {p r i n t l n ( f . readLine ( ) )

}f i n a l l y {

i f ( f != nu l l ) f . c lose ( )}

Page 55: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

EJEMPLOSAÑADIR ESTRUCTURAS DE CONTROL:

s i es c i e r t o que 51 < 6 hacer {Consola i m p r i m i r " s i "

} s i no l o es hacer {Consola i m p r i m i r " no "

}

Page 56: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

EJEMPLOSREDEFINICIÓN DE APIS

Python

fo r root , d i r s , f i l e s in os . walk ( ’ . ’ ) :fo r name in f i l e s :

i f name[ −3: ] == ’ . py ’ :procesar (name)

Scala

fo r ( ( parent , d i r s , f i l e s ) <− " . " . walk )fo r (name <− f i l e s

i f (name endsWith " . py " )) procesar (name)

Page 57: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

¿CÓMO LOGRARLO?WITH

def using [ T <: { def close ( ) } ]( resource : T ) ( b lock : T => Un i t ) {

t r y {b lock ( resource )

} f i n a l l y {i f ( resource != nu l l ) resource . c lose ( )

}}

Page 58: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

¿CÓMO LOGRARLO?SI ES CIERTO QUE... HACER

class T16 ( cond : => Boolean , i n s t I f : => Un i t ) {def hacer ( i n s t E l se : => Un i t ) {

i f ( cond )i n s t I f

elsei n s t E l se

}}

Page 59: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FUNCIONESL ITERALES FUNCIONALES

Funciones de primera clase: se pueden escribirfunciones sin nombre (lambdas) que constituyenvalores.

( x : I n t ) => x + 1

var incrementar = ( x : I n t ) => x + 1

> incrementar (10)11

Page 60: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FUNCIONESCLAUSURAS (CLOSURES)

En el cuerpo de un literal de función se puedenreferenciar no solo parámetros del literal, tambiénvariables del ámbito:

val suma = ( x : I n t , y : I n t ) = x + yvar mas = 1val sumaConMas = ( x : I n t ) => x + mas

Page 61: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

UTILIDAD DE LAS TÉCNICAS DE PFREDUCCIÓN DE CÓDIGO

Parte común de las funciones: el cuerpoParte variable: los parámetros

Uso de literales funcionales: convierte a los algoritmos(código) en parámetros (datos).

Page 62: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

UTILIDAD DE LAS TÉCNICAS DE PFREDUCCIÓN DE CÓDIGO

Parte común de las funciones: el cuerpoParte variable: los parámetros

Uso de literales funcionales: convierte a los algoritmos(código) en parámetros (datos).

Page 63: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FUNCIONES DE ORDEN SUPERIOR:SIMPLIFICACIÓN DE CÓDIGO

def t ieneNegat ivos (nums : L i s t [ I n t ] ) =nums . e x i s t s ( _ < 0)

def t ieneImpares (nums : L i s t [ I n t ] ) =nums . e x i s t s ( _ % 2 == 1)

Page 64: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

CLASES CASE Y PATTERN MATCHING

> abstract class Exprcase class Var (name : S t r i n g ) extends Exprcase class Number(num: Double ) extends Exprcase class UnOp( opera to r : S t r ing , arg : Expr

extends Exprcase class BinOp ( opera to r : S t r ing ,

l e f t : Expr , r i g h t : Expr ) extends Expr

Page 65: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PATTERN MATCHINGPATRONES DE CONSTRUCTOR

def s i m p l i f i c a r ( expr : Expr ) : Expr =expr match {case UnOp( "−" , UnOp( "−" , e ) ) => ecase BinOp ( "+ " , e , Number ( 0 ) ) => ecase BinOp ( " ∗ " , e , Number ( 1 ) ) => ecase _ => expr

}

> s i m p l i f i c a r (UnOp( "−" , UnOp( "−" , Var ( " x " ) ) ) )res4 : Expr = Var ( x )

Page 66: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PATTERN MATCHINGPATRONES DE SECUENCIAS

def comienzaConCero ( expr : L i s t [ I n t ] ) =expr match {case L i s t (0 , _ , _ ) => p r i n t l n ( " Encontrado " )case _ =>

}

def comienzaConCero2 ( expr : L i s t [ I n t ] ) =expr match {case L i s t (0 , _∗ ) => p r i n t l n ( " Encontrado " )case _ =>

}

Page 67: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PATTERN MATCHINGPATRONES TIPADOS

def tamanno( x : Any ) =x match {

case s : S t r i n g => s . leng thcase m: Map[ _ , _ ] => m. s izecase _ => −1

}

Page 68: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

PATRONES TIPADOSUSO

> tamanno( " abc " )res15 : I n t = 3

> tamanno(Map(1 −> ’ a ’ ,2 −> ’ b ’ ) )

res16 : I n t = 2

> tamanno( Math . Pi )res17 : I n t = −1

Page 69: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

TRANSFORMACIONESMAP

> L i s t (1 , 2 , 3) map ( _ + 1)L i s t (2 , 3 , 4)

> val words = L i s t ( " the " , " qu ick " ," brown " , " fox " )

> words map ( _ . leng th )L i s t (3 , 5 , 5 , 3)

> words map ( _ . t o L i s t . reverse . mkStr ing )L i s t ( eht , kciuq , nworb , xo f )

Page 70: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

TRANSFORMACIONESFLATMAP

Toma una función como segundo operando y da porresultado la concatenación de todos los resultados

> L i s t . range (1 , 5) f la tMap (i => L i s t . range (1 , i ) map ( j => ( i , j )

)L i s t ( ( 2 , 1 ) , ( 3 , 1 ) , ( 3 , 2 ) , ( 4 , 1 ) , ( 4 , 2 ) , ( 4 , 3 ) )

Page 71: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FILTRADO DE LISTASFILTER

> L i s t (1 , 2 , 3 , 4 , 5) f i l t e r ( _ % 2 == 0)L i s t (2 , 4)

Page 72: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FILTRADO DE LISTASFIND

> L i s t (1 , 2 , 3 , 4 , 5) f i n d ( _ % 2 == 0)Some( 2 )

> L i s t (1 , 2 , 3 , 4 , 5) f i n d ( _ <= 0)None

Page 73: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FILTRADO DE LISTASTAKEWHILE

> L i s t (1 , 2 , 3 , −4, 5) takeWhile ( _ > 0)L i s t (1 , 2 , 3)

Page 74: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FILTRADO DE LISTASDROPWHILE

> val words = L i s t ( " the " , " qu ick " , " brown " , " fo> words dropWhile ( _ s t a r t sW i t h " t " )L i s t ( quick , brown , fox )

Page 75: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FILTRADO DE LISTASFORALL / EXISTS

val d3 : L i s t [ L i s t [ I n t ] ] =L i s t (

L i s t (1 , 0 , 0 ) ,L i s t (0 , 1 , 0 ) ,L i s t (0 , 0 , 1)

)def t i eneF i l aCe ro (m: L i s t [ L i s t [ I n t ] ] ) =

m e x i s t s ( row => row f o r a l l ( _ == 0 ) )

> t i eneF i l aCe ro ( d3 )fa lse

Page 76: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FOLDING

def sum( xs : L i s t [ I n t ] ) : I n t = (0 / : xs ) ( _ + _ )def product ( xs : L i s t [ I n t ] ) : I n t = (1 / : xs ) ( _

> ( " " / : words ) ( _ +" " + _ )the qu ick brown fox

Page 77: Programación Multiparadigma, conveniencia y actualidad

FIMAT XXI

ProgramaciónFunciona-

l/OO

Actualidadde la PMP.NET

Softwaredistribuido yconcurrente

Aquí y allá...

TécnicastradicionalesProgramaciónOrientada a Objetos

Realidad dela industriadel softwareErrores de software

Crisis del Software

Paradigmas

Paradigmas deprogramación

ParadigmaFuncional

ProgramaciónFuncional

Ejemplo

Haskell

Definición de

FOLDING, EJEMPLOSORDENACIÓN

> L i s t (1 , −3, 4 , 2 , 6) so r t ( _ < _ )L i s t (−3 , 1 , 2 , 4 , 6)

> words so r t ( _ . leng th > _ . leng th )L i s t ( quick , brown , fox , the )