SlideShare una empresa de Scribd logo
1 de 77
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?
¿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.
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-
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

La actualidad más candente

Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 
Glosario de ing. de software
Glosario de ing. de softwareGlosario de ing. de software
Glosario de ing. de softwareGeorge Corona
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosJosé Antonio Sandoval Acosta
 
Calidad de software
Calidad de softwareCalidad de software
Calidad de softwareyecka25
 
Modelo incremental
Modelo incrementalModelo incremental
Modelo incrementalJose Caicedo
 
Alfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y ProblemasAlfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y ProblemasRaul
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensambladorCar_00_01
 
Unidad 2 clasificacion de arquitectura paralela
Unidad 2 clasificacion de arquitectura paralelaUnidad 2 clasificacion de arquitectura paralela
Unidad 2 clasificacion de arquitectura paralelaJhonny Real Schweinsteiger
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de softwareGuillermo Lemus
 
Gestión de riesgos de software
Gestión de riesgos de softwareGestión de riesgos de software
Gestión de riesgos de softwareOmar S. Gomez
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSxinithazangels
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEustakiu Padilla
 

La actualidad más candente (20)

Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
Glosario de ing. de software
Glosario de ing. de softwareGlosario de ing. de software
Glosario de ing. de software
 
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negociosFundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
Fundamentos de Ingenieria de Software - Unidad 1 modelo de negocios
 
Estándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de NegociosEstándares para el Modelado de Procesos de Negocios
Estándares para el Modelado de Procesos de Negocios
 
Transaccion
TransaccionTransaccion
Transaccion
 
Calidad de software
Calidad de softwareCalidad de software
Calidad de software
 
Clases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programaciónClases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programación
 
Semana 1 Patrones de Diseño
Semana 1   Patrones de DiseñoSemana 1   Patrones de Diseño
Semana 1 Patrones de Diseño
 
Modelo incremental
Modelo incrementalModelo incremental
Modelo incremental
 
Alfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y ProblemasAlfabeto, Cadenas, Lenguajes, y Problemas
Alfabeto, Cadenas, Lenguajes, y Problemas
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Unidad 2 clasificacion de arquitectura paralela
Unidad 2 clasificacion de arquitectura paralelaUnidad 2 clasificacion de arquitectura paralela
Unidad 2 clasificacion de arquitectura paralela
 
Tipos de pruebas de software
Tipos de pruebas de softwareTipos de pruebas de software
Tipos de pruebas de software
 
Gestión de riesgos de software
Gestión de riesgos de softwareGestión de riesgos de software
Gestión de riesgos de software
 
UNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓNUNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓN
 
Ciclo Vida del Software
Ciclo Vida del SoftwareCiclo Vida del Software
Ciclo Vida del Software
 
Ieee 830
Ieee 830Ieee 830
Ieee 830
 
Analisis Semantico
Analisis Semantico Analisis Semantico
Analisis Semantico
 
TAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOSTAREAS DE LA ING. DE REQUISITOS
TAREAS DE LA ING. DE REQUISITOS
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensamblador
 

Similar a Programacion Funcional

Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacionLuis Peralta
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmaticaJose Gallardo
 
Preguntas de diagnostico
Preguntas de diagnosticoPreguntas de diagnostico
Preguntas de diagnosticoJavierCR2017
 
Nicholas casañas castaño
Nicholas casañas castañoNicholas casañas castaño
Nicholas casañas castañonicholas_333
 
Teoria de los lenguajes de programacion
Teoria de los lenguajes de programacionTeoria de los lenguajes de programacion
Teoria de los lenguajes de programacionMario Bastidas
 
Presentacion info
Presentacion infoPresentacion info
Presentacion infomariopoza00
 
Paradigmas de programacion de computadoras FP.pptx
Paradigmas de programacion de computadoras FP.pptxParadigmas de programacion de computadoras FP.pptx
Paradigmas de programacion de computadoras FP.pptxsantiagojoseu4
 
12 programacion modular
12 programacion modular12 programacion modular
12 programacion modularShadai Black
 
12 programacion modular
12 programacion modular12 programacion modular
12 programacion modularLaura Cruz
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionBoris Salleg
 
Introducción, definiciones FdP (1).pptx
Introducción, definiciones FdP (1).pptxIntroducción, definiciones FdP (1).pptx
Introducción, definiciones FdP (1).pptxgASF1
 
Fp isc u1 conceptos basicos
Fp isc   u1 conceptos basicosFp isc   u1 conceptos basicos
Fp isc u1 conceptos basicosAntonio San
 

Similar a Programacion Funcional (20)

Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacion
 
Tema 1[1][1]
Tema 1[1][1]Tema 1[1][1]
Tema 1[1][1]
 
Programacion java
Programacion javaProgramacion java
Programacion java
 
Javaqert
JavaqertJavaqert
Javaqert
 
Javaqert
JavaqertJavaqert
Javaqert
 
Consideraciones pragmatica
Consideraciones pragmaticaConsideraciones pragmatica
Consideraciones pragmatica
 
Preguntas de diagnostico
Preguntas de diagnosticoPreguntas de diagnostico
Preguntas de diagnostico
 
Nicholas casañas castaño
Nicholas casañas castañoNicholas casañas castaño
Nicholas casañas castaño
 
Teoria de los lenguajes de programacion
Teoria de los lenguajes de programacionTeoria de los lenguajes de programacion
Teoria de los lenguajes de programacion
 
Presentacion info
Presentacion infoPresentacion info
Presentacion info
 
Paradigmas de programacion de computadoras FP.pptx
Paradigmas de programacion de computadoras FP.pptxParadigmas de programacion de computadoras FP.pptx
Paradigmas de programacion de computadoras FP.pptx
 
Introduccion a haskell
Introduccion a haskellIntroduccion a haskell
Introduccion a haskell
 
Paradigmas
ParadigmasParadigmas
Paradigmas
 
12 programacion modular
12 programacion modular12 programacion modular
12 programacion modular
 
12 programacion modular
12 programacion modular12 programacion modular
12 programacion modular
 
Algoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacionAlgoritmos, programas, compiladores y lenguajes de programacion
Algoritmos, programas, compiladores y lenguajes de programacion
 
Lenguajesprog
LenguajesprogLenguajesprog
Lenguajesprog
 
Introducción, definiciones FdP (1).pptx
Introducción, definiciones FdP (1).pptxIntroducción, definiciones FdP (1).pptx
Introducción, definiciones FdP (1).pptx
 
Fp isc u1 conceptos basicos
Fp isc   u1 conceptos basicosFp isc   u1 conceptos basicos
Fp isc u1 conceptos basicos
 
Unidad-1.pptx.pdf
Unidad-1.pptx.pdfUnidad-1.pptx.pdf
Unidad-1.pptx.pdf
 

Más de Facultad de Ciencias y Sistemas

Introducción a la progrogramación orientada a objetos con Java
Introducción a la progrogramación orientada a objetos con JavaIntroducción a la progrogramación orientada a objetos con Java
Introducción a la progrogramación orientada a objetos con JavaFacultad de Ciencias y Sistemas
 

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

Ejercicios HTML 5
Ejercicios HTML 5Ejercicios HTML 5
Ejercicios HTML 5
 
CSS3
CSS3CSS3
CSS3
 
09 ordenamiento-en-vectores-en-c
09 ordenamiento-en-vectores-en-c09 ordenamiento-en-vectores-en-c
09 ordenamiento-en-vectores-en-c
 
08 mas-de-vectores-en-c
08 mas-de-vectores-en-c08 mas-de-vectores-en-c
08 mas-de-vectores-en-c
 
07 vectores-en-c final
07 vectores-en-c final07 vectores-en-c final
07 vectores-en-c final
 
06 clases-en-c
06 clases-en-c06 clases-en-c
06 clases-en-c
 
05 cadenas-de-caracteres-en-c
05 cadenas-de-caracteres-en-c05 cadenas-de-caracteres-en-c
05 cadenas-de-caracteres-en-c
 
04 mas-estructuras-iterativas-en-c
04 mas-estructuras-iterativas-en-c04 mas-estructuras-iterativas-en-c
04 mas-estructuras-iterativas-en-c
 
03 estructuras-iterativas-en-c
03 estructuras-iterativas-en-c03 estructuras-iterativas-en-c
03 estructuras-iterativas-en-c
 
02 mas-de-las-estructuras-de-programacion-en-c
02 mas-de-las-estructuras-de-programacion-en-c02 mas-de-las-estructuras-de-programacion-en-c
02 mas-de-las-estructuras-de-programacion-en-c
 
01 estructuras-de-programacion-en-c
01 estructuras-de-programacion-en-c01 estructuras-de-programacion-en-c
01 estructuras-de-programacion-en-c
 
Procesamiento del lenguaje natural con python
Procesamiento del lenguaje natural con pythonProcesamiento del lenguaje natural con python
Procesamiento del lenguaje natural con python
 
Actividades de aprendizaje en Moodle
Actividades de aprendizaje en MoodleActividades de aprendizaje en Moodle
Actividades de aprendizaje en Moodle
 
Creación de grupos en Moodle
Creación de grupos en MoodleCreación de grupos en Moodle
Creación de grupos en Moodle
 
Introducción a la progrogramación orientada a objetos con Java
Introducción a la progrogramación orientada a objetos con JavaIntroducción a la progrogramación orientada a objetos con Java
Introducción a la progrogramación orientada a objetos con Java
 
Como crear un diagrama de clases
Como crear un diagrama de clasesComo crear un diagrama de clases
Como crear un diagrama de clases
 
Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 02Diagrama de clases - Ejemplo monográfico 02
Diagrama de clases - Ejemplo monográfico 02
 
Diagrama de clases - Ejemplo monográfico 01
Diagrama de clases - Ejemplo monográfico 01Diagrama de clases - Ejemplo monográfico 01
Diagrama de clases - Ejemplo monográfico 01
 
Otro ejemplo de diagrama de clases UML
Otro ejemplo de diagrama de clases UMLOtro ejemplo de diagrama de clases UML
Otro ejemplo de diagrama de clases UML
 
Un ejemplo de diagrama de clases
Un ejemplo de diagrama de clasesUn ejemplo de diagrama de clases
Un ejemplo de diagrama de clases
 

Último

LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxYeseniaRivera50
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxMartín Ramírez
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 

Último (20)

LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptxPresentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
Presentación de Estrategias de Enseñanza-Aprendizaje Virtual.pptx
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptxc3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Repaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia GeneralRepaso Pruebas CRECE PR 2024. Ciencia General
Repaso Pruebas CRECE PR 2024. Ciencia General
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 

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?
  • 31.
  • 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.
  • 36.
  • 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-
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 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.