programación multiparadigma, conveniencia y actualidad
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/54.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/55.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/56.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/57.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/60.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/61.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/62.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/63.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/64.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/65.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/66.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/67.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/68.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/69.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/70.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/71.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/72.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/73.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/74.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/75.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/76.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022052223/557e7a81d8b42a7b5c8b571e/html5/thumbnails/77.jpg)
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 )