SlideShare una empresa de Scribd logo
Programación
Funcional.
Conceptos subyacentes a la programación
funcional, así como características que la
hacen un enfoque particular y novedoso de la
programación y que la convierten en una
opción frente al enfoque imperativo
convencional en el área del desarrollo de
software.
Un paradigma de programación indica un
método de realizar cómputos y la manera en
que se deben estructurar y organizar las tareas
que debe llevar a cabo un programa. Los
paradigmas fundamentales están asociados a
determinados modelos de cómputo. También
se asocian a un determinado estilo de
programación. Los lenguajes de programación
suelen implementar, a menudo de forma
parcial, varios paradigmas.
Introducción.
Introducción.
Un lenguaje de programación es un lenguaje
artificial diseñado para expresar cómputos que
pueden ser llevados a cabo por una máquina:
• Basado en un modelo de cómputo (que
puede o no coincidir con el de la máquina
en que se va a ejecutar.)
• Definido a un nivel de abstracción más
elevado (más cercano al programador.)
• Traducible a un código que pueda entender
el procesador: el código máquina.
Introducción.
Modos de traducción:
• Lenguaje compilado
• Lenguaje interpretado (Entorno interactivo)
• Lenguaje traducido a código intermedio:
(Java -> Bytecodes, .NET ->IDL)
Introducción.
Estrategias de traducción: Código compilado.
Introducción.
Estrategias de traducción: Código interpretado.
Introducción.
Estrategias de traducción: Código intermedio
(Pascal, Java, .NET.)
Introducción.
Generaciones de lenguajes de programación
con sus movimientos o paradigmas.
Introducción.
Introducción.
Introducción.
Introducción.
• CPLBCPL  B  C  C++ Java
• CPL (Combined Programming Language):
1960, basado en ALGOL 60.
• BCPL (Basic Combined Programming
Language ): Martin Richards, 1966.
• B: Ken Thompson y Dennis Ritchie,
reemplazado por C (1969).
Introducción.
• C: Bell Telephone Laboratories (1972)
por Dennis Ritchie para usarlo con
Unix
• Propósito general,
• Estructurado por bloques,
• Imperativo,
• Procedimientos
Introducción. C++:
Bjarne Stroustrup (1979) Bell Labs.
Mejora a C: “C con clases”. C++ in
1983.
Mejoras en adición de clases, funciones
virtuales, sobrecarga de operadores,
herencia múltiple, plantillas y manejo de
excepciones.
C++ ratificado como estándar en 1998
como ISO/IEC 14882:1998, 2003,
ISO/IEC 14882:2003.
Introducción.
Java
Sun Microsystems (1995)
Sintaxis deriva de C y C++.
Orientado a Objetos.
Compilado a bytecode. Ejecutado
sobre cualquier Java virtual machine
(JVM). Sobre cualquier arquitectura.
Sun desarrolla e implementa
compiladores, máquinas virtuales y
librería de clases.
Introducción.A-0
FORTRAN
Mark I
Autocode
FLOW-MATIC General Problem
SolverFORTRAN II
FORTRAN IV
ALGOL/
ALGOL58
ALGOL60
JOSS
FORTRAN 66
ALGOL68
FORTRAN 77
PL/1
PL/C
FACT
COMTRA
N
COBOL
SNOBOL
BASIC
SNOBOL 4 MUMPS COWSEL
POP-1
POP-2
PILOT
INTERCAL
ML
Prolo
g
MercuryBourn
e
Shell
DBase
DBase-
II
DBase-III
DBase-IV
dBase
5.0
VULCAN
BETA
Occa
m
Occam
2
Clippe
r
Foxpro
PARADOX
COMAL
GRASS
Altair
BASIC
Gambas
VisualBasi
c
VB Script
Ada
95
Pascal
Concurrent
Pascal
Ada
Turbo
Pascal
Green
Ada
83ICON
MODUL
A
MODULA-2
FORTRAN
90
MODULA-3
Oberon
Oberon2
TurboPascal
OOP
Borland
Pascal
ComponentPascal
Delphi
ELAN
APL
CPL
BCPL
B
B BPL
C
D
Unix-
Shell
sh
csh
ksh
bash
awk
Ratfor
nawk
gawkPer
l
REX
X
PHP
PHP/F
1
Perl 5
Tcl
J FL K
NGLS2
Coyot
e
Smalltalk-80
Smalltalk-72
Objective C
C++
ANSI C
ISO C90
Miranda
Haskell
MetaHaskel
l
ISO C95
ISO C99
C#
Nemerle
ECMAScript
JavaScript
LiveScript
Java Self
Pike
FP
LPC
Joy
Factor
Simul
a OOP
PostScript
SIMULA
Simula-67
Forth
Schem
e
LISP
Logo
Common LispTRAC
Introducción.
Los paradigmas fundamentales están basados
en diferentes modelos de cómputo y por lo
tanto afectan las construcciones más básicas
de un programa.
La división principal reside en el enfoque
imperativo (indicar el cómo se debe calcular) y
el enfoque declarativo (indicar el qué se debe
calcular).
El enfoque declarativo tiene varias ramas: el
paradigma funcional, el paradigma lógico, la
programación reactiva y los lenguajes
descriptivos.
Introducción.
• Describe la programación como una
secuencia instrucciones o comandos que
cambian el estado de un programa.
• El código máquina en general está basado
en el paradigma imperativo.
• Su contrario es el paradigma declarativo e
incluye el paradigma procedimental
(procedural) entre otros.
Introducción: Modelo Imperativo
Paradigma orientado a objetos.
La idea es encapsular estado y operaciones
en objetos. En general, POO se resuelve
comunicando objetos a través de mensajes
(programación orientada a mensajes.) Dentro
de este paradigma, no formalmente, se
incluye el basado en objetos, que además
posee herencia y subtipos entre objetos.
(Simula, Smalltalk, C++, Java, Visual Basic
.NET, etc.) Su ventaja es la reutilización de
códigos y su facilidad para pensar soluciones
a determinados problemas.
• No se basa en el cómo se hace algo (cómo
se logra un objetivo paso a paso), sino que
describe (declara) cómo es algo.
• Es decir, describe las propiedades de la
solución buscada, dejando indeterminado el
algoritmo (conjunto de instrucciones) usado
para encontrar esa solución.
• Es más complicado de implementar que el
paradigma imperativo, tiene desventajas en
la eficiencia, pero ventajas en la solución
de determinados problemas.
Introducción: Modelo Declarativo
• Usa bloques de construcción como las
funciones, la recursión o la equipación de
patrones, para especificar más la solución
que su cálculo de bajo nivel.
• Tipos:
• Lenguajes funcionales.
• Lenguajes lógicos.
Introducción: Programación Declarativa
Introducción.
El estilo de programación imperativa (es decir,
la programación a través de acciones que
modifican el estado del computador) ha
dominado el panorama de la programación
desde sus inicios, por que los lenguajes
imperativos son más cercanos a la forma como
realmente funciona la máquina. Existen otros
paradigmas de programación diferentes al
imperativo como la programación funcional y la
programación lógica. La programación
funcional, es casi tan antigua como la
imperativa.
Introducción.
La programación funcional es una importante
opción para el desarrollo de software ya que
facilita la reusabilidad, la modularidad, la
mantenibilidad y la corrección.
Introducción.
Modelos de cómputo.
Modelos de cómputo.
El concepto de cómputo puede modelarse por
el concepto matemático de función:
“Aplicación de un dominio de valores a un
rango de resultados donde cada valor puede
estar asociado como máximo a un resultado”
Modelos formales son:
• Funciones parciales recursivas.
• Cálculo lambda / Lógica combinatoria.
• Lógica de predicados + unificación.
• Sistemas de reescritura.
Paradigma lógico.
Se basa en la definición de reglas lógicas
para luego, a través de un motor de
inferencias lógicas, responder preguntas
planteadas al sistema y así resolver los
problemas. Ejemplo: Prolog.
“La programación funcional es un
paradigma de programación declarativa
basado en el uso de funciones puras, sin
efectos secundarios.”
¿Qué es la programación
funcional?
Programacion Funcional
¿Qué es la programación
funcional?
En términos simples…
Utilizar funciones que lo único que hacen es
procesar los datos de entrada y retornar el
resultado.
Siempre que la entrada sea la misma, el
resultado también lo será.
“Es el estilo de programación que enfatiza la
evaluación de expresiones, antes que la
ejecución de comandos.”
¿Qué es la programación
funcional?
Una programa funcional está constituido
enteramente por funciones; el programa
principal es una función que toma como
argumento la entrada al programa y genera la
salida del programa como su resultado.
¿Qué es la programación
funcional?
Típicamente, la función principal se define en
términos de otras funciones, y éstas, a su vez,
en término de más funciones; esta cadena
finaliza en funciones predefinidas o primitivas.
La principal diferencia es que los únicos
elementos constructores son la definición y la
aplicación de funciones, pero en los
programas imperativos se utilizan, además,
variables, asignaciones ciclos, etc.
¿Qué es la programación
funcional?
Parece muy restrictivo no poder utilizar
variables, ni asignaciones, ni ciclos; sin
embargo se ha demostrado matemáticamente
que la definición y la aplicación de funciones
es suficiente para construir cualquier función
computable.
Programacion Funcional
Programación Funcional
• Usa funciones libres de efectos secundarios
como bloques primitivos de construcción de
programas.
• Estas funciones pueden aplicarse,
construirse y pasarse como argumento a
otras funciones.
• Concibe a la computación como la
evaluación de funciones matemáticas y
evita declarar y cambiar datos.
Programación Funcional
• Hace hincapié en la aplicación de las
funciones y composición entre ellas, más
que en los cambios de estados y la
ejecución secuencial de comandos (como
lo hace el paradigma procedimental.)
• Permite resolver ciertos problemas de
forma elegante y los lenguajes puramente
funcionales evitan los efectos secundarios
comunes en otro tipo de programaciones.
¿Cuál es el poder de la P.F?
Depende de varias características que poseen
los lenguajes funcionales; entre ellas: el
manejo de funciones de alto orden, la
declaración de tipos algebraicos, la inferencia
de tipos, el emparejamiento de patrones y el
manejo automático de la memoria dinámica.
Funciones de alto orden.
“Alto orden" se refiere a funciones que reciben
como argumento o retoman funciones, es
decir, las funciones pueden manipulase como
datos; esta característica también es referida
como "funciones como objetos de primera
clase."
Potencial de los lenguajes
funcionales.
Transparencia referencial: Propiedad de los
lenguajes funcionales que hace que la misma
expresión siempre represente el mismo valor;
esto permite probar matemáticamente la
corrección de un programa.
Potencial de los lenguajes
funcionales.
Fundamentación matemática: El cálculo
Lambda, la lógica combinatoria, las teorías de
tipos, los sistemas de reescritura, la teoría de
dominios y la teoría de categorías son algunas
de las áreas de la matemática que la
fundamentan.
Potencial de los lenguajes
funcionales.
Eficiencia de compiladores e intérpretes: Los
avances investigativos han permitido la
construcción de compiladores que generan
código nativo que iguala en eficiencia el
código generado por compiladores
convencionales.
Potencial de los lenguajes
funcionales.
Paralelismo Implícito: El hecho que los
lenguajes funcionales (puros) no permitan
efectos laterales ni el uso de variables
globales, hace que la evaluación de diferentes
expresiones constituyan procesos
independientes y que pueden ser ejecutados
de manera simultánea.
Potencial de los lenguajes
funcionales.
Paralelismo Implícito: Esta característica
puede ser explotada para programar
computadores paralelos de manera natural
algo que no se ha logrado de manera
satisfactoria a través de la programación
convencional.
Programación Lógica.
• Basada en la lógica de predicados de primer
orden.
• Los programas se componen de hechos,
predicados y relaciones.
• Evaluación basada en resolución:
Unificación + backtracking.
• La ejecución consiste en la resolución de un
problema de decisión, los resultados se
obtienen mediante la instanciación de las
variables libres.
• Lenguaje representativo: PROLOG
Aprendiendo a Programar en
… con mi computadora y todo lo que
encuentre disponible.
Para tener una idea de la creciente comunidad
que usa Python, puede visitar y explorar
https://www.python.org/community
Programar es el arte de hacer que cualquier
dispositivo inteligente ejecute las instrucciones
que se les suministra en un idioma que el
dispositivo pueda entender y que el dispositivo
interpreta literalmente.
Cada lenguaje de programación posee una
forma propia que le permite al programador
darle instrucciones básicas a ese dispositivo
inteligente.
Python posee una simplicidad intuitiva tal, que
con unas pocas líneas de instrucción podemos
ejecutar actividades complejas que en otro
lenguaje requerirían muchas más líneas de
código o mayor número de instrucciones.
Lenguajes de programación con tal facilidad se
denominan de alto nivel.
Introducción.
Python no es un lenguaje funcional puro, sin
embargo incorpora esta característica.
Entiende el concepto de función según su
definición matemática y no como simples
subprogramas de los lenguajes imperativos.
Introducción.
Python fue diseñado a finales de la década de
los ochenta por Guido van Rossum. Un
lenguaje de programación de muy alto nivel,
con una sintaxis muy clara y una apuesta firme
por la legibilidad del código. Sin duda muy
versátil, fuertemente tipado, imperativo y
orientado a objetos, aunque contiene también
características que lo convierten en un
lenguaje de paradigma funcional.
Introducción.
Python se puede considerar un lenguaje semi-
interpretado. A diferencia de C, su código no se
ejecuta directamente en la máquina destino,
sino que es ejecutado por un SW intermedio (o
intérprete). Sin embargo, al igual que JAVA,
compila el código escrito en lenguaje de alto
nivel para obtener un seudo código máquina
(bytecode) que es el que propiamente ejecuta
el intérprete.
Introducción.
Obteniendo, instalando y
probando la
infraestructura computacional
necesaria para
Programar.
Para instalar una determinada versión se
aconseja recurrir a su sitioweb oficial.
python.org/downloads/release/python-
Programacion Funcional
Programacion Funcional
Programacion Funcional
Programacion Funcional
Programacion Funcional
Programacion Funcional
Programacion Funcional
Programacion Funcional
Obtenido el paquete
para el SO y versión
adecuados, en una
línea de comandos se
ejecuta el intérprete de
Python, y se prueba que
todo funciona
correctamente mediante
el clásico:
>>> print "Hola mundo"
Hola mundo
>>> quit()
>>>
Al iniciarse, después de imprimir la información
de versiones, Python muestra el símbolo “>>>”
para indicar que el intérprete está esperando
comandos. En este ejemplo pedimos que
imprima la cadena de caracteres “Hola
mundo”, y después de ver el resultado, se sale
de Python mediante la instrucción quit()
Por tanto puede considerar que tiene la
instalación básica de Python lista para su uso.
Pruebas y configuraciones.
Los tipos básicos de este lenguaje son
esencialmente los ya conocidos en cualquier
lenguaje de programación: los valores
numéricos, las cadenas de texto y los valores
booleanos.
Variables.
>>> # Ejemplos de variables
>>> a =42; # valor entero
>>> along = 42L ;
>>> ahex = 0x2a ;
>>> aoctal = 052;
>>> b = 3.1416; # valor en coma flotante
>>> bnotacion = 3.14e0 ;
>>> c = " Ejemplo de cadena de caracteres "
#Una cadena de caracteres
>>> #Imprimir las variables por pantalla
>>> print a , b , c;
42 3.1416 Ejemplo de cadena de caracteres
Variables.
>>> # tipo de las variables
>>> type (a) ;
<type 'int'>
>>> type (b) ;
<type 'float'>
>>> type (c) ;
<type 'str'>
>>>
Variables.
Los números enteros se pueden representar
en notación decimal, octal (anteponiendo un
“0” al valor) o hexadecimal (anteponiendo “0x”
al valor). Al igual que en lenguaje C (en el que
está escrito Python), los números se pueden
representar mediante enteros (por defecto) o
long (entero largo), que permite un rango
mayor de valores posibles. Este rango, de
nuevo como en C, dependerá de la plataforma
subyacente, pudiendo ser de 32 o 64 bits.
Variables.
Los valores flotantes son implementados a
bajo nivel directamente con el tipo double de C
(registro de 64 bits). Por su parte, los números
complejos están soportados de base y en la
práctica se implementan mediante dos
flotantes, uno para la parte real y otro para la
parte imaginaria.
Variables.
Python tiene de extensiones para más
operaciones en el módulo math. El valor de
retorno de un operador es determinado por el
tipo de las variables que intervienen en la
operación.
Operadores.Operadores.
Sí, por ejemplo, sumara dos números enteros,
nos devolverá otro valor entero. Si uno de los
dos operandos está en punto flotante, el
resultado de la operación será un valor en
punto flotante. El tipo básico booleano puede
recibir true or false, y se utilizan
fundamentalmente para expresar el resultado
de condiciones, especialmente útiles en los
bucles y control de flujo condicional.
Operadores.
Operadores.
Son fragmentos de texto delimitados por
comillas simples (’Un ejemplo’) o dobles (“Otro
ejemplo”). Para introducir saltos de línea,
dispone del carácter de escape ’ n’. También
puede usar otros caracteres de escape como
’t’ (tabulación) o ’b’ (borrar carácter). Para
conseguir que el texto se imprima tal y como
aparece en el código fuente sin tener que
recurrir a los códigos de escape, puede
delimitarlo por triples comillas.
Cadenas de caracteres.
# Ejemplos de cadenas
a = "holan"
b = "t Este es un ejemppblo de cadenas de
caracteresn"
c = """Es posible escribir saltos de linea
sin necesidad de códigos de escape. """
print a, b, c
Cadenas de caracteres.
Cadenas de caracteres.
Algunos operadores usados con valores
numéricos se encuentran sobrecargados en el
caso de las cadenas de caracteres. Ejemplo,
la igualdad (que asigna una cadena a una
variable) y el operador suma “+”. La suma de
dos cadenas es el resultado de concatenar la
segunda detrás de la primera. Del mismo
modo, el producto de una cadena por un
escalar da por resultado la misma cadena
repetida tantas veces como indique el
operador numérico.
Cadenas de caracteres.
Una función muy útil es str, que permite
realizar la conversión de valores numéricos a
cadena de caracteres. Si teclea str(8.987) en
la línea de comandos, obtendrá la salida
’8.987’:
>>> str(8.987)
'8.987'
>>>
Cadenas de caracteres.

Más contenido relacionado

PPT
Fundamentos de la arquitectura de software
PPT
Modelos de dominio
PPTX
macros Lenguaje ensamblador
PPTX
Estrategias de aplicaciones para las pruebas de integración
PPTX
Herramientas case full informacion
PDF
Arboles de derivacion
PPTX
MODELO DE PROCESOS DEL SOFTWARE
PPTX
Uml lenguaje unificado de modelado
Fundamentos de la arquitectura de software
Modelos de dominio
macros Lenguaje ensamblador
Estrategias de aplicaciones para las pruebas de integración
Herramientas case full informacion
Arboles de derivacion
MODELO DE PROCESOS DEL SOFTWARE
Uml lenguaje unificado de modelado

La actualidad más candente (20)

PPT
Arquitectura 3 Capas
PDF
Resolucion De Problemas Con Computadora
PPTX
Unidad 1_Programacion Orientada a Objetos
PPT
Ejercicios
PPT
Grupo 5-modelos-de-procesos-de-software
DOCX
Qué es uml, PARA QUE SIRVE, PASOS
PPTX
Modelo de proceso especializado
PPTX
Paradigmas de programación
PDF
Modelo de desarrollo de software
PPT
Código intermedio
PPTX
LINEAS DE PRODUCTOS DE SOFTWARE Y MÉTODO WATCH
PPTX
4.2 espacios de estados determinísticos y espacios no determinísticos.
PPTX
Programación Orientada a Objetos - atributos y métodos
PPT
Unidad 1.3 Analisis De Requerimientos
PDF
DOCX
Ingeniería de requisitos
PDF
11 Curso de POO en java - métodos constructores y toString()
PDF
automatas finitos
PDF
Requerimientos no funcionales
Arquitectura 3 Capas
Resolucion De Problemas Con Computadora
Unidad 1_Programacion Orientada a Objetos
Ejercicios
Grupo 5-modelos-de-procesos-de-software
Qué es uml, PARA QUE SIRVE, PASOS
Modelo de proceso especializado
Paradigmas de programación
Modelo de desarrollo de software
Código intermedio
LINEAS DE PRODUCTOS DE SOFTWARE Y MÉTODO WATCH
4.2 espacios de estados determinísticos y espacios no determinísticos.
Programación Orientada a Objetos - atributos y métodos
Unidad 1.3 Analisis De Requerimientos
Ingeniería de requisitos
11 Curso de POO en java - métodos constructores y toString()
automatas finitos
Requerimientos no funcionales
Publicidad

Similar a Programacion Funcional (20)

PDF
ParadigmasFP.pdf_CarlosOrtiz_Univercidad
DOC
Lenguajes De ProgramacióN
PDF
Objetos: 1. paradigmas de programación
PPTX
Paradigmas de programacion de computadoras FP.pptx
PPT
Programacion Orientada Objetos
PPT
sistema operativo
PDF
Object Oriented Programming vs Functional Programming - Valencia.rb
PPTX
Estructura de un programa
PPT
PARADIGMA FUNCIONAL
PDF
Paradigmas de la programación
PPT
Lenguajesprog
PPT
1 eda teo
PPTX
Unidad 1
PDF
PPT
Leng progr 01
PPTX
Consideraciones pragmatica
PPTX
lenguaje y herramientas
DOCX
Paradigmasdeprogramacion
PPTX
3 paradigmas
ParadigmasFP.pdf_CarlosOrtiz_Univercidad
Lenguajes De ProgramacióN
Objetos: 1. paradigmas de programación
Paradigmas de programacion de computadoras FP.pptx
Programacion Orientada Objetos
sistema operativo
Object Oriented Programming vs Functional Programming - Valencia.rb
Estructura de un programa
PARADIGMA FUNCIONAL
Paradigmas de la programación
Lenguajesprog
1 eda teo
Unidad 1
Leng progr 01
Consideraciones pragmatica
lenguaje y herramientas
Paradigmasdeprogramacion
3 paradigmas
Publicidad

Más de Facultad de Ciencias y Sistemas (20)

PDF
PDF
09 ordenamiento-en-vectores-en-c
PDF
08 mas-de-vectores-en-c
PDF
07 vectores-en-c final
PDF
05 cadenas-de-caracteres-en-c
PDF
04 mas-estructuras-iterativas-en-c
PDF
03 estructuras-iterativas-en-c
PDF
02 mas-de-las-estructuras-de-programacion-en-c
PDF
01 estructuras-de-programacion-en-c
PDF
Procesamiento del lenguaje natural con python
PPTX
Actividades de aprendizaje en Moodle
PPTX
Creación de grupos en Moodle
PPTX
Introducción a la progrogramación orientada a objetos con Java
PPTX
Como crear un diagrama de clases
PDF
Diagrama de clases - Ejemplo monográfico 02
PDF
Diagrama de clases - Ejemplo monográfico 01
PPTX
Otro ejemplo de diagrama de clases UML
PPTX
Un ejemplo de diagrama de clases
09 ordenamiento-en-vectores-en-c
08 mas-de-vectores-en-c
07 vectores-en-c final
05 cadenas-de-caracteres-en-c
04 mas-estructuras-iterativas-en-c
03 estructuras-iterativas-en-c
02 mas-de-las-estructuras-de-programacion-en-c
01 estructuras-de-programacion-en-c
Procesamiento del lenguaje natural con python
Actividades de aprendizaje en Moodle
Creación de grupos en Moodle
Introducción a la progrogramación orientada a objetos con Java
Como crear un diagrama de clases
Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 01
Otro ejemplo de diagrama de clases UML
Un ejemplo de diagrama de clases

Último (20)

PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Punto Critico - Brian Tracy Ccesa007.pdf
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
DI, TEA, TDAH.pdf guía se secuencias didacticas
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PPT
Cosacos y hombres del Este en el Heer.ppt
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
Lección 6 Escuela Sab. A través del mar rojo.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Punto Critico - Brian Tracy Ccesa007.pdf
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
Tomo 1 de biologia gratis ultra plusenmas
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
2 GRADO UNIDAD 5 - 2025.docx para primaria
DI, TEA, TDAH.pdf guía se secuencias didacticas
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Cosacos y hombres del Este en el Heer.ppt
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
Escuela Sabática 6. A través del Mar Rojo.pdf
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
Lección 6 Escuela Sab. A través del mar rojo.pdf

Programacion Funcional

  • 2. Conceptos subyacentes a la programación funcional, así como características que la hacen un enfoque particular y novedoso de la programación y que la convierten en una opción frente al enfoque imperativo convencional en el área del desarrollo de software.
  • 3. Un paradigma de programación indica un método de realizar cómputos y la manera en que se deben estructurar y organizar las tareas que debe llevar a cabo un programa. Los paradigmas fundamentales están asociados a determinados modelos de cómputo. También se asocian a un determinado estilo de programación. Los lenguajes de programación suelen implementar, a menudo de forma parcial, varios paradigmas. Introducción.
  • 4. Introducción. Un lenguaje de programación es un lenguaje artificial diseñado para expresar cómputos que pueden ser llevados a cabo por una máquina: • Basado en un modelo de cómputo (que puede o no coincidir con el de la máquina en que se va a ejecutar.) • Definido a un nivel de abstracción más elevado (más cercano al programador.) • Traducible a un código que pueda entender el procesador: el código máquina.
  • 5. Introducción. Modos de traducción: • Lenguaje compilado • Lenguaje interpretado (Entorno interactivo) • Lenguaje traducido a código intermedio: (Java -> Bytecodes, .NET ->IDL)
  • 8. Introducción. Estrategias de traducción: Código intermedio (Pascal, Java, .NET.)
  • 9. Introducción. Generaciones de lenguajes de programación con sus movimientos o paradigmas.
  • 13. Introducción. • CPLBCPL  B  C  C++ Java • CPL (Combined Programming Language): 1960, basado en ALGOL 60. • BCPL (Basic Combined Programming Language ): Martin Richards, 1966. • B: Ken Thompson y Dennis Ritchie, reemplazado por C (1969).
  • 14. Introducción. • C: Bell Telephone Laboratories (1972) por Dennis Ritchie para usarlo con Unix • Propósito general, • Estructurado por bloques, • Imperativo, • Procedimientos
  • 15. Introducción. C++: Bjarne Stroustrup (1979) Bell Labs. Mejora a C: “C con clases”. C++ in 1983. Mejoras en adición de clases, funciones virtuales, sobrecarga de operadores, herencia múltiple, plantillas y manejo de excepciones. C++ ratificado como estándar en 1998 como ISO/IEC 14882:1998, 2003, ISO/IEC 14882:2003.
  • 16. Introducción. Java Sun Microsystems (1995) Sintaxis deriva de C y C++. Orientado a Objetos. Compilado a bytecode. Ejecutado sobre cualquier Java virtual machine (JVM). Sobre cualquier arquitectura. Sun desarrolla e implementa compiladores, máquinas virtuales y librería de clases.
  • 17. Introducción.A-0 FORTRAN Mark I Autocode FLOW-MATIC General Problem SolverFORTRAN II FORTRAN IV ALGOL/ ALGOL58 ALGOL60 JOSS FORTRAN 66 ALGOL68 FORTRAN 77 PL/1 PL/C FACT COMTRA N COBOL SNOBOL BASIC SNOBOL 4 MUMPS COWSEL POP-1 POP-2 PILOT INTERCAL ML Prolo g MercuryBourn e Shell DBase DBase- II DBase-III DBase-IV dBase 5.0 VULCAN BETA Occa m Occam 2 Clippe r Foxpro PARADOX COMAL GRASS Altair BASIC Gambas VisualBasi c VB Script Ada 95 Pascal Concurrent Pascal Ada Turbo Pascal Green Ada 83ICON MODUL A MODULA-2 FORTRAN 90 MODULA-3 Oberon Oberon2 TurboPascal OOP Borland Pascal ComponentPascal Delphi ELAN APL CPL BCPL B B BPL C D Unix- Shell sh csh ksh bash awk Ratfor nawk gawkPer l REX X PHP PHP/F 1 Perl 5 Tcl J FL K NGLS2 Coyot e Smalltalk-80 Smalltalk-72 Objective C C++ ANSI C ISO C90 Miranda Haskell MetaHaskel l ISO C95 ISO C99 C# Nemerle ECMAScript JavaScript LiveScript Java Self Pike FP LPC Joy Factor Simul a OOP PostScript SIMULA Simula-67 Forth Schem e LISP Logo Common LispTRAC
  • 19. Los paradigmas fundamentales están basados en diferentes modelos de cómputo y por lo tanto afectan las construcciones más básicas de un programa. La división principal reside en el enfoque imperativo (indicar el cómo se debe calcular) y el enfoque declarativo (indicar el qué se debe calcular). El enfoque declarativo tiene varias ramas: el paradigma funcional, el paradigma lógico, la programación reactiva y los lenguajes descriptivos. Introducción.
  • 20. • Describe la programación como una secuencia instrucciones o comandos que cambian el estado de un programa. • El código máquina en general está basado en el paradigma imperativo. • Su contrario es el paradigma declarativo e incluye el paradigma procedimental (procedural) entre otros. Introducción: Modelo Imperativo
  • 21. Paradigma orientado a objetos. La idea es encapsular estado y operaciones en objetos. En general, POO se resuelve comunicando objetos a través de mensajes (programación orientada a mensajes.) Dentro de este paradigma, no formalmente, se incluye el basado en objetos, que además posee herencia y subtipos entre objetos. (Simula, Smalltalk, C++, Java, Visual Basic .NET, etc.) Su ventaja es la reutilización de códigos y su facilidad para pensar soluciones a determinados problemas.
  • 22. • No se basa en el cómo se hace algo (cómo se logra un objetivo paso a paso), sino que describe (declara) cómo es algo. • Es decir, describe las propiedades de la solución buscada, dejando indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa solución. • Es más complicado de implementar que el paradigma imperativo, tiene desventajas en la eficiencia, pero ventajas en la solución de determinados problemas. Introducción: Modelo Declarativo
  • 23. • Usa bloques de construcción como las funciones, la recursión o la equipación de patrones, para especificar más la solución que su cálculo de bajo nivel. • Tipos: • Lenguajes funcionales. • Lenguajes lógicos. Introducción: Programación Declarativa
  • 25. El estilo de programación imperativa (es decir, la programación a través de acciones que modifican el estado del computador) ha dominado el panorama de la programación desde sus inicios, por que los lenguajes imperativos son más cercanos a la forma como realmente funciona la máquina. Existen otros paradigmas de programación diferentes al imperativo como la programación funcional y la programación lógica. La programación funcional, es casi tan antigua como la imperativa. Introducción.
  • 26. La programación funcional es una importante opción para el desarrollo de software ya que facilita la reusabilidad, la modularidad, la mantenibilidad y la corrección. Introducción.
  • 28. Modelos de cómputo. El concepto de cómputo puede modelarse por el concepto matemático de función: “Aplicación de un dominio de valores a un rango de resultados donde cada valor puede estar asociado como máximo a un resultado” Modelos formales son: • Funciones parciales recursivas. • Cálculo lambda / Lógica combinatoria. • Lógica de predicados + unificación. • Sistemas de reescritura.
  • 29. Paradigma lógico. Se basa en la definición de reglas lógicas para luego, a través de un motor de inferencias lógicas, responder preguntas planteadas al sistema y así resolver los problemas. Ejemplo: Prolog.
  • 30. “La programación funcional es un paradigma de programación declarativa basado en el uso de funciones puras, sin efectos secundarios.” ¿Qué es la programación funcional?
  • 32. ¿Qué es la programación funcional? En términos simples… Utilizar funciones que lo único que hacen es procesar los datos de entrada y retornar el resultado. Siempre que la entrada sea la misma, el resultado también lo será.
  • 33. “Es el estilo de programación que enfatiza la evaluación de expresiones, antes que la ejecución de comandos.” ¿Qué es la programación funcional? Una programa funcional está constituido enteramente por funciones; el programa principal es una función que toma como argumento la entrada al programa y genera la salida del programa como su resultado.
  • 34. ¿Qué es la programación funcional? Típicamente, la función principal se define en términos de otras funciones, y éstas, a su vez, en término de más funciones; esta cadena finaliza en funciones predefinidas o primitivas. La principal diferencia es que los únicos elementos constructores son la definición y la aplicación de funciones, pero en los programas imperativos se utilizan, además, variables, asignaciones ciclos, etc.
  • 35. ¿Qué es la programación funcional? Parece muy restrictivo no poder utilizar variables, ni asignaciones, ni ciclos; sin embargo se ha demostrado matemáticamente que la definición y la aplicación de funciones es suficiente para construir cualquier función computable.
  • 37. Programación Funcional • Usa funciones libres de efectos secundarios como bloques primitivos de construcción de programas. • Estas funciones pueden aplicarse, construirse y pasarse como argumento a otras funciones. • Concibe a la computación como la evaluación de funciones matemáticas y evita declarar y cambiar datos.
  • 38. Programación Funcional • Hace hincapié en la aplicación de las funciones y composición entre ellas, más que en los cambios de estados y la ejecución secuencial de comandos (como lo hace el paradigma procedimental.) • Permite resolver ciertos problemas de forma elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes en otro tipo de programaciones.
  • 39. ¿Cuál es el poder de la P.F? Depende de varias características que poseen los lenguajes funcionales; entre ellas: el manejo de funciones de alto orden, la declaración de tipos algebraicos, la inferencia de tipos, el emparejamiento de patrones y el manejo automático de la memoria dinámica.
  • 40. Funciones de alto orden. “Alto orden" se refiere a funciones que reciben como argumento o retoman funciones, es decir, las funciones pueden manipulase como datos; esta característica también es referida como "funciones como objetos de primera clase."
  • 41. Potencial de los lenguajes funcionales. Transparencia referencial: Propiedad de los lenguajes funcionales que hace que la misma expresión siempre represente el mismo valor; esto permite probar matemáticamente la corrección de un programa.
  • 42. Potencial de los lenguajes funcionales. Fundamentación matemática: El cálculo Lambda, la lógica combinatoria, las teorías de tipos, los sistemas de reescritura, la teoría de dominios y la teoría de categorías son algunas de las áreas de la matemática que la fundamentan.
  • 43. Potencial de los lenguajes funcionales. Eficiencia de compiladores e intérpretes: Los avances investigativos han permitido la construcción de compiladores que generan código nativo que iguala en eficiencia el código generado por compiladores convencionales.
  • 44. Potencial de los lenguajes funcionales. Paralelismo Implícito: El hecho que los lenguajes funcionales (puros) no permitan efectos laterales ni el uso de variables globales, hace que la evaluación de diferentes expresiones constituyan procesos independientes y que pueden ser ejecutados de manera simultánea.
  • 45. Potencial de los lenguajes funcionales. Paralelismo Implícito: Esta característica puede ser explotada para programar computadores paralelos de manera natural algo que no se ha logrado de manera satisfactoria a través de la programación convencional.
  • 46. Programación Lógica. • Basada en la lógica de predicados de primer orden. • Los programas se componen de hechos, predicados y relaciones. • Evaluación basada en resolución: Unificación + backtracking. • La ejecución consiste en la resolución de un problema de decisión, los resultados se obtienen mediante la instanciación de las variables libres. • Lenguaje representativo: PROLOG
  • 47. Aprendiendo a Programar en … con mi computadora y todo lo que encuentre disponible.
  • 48. Para tener una idea de la creciente comunidad que usa Python, puede visitar y explorar https://www.python.org/community
  • 49. Programar es el arte de hacer que cualquier dispositivo inteligente ejecute las instrucciones que se les suministra en un idioma que el dispositivo pueda entender y que el dispositivo interpreta literalmente. Cada lenguaje de programación posee una forma propia que le permite al programador darle instrucciones básicas a ese dispositivo inteligente.
  • 50. Python posee una simplicidad intuitiva tal, que con unas pocas líneas de instrucción podemos ejecutar actividades complejas que en otro lenguaje requerirían muchas más líneas de código o mayor número de instrucciones. Lenguajes de programación con tal facilidad se denominan de alto nivel. Introducción.
  • 51. Python no es un lenguaje funcional puro, sin embargo incorpora esta característica. Entiende el concepto de función según su definición matemática y no como simples subprogramas de los lenguajes imperativos. Introducción.
  • 52. Python fue diseñado a finales de la década de los ochenta por Guido van Rossum. Un lenguaje de programación de muy alto nivel, con una sintaxis muy clara y una apuesta firme por la legibilidad del código. Sin duda muy versátil, fuertemente tipado, imperativo y orientado a objetos, aunque contiene también características que lo convierten en un lenguaje de paradigma funcional. Introducción.
  • 53. Python se puede considerar un lenguaje semi- interpretado. A diferencia de C, su código no se ejecuta directamente en la máquina destino, sino que es ejecutado por un SW intermedio (o intérprete). Sin embargo, al igual que JAVA, compila el código escrito en lenguaje de alto nivel para obtener un seudo código máquina (bytecode) que es el que propiamente ejecuta el intérprete. Introducción.
  • 54. Obteniendo, instalando y probando la infraestructura computacional necesaria para Programar. Para instalar una determinada versión se aconseja recurrir a su sitioweb oficial. python.org/downloads/release/python-
  • 63. Obtenido el paquete para el SO y versión adecuados, en una línea de comandos se ejecuta el intérprete de Python, y se prueba que todo funciona correctamente mediante el clásico: >>> print "Hola mundo" Hola mundo >>> quit() >>>
  • 64. Al iniciarse, después de imprimir la información de versiones, Python muestra el símbolo “>>>” para indicar que el intérprete está esperando comandos. En este ejemplo pedimos que imprima la cadena de caracteres “Hola mundo”, y después de ver el resultado, se sale de Python mediante la instrucción quit() Por tanto puede considerar que tiene la instalación básica de Python lista para su uso. Pruebas y configuraciones.
  • 65. Los tipos básicos de este lenguaje son esencialmente los ya conocidos en cualquier lenguaje de programación: los valores numéricos, las cadenas de texto y los valores booleanos. Variables.
  • 66. >>> # Ejemplos de variables >>> a =42; # valor entero >>> along = 42L ; >>> ahex = 0x2a ; >>> aoctal = 052; >>> b = 3.1416; # valor en coma flotante >>> bnotacion = 3.14e0 ; >>> c = " Ejemplo de cadena de caracteres " #Una cadena de caracteres >>> #Imprimir las variables por pantalla >>> print a , b , c; 42 3.1416 Ejemplo de cadena de caracteres Variables.
  • 67. >>> # tipo de las variables >>> type (a) ; <type 'int'> >>> type (b) ; <type 'float'> >>> type (c) ; <type 'str'> >>> Variables.
  • 68. Los números enteros se pueden representar en notación decimal, octal (anteponiendo un “0” al valor) o hexadecimal (anteponiendo “0x” al valor). Al igual que en lenguaje C (en el que está escrito Python), los números se pueden representar mediante enteros (por defecto) o long (entero largo), que permite un rango mayor de valores posibles. Este rango, de nuevo como en C, dependerá de la plataforma subyacente, pudiendo ser de 32 o 64 bits. Variables.
  • 69. Los valores flotantes son implementados a bajo nivel directamente con el tipo double de C (registro de 64 bits). Por su parte, los números complejos están soportados de base y en la práctica se implementan mediante dos flotantes, uno para la parte real y otro para la parte imaginaria. Variables.
  • 70. Python tiene de extensiones para más operaciones en el módulo math. El valor de retorno de un operador es determinado por el tipo de las variables que intervienen en la operación. Operadores.Operadores.
  • 71. Sí, por ejemplo, sumara dos números enteros, nos devolverá otro valor entero. Si uno de los dos operandos está en punto flotante, el resultado de la operación será un valor en punto flotante. El tipo básico booleano puede recibir true or false, y se utilizan fundamentalmente para expresar el resultado de condiciones, especialmente útiles en los bucles y control de flujo condicional. Operadores.
  • 73. Son fragmentos de texto delimitados por comillas simples (’Un ejemplo’) o dobles (“Otro ejemplo”). Para introducir saltos de línea, dispone del carácter de escape ’ n’. También puede usar otros caracteres de escape como ’t’ (tabulación) o ’b’ (borrar carácter). Para conseguir que el texto se imprima tal y como aparece en el código fuente sin tener que recurrir a los códigos de escape, puede delimitarlo por triples comillas. Cadenas de caracteres.
  • 74. # Ejemplos de cadenas a = "holan" b = "t Este es un ejemppblo de cadenas de caracteresn" c = """Es posible escribir saltos de linea sin necesidad de códigos de escape. """ print a, b, c Cadenas de caracteres.
  • 76. Algunos operadores usados con valores numéricos se encuentran sobrecargados en el caso de las cadenas de caracteres. Ejemplo, la igualdad (que asigna una cadena a una variable) y el operador suma “+”. La suma de dos cadenas es el resultado de concatenar la segunda detrás de la primera. Del mismo modo, el producto de una cadena por un escalar da por resultado la misma cadena repetida tantas veces como indique el operador numérico. Cadenas de caracteres.
  • 77. Una función muy útil es str, que permite realizar la conversión de valores numéricos a cadena de caracteres. Si teclea str(8.987) en la línea de comandos, obtendrá la salida ’8.987’: >>> str(8.987) '8.987' >>> Cadenas de caracteres.