Está en la página 1de 69

Paradigmas de

Programacin
Departamento de Informtica
Universidad de Valladolid

Curso 2012-13

Grado en Ingeniera Informtica


Grado en Ingeniera Informtica de Sistemas

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 1


Definicin

z Un paradigma de programacin indica un mtodo de realizar


cmputos y la manera en que se deben estructurar y organizar las
tareas que debe llevar a cabo un programa
z Los paradigmas fundamentales estn asociados a determinados
modelos de cmputo.
z Tambien se asocian a un determinado estilo de programacin
z Los lenguajes de programacin suelen implementar, a menudo de
forma parcial, varios paradigmas.
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 2
Tipos de paradigmas
z Los paradigmas fundamentales estn basados en diferentes
modelos de cmputo y por lo tanto afectan a las construccio-
nes ms bsicas de un programa.
z La divisin principal reside en el enfoque imperativo (indicar el
cmo se debe calcular) y el enfoque declarativo (indicar el qu
se debe calcular).
z El enfoque declarativo tiene varias ramas diferenciadas: el
paradigma funcional, el paradigma lgico, la programacin
reactiva y los lenguajes descriptivos.
z Otros paradigmas se centran en la estructura y organizacin de
los programas, y son compatibles con los fundamentales:
z Ejemplos: Programacin estructurada, modular, orientada a
objetos, orientada a eventos, programacin genrica.
z Por ltimo, existen paradigmas asociados a la concurrencia y a
los sistemas de tipado.
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 3
El zoo de los paradigmas

Modular Imperativo
zCdigo

Mdulos Procedimental

Procedimientos
Estructurado Declarativo
Control de flujo
Acciones Funcional
elementales

Orientado a Eventos
Lgico
Relacin

Orientado a Objetos Reactivo

Datos Programacin Programacin


Genrica Concurrente

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 4


Paradigma Imperativo
z Describe cmo debe realizarse el clculo, no el porqu.
z Un cmputo consiste en una serie de sentencias,
ejecutadas segn un control de flujo explcito, que
modifican el estado del programa.
z Las variables son celdas de memoria que contienen
datos (o referencias), pueden ser modificadas, y
representan el estado del programa.
z La sentencia principal es la asignacin.
z Es el estndar de facto.
z Asociados al paradigma imperativo se encuentran los paradigmas
procedural, modular, y la programacin estructurada.
z El lenguaje representativo sera FORTRAN-77, junto con COBOL,
BASIC, PASCAL, C, ADA.
z Tambin lo implementan Java, C++, C#, Eiffel, Python, ...
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 5
Paradigma Declarativo
z Describe que se debe clcular, sin explicitar el cmo.
z No existe un orden de evaluacin prefijado.
z Las variables son nombres asociados a definiciones, y
una vez instanciadas son inmutables.
z No existe sentencia de asignacin.
z El control de flujo suele estar asociado a la composicin
funcional, la recursividad y/o tcnicas de reescritura y
unificacin.
z Existen distintos grados de pureza en las variantes del paradigma.
z Las principales variantes son los paradigmas funcional, lgico, la
programacin reactiva y los lenguajes descriptivos.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 6


Programacin Funcional
z Basado en los modelos de cmputo clculo lambda (Lisp,
Scheme) y lgica combinatoria (familia ML, Haskell)
z Las funciones son elementos de primer orden
z Evaluacin por reduccin funcional. Tcnicas:
recursividad, parmetros acumuladores, CPS, Mnadas.
z Familia LISP (Common-Lisp, Scheme):
z Basados en s-expresiones.
z Tipado debil.
z Meta-programacin
z Familia ML (Miranda, Haskell, Scala):
z Sistema estricto de tipos (tipado algebraico)
z Concordancia de patrones.
z Transparencia referencial
z Evaluacin perezosa (estruct. de datos infinitas)
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 7
Programacin Lgica
z Basado en la lgica de predicados de primer orden
z Los programas se componen de hechos, predicados y
relaciones.
z Evaluacin basada en resolucin SLD: unificacin +
backtracking.
z La ejecucin consiste en la resolucin de un problema de
decisin, los resultados se obtienen mediante la
instanciacin de las variables libres.
z Lenguaje representativo: PROLOG

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 8


Programacin Reactiva
(Dataflow)
z Basado en la teoria de grafos.
z Un programa consiste en la especificacin del flujo de datos
entre operaciones.
z Las variables se encuentran ligadas a las operaciones que
proporcionan sus valores. Un cambio de valor de una variable
se propaga a todas las operaciones en que participa.
z Las hojas de clculo se basan en este modelo.
z Lenguajes representativos: Simulink, Oz, Clojure.
zA:=10
zB:=A+1
zprintB z11
zA:=3
zprintB z4

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 9


Ejemplo: Algoritmo de Euclides
z Clculo del mximo comn divisor
z Primer algoritmo no trivial. Euclides, ao 300 A.C.

mcd(a, b) = max{d : a | d , b | d }
z donde a | d significa que a es divisible exactamente por d:

a | d n : a = n d b | d m : b = m d
z si a y b son divisibles por d, y a > b, entonces:

a b = ( n m) d ( a b ) | d
z y por lo tanto (restar sucesivamente b es equivalente a hallar el resto de
dividir a por b):
a > b mcd(a, b) = mcd(a b, b) = mcd(a mod b, b)

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 10


Diagrama de flujo
z#1 z#2 z#1 z#2

zmcd zresto
zA Entrada #1 zA Entrada #1
zB Entrada #2 zB Entrada #2

zA B zNO
zC resto(A,B)
zB C A>B

zSI
zNO
C=0 zA A-B
zSI

zSalida #1 B zSalida #1 A

z#1 z#1
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 11
FORTRAN-77
z Imperativo, procedural, no estructurado

FUNCTION MCD(NA,NB) Paso por referencia


IA=NA
IB=NB Tipado implcito
1IF (IB.NE.0)THEN
ITMP=IA
IA=IB
IB=MOD(ITMP,IB)
Saltos
GOTO 1
ENDIF
MCD=IA
RETURN
END

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 12


PASCAL
z Imperativo, procedural, estructurado

function MCD(a,b:integer):integer;
var c:integer;
begin Paso por valor
while b<> 0do
begin Tipado explcito
c:=a;
a:=b;
b:=cmod b
end;
MCD:=b
end;

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 13


SCHEME, HASKELL, PROLOG
z Lenguajes funcionales y lgicos (recursividad)
z Scheme
(define (mcdab) s-expresiones
(if (= b0)a
(mcdb(modulo ab))))
tipado estricto
z Haskell
mcd::Int>Int>Int concordancia
mcda0=a de patrones
mcdab=mcdb(rem ab)
predicados, unificacin
z Prolog

mcd(A,0,D): A= D.
mcd(A,B,D): B> 0, Cis Amod B,mcd(B,C,D).

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 14


Modelos de Cmputo

Actuadores
Sensores
Mundo Mquina Mundo
Resultados
Externo
Datos
de Externo
Cmputo

zSecuencias
Nmeros
zde bits
Texto
Smbolos
Imgenes
Sonido
Medidas
Contexto
...

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 15


Modelos de cmputo
z El concepto de cmputo puede modelizarse por el
concepto matemtico de funcin:
z Aplicacin de un dominio de valores a un rango de resultados
donde cada valor puede estar asociado como mximo a un
resultado
z Usamos el modelo caja de conexiones para las funciones
z Ejemplo: funcin que devuelve el da de la semana.

z1/1/1930
zLunes
z2/1/1930
zMartes
z31/2/1930
zMircoles
z...
zJueves
z14/2/2010
zViernes
z15/2/2010
zSbado
z...
zDomingo
z31/12/2099

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 16


Mquinas y modelos de
cmputo
z Jerarqua de niveles segn capacidad expresiva y poder
de cmputo :
z Circuitos combinacionales
z Mquinas de estado finito / Autmatas secuenciales
z Mquinas de Turing / Mquinas de registros (RAM)
z Modelos formales
z Funciones parciales recursivas
z Clculo lambda / Lgica combinatoria
z Lgica de predicados + unificacin
z Sistemas de reescritura
z Arquitecturas
z Modelo Von-Neumman
z Modelo Harvard
z Paralelismo

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 17


Circuitos combinacionales
z Basados en la lgica booleana
z Las entradas y los resultados no se pueden secuenciar
z Conjunto minimalista de elementos: reles, puertas NAND, etc.

AND XOR

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 18


Mquina de Antikythera
z La mquina calculadora (no trivial) ms antigua: Ao 150 A.C.

z Video: http://www.youtube.com/watch?v=MqhuAnySPZ0

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 19


Mquinas secuenciales
(maq. estado finito / autmatas)
z Circuito combinacional + memoria (estado) + reloj
z Se pueden secuenciar los datos de entrada y salida
z Los datos de entrada pueden controlar el flujo de ejecucin

zMemoria
z(estados) zReloj

zControlador
zEntrada z(circuito combinacional zSalida
z o similar)

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 20


Sumador secuencial

Memoria

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 21


Reloj del Castillo
z El autmata programable ms antiguo: Al-Jazari, ao 1206 D.C.

z Video: http://www.youtube.com/watch?v=0pGXL5OKGqs
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 22
Mquina Analtica
z La primera mquina computadora universal (si se hubiera
construido)
z Charles Baggage, 1837
z Primer programa de la historia: Ada Lovelace

z Video: http://www.youtube.com/watch?v=88GYbyMaaN8&NR=1

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 23


Mquinas de Turing
z Alan Turing, 1936 Modelo abstracto de cmputo
Cinta infinita
entrada / salida
marcada con 0 y 1

Lista de transiciones
Registro de estado
Controlador

Motor izda/dcha

Cabeza
lectora / escritora

z Existen muchas MT distintas, definidas por su lista de transiciones,


cada una resuelve un problema particular.
z Video mquina real: http://aturingmachine.com/

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 24


Mquinas de Turing
(versin de Penrose)
z Cinta de entrada:
z Alfabeto de slo dos smbolos: 0 (blanco) y 1 (punto)
z Al comienzo la entrada se situa a la derecha de la cabeza
z Al finalizar la salida se encuentra a la izquierda de la cabeza
z Controlador:
z Cada mquina tiene n estados posibles (numerados 0..n-1)
z La mquina comienza siempre en el estado 0
z Dispone de un nico registro que almacena el estado actual
z La lista de transiciones tiene n filas, una por cada estado, y dos
columnas, una por cada valor posible de la celda actual (0 1)
z Cada transicin indica lo siguiente:
z Nuevo estado al que pasa la mquina
z Smbolo (0 1) que se escribe en la celda actual
z Movimiento de la cabeza: I (izquierda), D (derecha), S (derecha y parada)

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 25


Mquinas de Turing
z Codificacin unaria:
z La mquina recibe una lista de enteros positivos no nulos
z Cada nmero se separa del siguiente por el smbolo 0 (blanco)
z El valor del entero es el nmero de 1 consecutivos
z Ejemplo: Entradas (2,5,1):
..011011111010..
z Codificacin general:
z Es un proceso de dos etapas de traduccin
z La mquina recibe una secuencia de nmeros enteros positivos y
smbolos cualesquiera (un nmero finito de posibles smbolos).
z Los nmeros se codifican en binario (nmeros 0 y 1)
z El resto de smbolos se indexan por nmeros del 2 en adelante.
z Esta secuencia de nmeros se convierte a binario expandido:
0 0, 1 01, 2 011, 3 0111, 4 01111, ...

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 26


Mquinas de Turing
z Ejemplo: La entrada es la cadena -44.13,a
z Si la tabla de conversin es: - 2, . 3, , 4, a 5

z Primera etapa de conversin: (enteros a binario)

21011003110145

z Segunda etapa de conversin (binario expandido)

01101001010001110101001011110111110
| | || | ||| | | || | | |
2 101 100 3 1 10 1 4 5

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 27


Mquinas de Turing INC, DUP
z Incremento en uno (unaria)
0 1
z0 z1 1 0 00D 11D
z0 z1
z1 z0
1 01S 11D
z Multiplicar por 2 (unaria)
0 1

z1 0 00D 10D
z3
z0 1 21I 11D
2 30D 40D
z0
z0 0 z1 1 0 z1 1 z1 3 01S 31D
z0 z1 z2 z4 z5
z1 z0 z1 z0 4 51I 41D
z0

1 5 21I 51I

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 28


Mquina de Turing - MCD
z Clculo del mximo comn divisor (unaria)
0 1
0 00D 11I
z1
z10
z0 1 21D 11I
2 10 0 D 30D
z0 3 40D 31D
z0 z1 1 0 z1 z0
z0 z1 z2 z3 z4
z1 z0 z1 z0 4 40D 50D
z1
5 70I 61I
0
6 60I 11I
z0
z1 z6 z1
z0 z1 z5
7 70I 81I
z9
z0 8 90I 81I
9 20D 11I
z1 z0
z8 z7
z0 z1 10 00S 10 1 D

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 29


Mquina de Turing INC
z Incremento (general)
0 1
0 00D 11D
z0
z1
z0 0 z1
z0 z1 z2 z3 z4
1 00D 21D
z1 z0 z0 z1

z1 z0 2 30I 21D
1
3 01S 40I
z1
z1
z0
0 4 51I 41I
0 z7 z6 z5
z1 z0
5 60D 21D
z El algoritmo se basa en que para 6 00D 71D
incrementar un nmero en binario basta 7 31D 70D
con localizar el ltimo 0 y cambiarlo por 1 y
todos los siguientes 1 por 0:

10100111 + 1 = 10101000

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 30


Mquina de Turing Universal
z Cada mquina de Turing realiza un determinado
cmputo (resuelve un determinado problema)
z Cada mquina de Turing esta completamente
determinada por su tabla de transiciones.
z Es posible codificar en binario la tabla de transiciones
de una mquina de Turing:
z Pasamos los estados a binario, elegimos la codificacin para
movimientos D 2, I 3, S 4
z Para ahorrar espacio quitamos la primera transicin y
convertimos las transiciones (0,0,x) x, (0,1,x) 1x
z Pasamos la secuencia a binario expandido y eliminamos el
110 final.
z Cada mquina de Turing est representada por un
nmero entero positivo!
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 31
Mquina de Turing Universal
z Ejemplo: Mquina INC unaria:
z Tabla de transiciones, en secuencia:

00D11D01S11D
z Quitando primera transicin y convirtiendo 01S en 1S:

11214112
z Conviertiendo a binario expandido:

0101011010111101010110
z Quitando los tres dgitos finales y traduciendo a decimal:
z La mquina de Turing INC unaria es la 177.642-ava
mquina de Turing

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 32


Mquina de Turing Universal
z Mquina de Turing Universal: Recibe como parmetro
el nmero de otra mquina de Turing y una lista de
parmetros.
z Devuelve como resultado el clculo que hubiera
realizado la otra mquina si se hubiera ejecutado con
esos parmetros.
z Sea TU la mquina universal, y Tn la mquina con nmero n:
z TU(n,p1..pm) = Tn(p1..pm)
z La mquina universal es capaz de simular cualquier
otra mquina de Turing.
z La mquina universal tiene su propio nmero:

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 33


Mquina de Turing Universal
724485533533931757719839503961571123795236067255655963110814479660650505940424109
031048361363235936564444345838222688327876762655614469281411771501784255170755408
565768975334635694247848859704693472573998858228382779529468346052106116983594593
879188554632644092552550582055598945189071653741489603309675302043155362503498452
983232065158304766414213070881932971723415105698026273468642992183817215733348282
307345371342147505974034518437235959309064002432107734217885149276079759763441512
307958639635449226915947965461471134570014504816733756217257346452273105448298078
496512698878896456976090663420447798902191443793283001949357096392170390483327088
259620130177372720271862591991442827543742235135567513408422229988937441053430547
104436869587640517812801943753081387063994277282315642528923751456544389905278079
324114482614235728619311833261065612275553181020751108533763380603108236167504563
585216421486954234718742643754442879006248582709124042207653875426445413345174856
629157429990950262300973373813772416217274772361020678685400289356608569682262014
198248621698902609130940298570600174300670086896759034473417412787425581201549366
393899690581773859165405535670409282133222163141097871081459978669599704509681841
906299443656015145490488092208448003482249207730403043188429899393135266882349662
101947161910701461968523192847482034495897709553561107027581748733327296678998798
473284098190764851272631001740166787363477605857245036964434897992034489997455662
402937487668839751404451665707750060513883991668814072545544665222050724262392379
211525318162512536305093172863142200406457130527580230766518335199568913974813750
4926429605010013651980186945639498

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 34


Computabilidad
z Algoritmo: Procedimiento sistemtico que permite
resolver un problema en un nmero finito de pasos, cada
uno de ellos especificado de manera efectiva y sin
ambigedad.
z Funcin computable: Aquella que puede ser calculada
mediante un dispositivo mecnico dado un tiempo y
espacio de almacenamiento ilimitado (pero finito)
z No importa la eficiencia, sino la posibilidad de ser
calculada.
z Existen funciones no computables?
z Entscheidungsproblem: Dcima pregunta de Hilbert
(Bolonia, 1928): Existe un procedimiento mecnico
(algortmico) general para resolver toda cuestin
matemtica bien definida?
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 35
Computabilidad
z Algoritmo: Procedimiento sistemtico que permite
resolver un problema en un nmero finito de pasos,
cada uno de ellos especificado de manera efectiva y
sin ambigedad.
z Funcin computable: Aquella que puede ser
calculada mediante un dispositivo mecnico dado un
tiempo y espacio de almacenamiento ilimitado.
z No importa la eficiencia, sino la posibilidad de ser
calculada.
z Entscheidungsproblem: Dcima pregunta de Hilbert
(Bolonia, 1928): Existe un procedimiento mecnico
(algortmico) general para resolver toda cuestin
matemtica bien definida?

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 36


Tesis Church-Turing
z Existen problemas bien definidos para los cuales no
es posible encontrar un procedimiento mecnico que
devuelva una solucin en un tiempo finito.
z El problema de la detencin
z El problema del castor afanoso

z Tesis Church-Turing: Toda funcin computable es


calculable mediante una mquina de Turing.
z Indemostrable, pero considerada cierta por la mayora.

z Equivalencia entre distintos sistemas formales:


z Mquina de Turing Clculo lambda
z Calculo lambda Funciones recursivas
z etc.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 37


Super-Turing?
z Posibilidades de superar al modelo de Turing:
z Mltiples cintas
z Cintas en 2D, 3D, nD
z Controlador trabajando en paralelo con varias cintas
z Acceso directo a posicin en cinta (modelo RAM)
z ...

z Todas tienen un poder equivalente al de una


mquina normal (pueden ser simuladas).
z Las alternativas mejoran la eficiencia, pero no
amplian el conjunto de lo que es computable.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 38


Mquinas de Registros (RAM)
z Derivadas del modelo de Turing, pero en vez de cinta
secuencial con una memoria de acceso directo.
z El controlador dispone de un nmero finito de registros
internos, que definen su estado.
z Un programa consiste en una serie de instrucciones,
leidas de memoria, entre las cuales existen los tipos:
z Copia de datos entre direccin de memoria y registros.
z Operaciones aritmticas en registros
z Salto condicional segn valor de registro
z Indireccin (contenido de registros son direcciones de memoria)
z Es el modelo en que se basan la gran mayoria de
computadoras.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 39


Arquitectura Von-Neumman
z El programa y los datos se almacenan juntos en
memoria.
z Existe un registro que indica la posicin de memoria
donde se encuentra la instruccin actual.
z Arquitectura Harvard: cdigo y datos se almacenan
en memorias separadas.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 40


RAM minimalista
z Es posible tener una RAM con un slo tipo de
instruccin: subleq a,b,c
z Esta instruccin resta el contenido de las posiciones de
memoria a y b, almacena el resultado en b, y si es negativo
salta a la instruccin situada en c.
z Se necesita que una posicin de memoria (Z) almacene 0
z Cualquier otra instruccin puede sintetizarse a partir
de subleq:

SALTO c subleq Z,Z,c MOV a,b subleq b,b,c


c : subleq a,Z,d
SUMA a,b subleq a,Z,c d : subleq Z,b,e
c : subleq Z,b,d e : subleq Z,Z,f
d : subleq Z,Z,e f : ...
e : ...

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 41


Funciones Primitivas Recursivas
z Kurt Gdel, 1931
z Modelo de cmputo formal, basado en la reduccin al
mnimo de los posibles elementos que se pueden
usar para definir una funcin:
z Se restringen las funciones a aquellas cuyos argumentos y
nico resultado son nmeros naturales.
z Se puede utilizar el valor constante 0 (funcin cero)
z Se puede usar +1 (funcin sucesor)
z Se puede acceder a un argumento (funciones proyectoras)
z Composicin:
z El resultado de una funcin puede servir de argumento de otra

h(0, x ) = f ( x )
z Recursin primitiva:
h( y + 1, x ) = g ( y, h( y, x ), x )
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 42
Funciones Primitivas Recursivas
z Suma:
suma(0, b) = b suma(0, b) = P11 ( x)
suma(a + 1, b) = suma(a, b) + 1 suma(a + 1, b) = S ( P23 (a, suma(a, b), b))

z Predecesor, Resta (resta(a,b) = b-a si b > a, 0 si b a)


pred(0) = 0 resta(0, b) = b
pred(a + 1) = a resta(a + 1, b) = pred(resta (a, b))

z Condicional, Mximo Comn Divisor:

cond(0, a, b) = a mcd(a, b) = cond(b, a, cond(resta (a, b),


cond( p + 1, a, b) = b mcd(resta(b, a), b),
mcd(resta(a, b), a)))

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 43


Funciones Primitivas Recursivas
z Son finitas: Su evaluacin requiere un nmero finito
de pasos.
z Son equivalentes a un lenguaje de programacin
donde los bucles tengan un nmero mximo de
iteraciones.
z Por ejemplo, Pascal slo con bucles for (se permite sentencia
break para salida anticipada) y sin llamadas recursivas.
z No pueden calcular todas las funciones computables.
z Para ello necesitan el operador Funciones
Recursivas Generales

[ f ( y, x )] = min{y : f ( y, x ) = 0}
z Equivalentes a lenguajes con bucles tipo while.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 44


Funcin de Ackermann
z Ejemplo de funcin computable no primitiva recursiva:
(a, b,0) = a + b
(a, b,1) = a b = a + a + +a
b veces

( a , b, 2 ) = a b = a b = a a a
b veces
a

(a, b,3) = a aa
= a b = a (a ( a ))
b veces b veces

(a, b,4) = a b = a (a ( a ))
b veces

( a , b, n ) = a b = a (a ( a ))
n veces n 1 veces n 1 veces n 1 veces
b veces

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 45


Clculo lambda
z Alonzo Church, 1936
z El lenguaje de programacin ms sencillo (salvo
quizs la lgica combinatoria)
z Simplificacin extrema del clculo:
z No importa el nombre de las funciones ni de los argumentos:
f(x,y) = x2 + y2 y g(a,b) = a2 + b2 son la misma funcin.

( x, y ) x 2 + y 2
z Toda funcin de ms de un argumento se puede considerar
como una funcin de un solo argumento que devuelve no un
valor sino una funcin: Currificacin

x y x2 + y2
z No se necesitan nmeros: Todo puede ser representado
nicamente mediante funciones.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 46


Clculo lambda - Notacin
z Una expresin lambda puede ser:
z Una variable (a, b, c ...)
z Una abstraccin: x. t (donde x es una variable y t es una
expresin lambda)
z Una aplicacin: f g (donde f y g son expresiones lambda)
z Convenciones:
z Las variables representan funciones.
z Se pueden usar parntesis para indicar el orden de evaluacin.
z Las aplicaciones son asociativas hacia la izquierda: f g h = ( f g) h
z Las abstracciones se extienden todo lo posible hacia la derecha
z Dentro del trmino de una abstraccin, la variable de la
abstraccin se denomina ligada (el resto son variables libres).
z Las abstracciones se pueden contraer: x . y . t x y. t
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 47
Clculo lambda - Reducciones
z Las operaciones que permiten manipular expresiones
lambda son:
z La -reduccin (renombrado): Es posible cambiar el nombre de
las variables ligadas.
x. x y a. a y
z La -reduccin: Al aplicar una abstraccin a otra expresin,
podemos sustituir la expresin por el trmino de la abstraccin
donde se han sustituido todas las apariciones de la variable
ligada por la expresin aplicada:
( x . x ( y x )) ( z w) ( z w) ( y ( z w) )
z La -reduccin: Si el trmino de una abstraccin es una
aplicacin donde en la primera expresin no aparece la variable
ligada y la segunda expresin es la variable, se puede sustituir la
abstraccin por la expresin:
x. f x f
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 48
Clculo lambda - Representacin
z Representacin de los nmeros naturales, incremento,
suma, producto, predecesor, resta:
0fx.x
1fx.fx
2 f x . f (f x)
3 f x . f (f (f x))
4 f x . f (f (f (f x)))
Succ n f x . f (n f x)
Sum m n . m Succ n
Mul m n . m (Sum n) 0
Pred n f x . n ( g h . h (g f)) ( n . x) ( n . n)
Sub n m . n Pred m
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 49
Clculo lambda - Representacin
z Representacin de los valores lgicos, condicional, test
si valor nulo, test menor o igual:
Txy.x
Fxy.y
If p a b . p a b
Is0 n . n ( x . F) T
Leq n m . Is0 (Sub n m)
z Recursividad (combinador Y):
Y g . ( x . g (x x)) ( x . g (x x))
Y f = ( x . f (x x)) ( x . f (x x))
= f (( x . f (x x)) ( x . f (x x)))
=f(Yf)
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 50
Clculo lambda - MCD
z El clculo del mximo comn divisor se puede expresar:
Mcd0 r a b . If (Is0 b) a (If (Leq b a)
(r a (Sub a b)) (r b (Sub b a)))
Mcd a b . Mcd0 (Y Mcd0) b a
z Expandiendo las definiciones:
a b . ( r c d . ( p e f . p e f) (( n . n ( x g y . y) ( x y . x)) d) c (( p h i
. p h i) (( n m . ( j . j ( x k y . y) ( x y . x)) (( l o . l ( p f x . p ( g h .
h (g f)) ( q . x) ( s . s)) o) n m)) d c) (r c (( n m . n ( t f x . t ( g h . h (g
f)) ( u . x) ( v . v)) m) c d)) (r d (( n m . n ( w f x . w ( g h . h (g f)) (
y . x) ( z . z)) m) d c)))) (( g . ( x . g (x x)) ( x . g (x x))) ( r a' b' . ( p
c' d' . p c' d') (( n . n ( x e' y . y) ( x y . x)) b') a' (( p f' g' . p f' g') ((
n m . ( h' . h' ( x i' y . y) ( x y . x)) (( j' k' . j' ( l' f x . l' ( g h . h (g
f)) ( m' . x) ( n' . n')) k') n m)) b' a') (r a' (( n m . n ( o' f x . o' ( g h .
h (g f)) ( p' . x) ( q' . q')) m) a' b')) (r b' (( n m . n ( r' f x . r' ( g h . h
(g f)) ( s' . x) ( t' . t')) m) b' a'))))) b a

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 51


Modelos de Cmputo
z Las mquinas de Turing, y sus extensiones en las
mquinas RAM sirven de inspiracin al paradigma
imperativo:
z Un cmputo es una secuencia de operaciones..
z ..que modifican el estado del programa (registros)..
z ..y cuyos resultados determinan la secuencia de ejecucin.
z El clculo lambda (y su variante la lgica combinatoria)
sirve de inspiracin al paradigma funcional:
z Un cmputo consiste en una expresin que puede ser
transformada en otras mediante reglas de reescritura.
z El orden de evaluacin es irrelevante.
z Las mquinas de Turing, el clculo lambda y las
funciones recursivas son equivalentes.

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 52


Lenguajes de Programacin
z Lenguaje artificial diseado para expresar cmputos que
pueden ser llevados a cabo por una mquina.
z Basado en un modelo de cmputo (que puede o no coincidir con
el de la mquina en que se va a ejecutar)
z Define un nivel de abstraccin ms elevado (ms cercano al
programador)
z Debe traducirse a un cdigo que pueda entender el procesador:
el cdigo mquina.
z Modos de traduccin:
z Lenguaje Compilado
z Lenguaje Interpretado (Entorno interactivo)
z Lenguaje traducido a Cdigo Intermedio (Java Bytecodes,
.NET IDL)

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 53


Estrategias de traduccin
z Cdigo compilado:
Cdigo Mquina
Programa

zCompilacin zEjecucin

Entorno
(SO)

Libreras Libreras
Mdulos estticas dinmicas

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 54


Estrategias de traduccin
z Cdigo interpretado:

Programa
(Sesin interactiva) Intrprete

Ejecucin

Interpretacin

I/O

Estado
Sesin
Comando actual
Resultado

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 55


Estrategias de traduccin
z Cdigo intermedio: (Pascal IDL, Java, .NET)
Cdigo Mquina
Programa Intermedio Virtual

Compilacin Interpretacin Ejecucin

Mdulos
Estado

Interaccin S.O.
Libreras estndard

Universal Especfico

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 56


Generaciones
Generacin Lenguajes Hardware Movimientos
Primera (1945-55) Cdigo Mquina Rels, Vlvulas de
vaco
Segunda (1955-68) FORTRAN Transistores, Prog. Estructurada
COBOL Memorias de y Modular
LISP ferrita Proceso por Lotes
Tercera (1968-1980) ALGOL Circuitos Ingeniera de
PASCAL integrados, Software
C Memorias de Orientacin a
BASIC transistores Objetos
ADA Bases de Datos
Cuarta (1980-) C++ VLSI Comp. Distribuida
JAVA MultiCore Interfaces Grficas
HASKELL Flash Multimedia
PYTHON Internet

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 57


Linea del Tiempo
Crisis del Software, Ingeniera del Software

Programacin Procedimental Programacin Estructurada y Modular

Orientacin a Objetos

Programacin Genrica

60s 70s 80s

Basic ADA Common Lisp

COBOL
ALGOL Pascal Modula-2

FORTRAN
C C++ Scheme
Prolog
LISP
Simula Smalltalk Objective C

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 58


Linea del Tiempo
Internet

Interfaces de Usuario Dispositivos Mviles

Computacin Distribuida

90s 00s

Haskell Java .NET Scala Clojure


Delphi
C#
Perl Visual C++ PHP

Eiffel Visual Basic Python

Erlang Ruby

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa


Evolucin BASIC

Modula-2
VB
FORTRAN PASCAL
Delphi

ADA C#
Java
ALGOL
SIMULA Eiffel

JavaScript
C++ PHP
COBOL C

AWK Perl

SmallTalk TCL Python


PROLOG
Ruby

CLisp

LISP Scheme Objective-C


Scala
ML Haskell
Clean
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 60
Paradigmas BASIC

Modula-2
FORTRAN PASCAL VB
Delphi

ADA C#
Java
ALGOL
SIMULA Eiffel
Imperativo
JavaScript
Funcional PHP
Orient. Objeto
C++
Scripting C

AWK Perl

COBOL SmallTalk TCL Python


Ruby
PROLOG
CLisp

LISP Scheme Objective-C


Scala
ML Haskell
Clean
11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 61
Evolucin Histrica
z FORTRAN (Formula Translating) 1957
z Orientado al clculo cientfico
z Proceso de arrays
z GOTO asignado
z Versiones II, III, IV, 66 (subrutinas), 77, 90 (array slicing,
recursividad, modularidad, sobrecarga, TADs), 96-03-08
(paralelismo, orientacin a objeto)
z COBOL (Common Business Oriented Languaje) 1959:
z Orientado al mundo empresarial
z Sintaxis basada en lenguaje natural: 400 palabras reservadas,
con verbos, nombres, modificadores, etc.
z Cdigo auto-modificable: ALTER X TO PROCEED TO Y
z Especificacin detallada de valores numricos (PIC)
z Modularidad mediante Copybooks

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 62


Familias y Evolucin Histrica
z LISP (List Processing) 1958, McCarthy
z Orientado a la investigacin (Inteligencia Artificial)
z Basado en s-expresiones
z Cdigo y datos intercambiables
z Tipado dbil
z Familia Lisp:
z Common Lisp , 1984 (Generalizacin, Orientacin a Objeto)
z Scheme, 1975 (Simplificacin, Closures)
z Clojure, 2007
z Familia ML:
z Sistema de tipado Hindler-Millner
z Haskell, 1990
z Clean (1987), Scala (2003)

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 63


Ejemplo programa COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. PerformFormat4.
AUTHOR. Michael Coughlan.
* An example program using the PERFORM..VARYING format.
* Pay particular attention to the values produced by the
* WITH TEST BEFORE and WITH TEST AFTER loops.
* Note that the PERFORM within a PERFORM produces the same
* results as the PERFORM..VARYING..AFTER

DATA DIVISION.
WORKING-STORAGE SECTION.
01 LoopCount PIC 9 VALUE ZEROS.
01 LoopCount2 PIC S9 VALUE ZEROS.

PROCEDURE DIVISION.
Begin.
DISPLAY "Start WHILE Iteration of LoopBody"
PERFORM LoopBody WITH TEST BEFORE
VARYING LoopCount FROM 1 BY 2
UNTIL LoopCount GREATER THAN 5.
DISPLAY "Finished WHILE iteration. LoopCount = " LoopCount.
...

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 64


Ejemplo programa LISP
(defun simplify (expression)
(simplify-2 (rules) expression))

(defun simplify-2 (rules expression)


(cond
((null rules) expression)
(T (simplify-2 (cdr rules) (apply-rule (car rules) expression)))))

(defun apply-rule (rule expression)


(substitute (car rule) (cadr rule) expression))

(defun substitute (pattern replacement expression)


(cond
((null expression) ())
((occurs-at-front pattern expression)
(substitute-at-front pattern replacement expression))
(T (cons (car expression)
(substitute pattern replacement (cdr expression))))))

(defun occurs-at-front (pattern expression)


(cond ((null pattern) T) ((null expression) nil)
((matches (car pattern) (car expression))
(occurs-at-front (cdr pattern) (cdr expression)))
(T nil)))

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 65


Familias y Evolucin Histrica
z ALGOL (Algorithmic Languaje) 1958/60/68 N.Wirth
z Familia de lenguajes, diseados por un comit de expertos
z Bloques de cdigo, recursividad, funciones internas, paso de
parmetros
z Arrays dinmicos, paralelismo, definicin de operadores
z Familia ALGOL
z PASCAL, 73 Modula-2, 80
Delphi/ Free-Pascal, 93
ADA, 83
z C, 74 C++, 80
Objective-C, 86
C#, 95
Java, 95

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 66


Orientacin a objeto
z SIMULA, 67
z Ortodoxa:
z SmallTalk, 80 Objective-C, 86
z Eiffel, 86
z Parcial
z ADA, 83 (Genericidad)
z C++, 80 (Templates)
z Java, 95 (Interfaces)
z C# , 2001 (.NET)
z Basada en prototipos
z JavaScript, 96
z Python, 91

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 67


Lenguajes de Scripting
z Cliente (navegador):
z HTML / CSS
z ACMEScript: JavaScript, ActionScript (Flash), 1995
z Java (applets), 1995
z Servidor
z PHP, ASP, 1995
z Java (servlets), 2000
z Ruby, 1995
z Propsito general
z Perl, 1987
z Tcl/Tk, 1989
z Python, 1991

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 68


Otros lenguajes
z Programacin lgica:
z PROLOG, 1972
z Concurrencia
z Erlang, 1986
z Oz , 1991
z Bases de Datos
z SQL (No es Turing-completo)
z Minimalistas
z Forth, 1970
z APL (1964) J (1990)
z BrainFuck

11 Feb. 2011 Csar Vaca Rodrguez, Dpto. de Informtica, UVa 69

También podría gustarte