Professional Documents
Culture Documents
Indice
1.
2.
3.
4.
Motivacin.
Conceptos esenciales en lenguajes de programacin.
Principales paradigmas de programacin: imperativo,
funcional, lgico, OO, concurrente.
Otros paradigmas. Basado en interaccin,
emergentes.
Objetivos
1. Motivacin
Una historia que empez en 1950
AOS 50:
ACTUALIDAD:
1. Motivacin
EJEMPLO:
ZIP lists en Java
1. Motivacin
1. Motivacin
Lenguaje 'kernel'
Abstraccin de Datos
Recursin...
Lenguaje lgico
No determinismo
Variables lgicas
Unificacin
Lenguaje Funcional
Polimorfismo
Estrategias
Orden Superior
Lenguaje OO
Clases
Herencia
Lenguaje imperativo
Estados explcitos
Modularidad
Componentes
Lenguaje 'dataflow'
Concurrencia
Lenguajes
Expresiones
Sistema de
=
+
tipificados
de programa
tipos
Prolog
objeto(llave).
objeto(pelota).
Haskell
fac 0 = 1
fac x = x * fac (x-1)
Java
int x;
x = 42;
12
Tipos
monomrficos
True y False
w Int -> Int, es el tipo de la funcin fact, que
devuelve el factorial de un nmero
Tipos
w [ a ] -> Int,
polimrficos
que calcula
Variable
de tipo
Conceptos: polimorfismo
POLIMORFISMO
Es
Conceptos: polimorfismo
Tipos de Polimorfismo
Ad-Hoc
Universal
15
Ejemplo: los operadores aritmticos (+), (-), (*), (/), ..., suelen estar
sobrecargados:
(+) :: Int -> Int -> Int
(+) :: Float -> Float -> Float
(+) :: Complex -> Complex -> Complex
corresponden a distintos usos de (+). Otro:
(+) :: Int -> Float -> Float
El operador (+) no puede recibir el politipo
(+) :: a -> a -> a
porque implicara dotar de significado (e implementacin) a la suma de
caracteres, funciones, listas, etc., lo cual puede interesarnos o no
16
Ad-hoc
n Sobrecarga:
nombre.
Ejemplo: el operador + denota funciones distintas, con
implementaciones diferentes, segn se aplique a enteros, reales
n En
Ad-hoc
public class Overload {
public void numbers(int x, int y){
System.out.println(Method that gets integer numbers");
}
public void numbers (double x, double y, double z){
System.out.println("Method that gets real numbers");
}
public int numbers (String st){
System.out.println(The length of" + st+ " is" + st.length() + " characters");#
return st.length();#
}
#
public static void main (String... args){
Overload s = new Overload();
int a = 1;
int b = 2;
s.numbers(a,b);#
s.numbers(3.2,5.7,0.0);#
a = s.numbers(Madagascar");
}
}#
18
Ad-hoc
n Coercin:
Ad-hoc
20
Universal
n Genericidad:
nUna
funcin genrica
Otro ejemplo:
a puede ser
de cualquier
tipo
22
Container<String> container =
new Container<String>();
container.setContent(hello);
23
26
nUn
clase genrica
mtodo genrico
public static <T> Entry<T,T> twice(T value) {!
!
return new Entry<T,T> (value, value);!
}
27
Universal
n Herencia:
n En
n Pero
28
java.lang.Object
|
+-java.awt.Component
|
+-java.awt.Container
|
+-java.awt.Window
|
+-java.awt.Frame
|
+-javax.swing.JFrame
29
nuevos atributos
n aadir nuevos mtodos
n redefinir mtodos
30
31
35
Si
37
39
}
40
Y si quisiramos extender esta clase con otra forma como el tringulo, qu hay que hacer?#
Una
43
Conceptos: reflexin
REFLEXIN
Qu es la reflexin?
Cuando te miras en un espejo, puedes
ver tu reflejo y
reaccionar ante lo que ves (por ejemplo, anudarte la corbata o arreglarte
el pelo)
manipularse a l mismo
45
Conceptos: reflexin
Conceptos: reflexin
La reflexin resulta muy til en tareas de metaprogramacin (o
construccin de programas que escriben o manipulan otros
programas -o a ellos mismos- como datos).
Ejemplo (metaprograma)
#!/bin/bash
# metaprogram
echo '#!/bin/bash' >program
for ((I=1; I<=999 I++)) do
echo "echo $I" >>program
done
chmod +x program
47
Conceptos: reflexin
Conceptos: reflexin
Conceptos: reflexin
Ejemplo:
import java.lang.reflect.*;
class Class {
Constructor[] getConstructors();
Field[]
getDeclaredFields();
Method[]
getDeclaredMethods();
try {
Class c = Class.forName(args[0]);
Conceptos: reflexin
51
Conceptos: reflexin
Algunos peligros:
Mal usada puede afectar al rendimiento, a la seguridad y
exponer detalles comprometidos del cdigo en ciertos
contextos.
Es una caracterstica avanzada pero no complicada,
especialmente en lenguajes funcionales, gracias a la dualidad
natural entre datos/programas existente en estos lenguajes,
conocida como homoiconicidad.
52
CUESTIONES
1.
1. Motivacin
CUESTIONES
2.
1. Motivacin
CUESTIONES
4.
3. Paradigmas de programacin
Principales Paradigmas
Imperativo
Declarativo
Funcional
n Lgico
n
Orientado
a objetos
Concurrente
Emergentes
57
3. Paradigmas de programacin
Paradigma Imperativo
Describe la programacin como una secuencia de instrucciones o
comandos que cambian el estado de un programa.
el cmo proceder Algoritmo
El concepto bsico es el estado de la mquina, el cual se define
por los valores de las variables involucradas y que se almacenan en
la memoria.
Las instrucciones suelen ser secuenciales y el programa consiste en
construir la secuencia de estados de la mquina que conduce a la
solucin.
Este modelo est muy vinculado a la arquitectura de la mquina
convencional (Von Neumann).
Programa estructurado en bloques y mdulos.
Eficiente, difcil de modificar y verificar, con efectos laterales.
Establece
58
3. Paradigmas de programacin
Paradigma Imperativo
59
Paradigma Imperativo
(caractersticas)
3. Paradigmas de programacin
60
3. Paradigmas de programacin
Paradigma Imperativo
(caractersticas)
Ejemplo de ejecucin:
> proof
1
2
61
3. Paradigmas de programacin
Paradigma declarativo
Describe las propiedades de la solucin buscada, dejando
indeterminado el algoritmo (conjunto de instrucciones) usado para
encontrar esa solucin.
Responde
62
3. Paradigmas de programacin
Paradigma declarativo
Un programa declarativo puede entenderse como una
ESPECIFICACIN EJECUTABLE
Lenguaje declarativo = Lenguaje de ESPECIFICACIN (ejecutable)
= Lenguaje de PROGRAMACIN (alto nivel)
ESPECIFICACIN
P
R
O
G
R
A
M
A
C
I
D
E
C
L
A
R
A
T
I
V
A
PROGRAMACIN
63
3. Paradigmas de programacin
Paradigma declarativo
Ejemplo: Los nmeros de Fibonacci
Especificacin
(definicin de la funcin matemtica):
fib(0)=1
fib(1)=1
fib(n)=fib(n-1) + fib(n-2)
64
3. Paradigmas de programacin
Paradigma declarativo
Ejemplo: Los nmeros de Fibonacci
Especificacin
(definicin de la funcin matemtica):
fib(0)=1
fib(1)=1
fib(n)=fib(n-1) + fib(n-2)
Programa:!
(una versin eficiente de la especificacin
!(directamente la especificacin)
usando un parmetro acumulador)
! !
!
!!
fib(0)=1!
!
fib(1)=1!
!fib(n)=fib(n-1) + fib(n-2) !
fib(0)=1!
fib(1)=1!
fib(n)=fib_aux(1,1,n)!
fib_aux(x,y,0)=x!
fib_aux(x,y,n)= fib_aux(y,x+y,n-1)!
65
3. Paradigmas de programacin
Paradigma declarativo
mujer(laura).
madre(valentina, laura).
n
n
variables lgicas
indeterminismo
66
3. Paradigmas de programacin
Paradigma declarativo
Prolog
67
3. Paradigmas de programacin
P. Declarativa vs P. Imperativa
Programacin Imperativa
PROGRAMA
INSTRUCCIONES
MODELO DE COMPUTACIN
VARIABLES
Transcripcin de un algoritmo
rdenes a la mquina
Mquina de estados
Referencias a memoria
68
3. Paradigmas de programacin
P. Declarativa vs P. Imperativa
3. Paradigmas de programacin
P. Declarativa vs P. Imperativa
Programacin Declarativa =
LGICA
como lenguaje de programacin
PROGRAMA
INSTRUCCIONES
MODELO DE COMPUTACIN
VARIABLES
Especificacin de un problema
Frmulas lgicas
Mquina de inferencias
Variables lgicas
70
71
Sort en Haskell
3. Paradigmas de programacin
P. Declarativa vs P. Imperativa
3. Paradigmas de programacin
estado + operaciones
Concepto de clase, instancia, subclases y herencia
Elementos fundamentales: abstraccin, encapsulamiento,
modularidad y jerarqua
74
3. Paradigmas de programacin
3. Paradigmas de programacin
3. Paradigmas de programacin
Programacin Concurrente
La concurrencia introdujo numerosos problemas:
Corrupcin de los datos compartidos (por ejemplo cuando dos programas escriben
concurrentemente en una misma impresora puede producirse una mezcla incomprensible)
Interbloqueos (supongamos por ejemplo un proceso A que necesita dos recursos compartidos,
R1 y R2 y, para evitar el problema anterior, trata de capturarlos en exclusiva solicitando
primero R1 y luego R2. Mientras tanto, otro proceso B, con las mismas necesidades, hace la
solicitud inversa.
El resultado es que cada proceso obtiene un recurso quedando bloqueado en espera del
recurso asignado al otro).
Inanicin: El SO organiza una cola de procesos cuando quieren acceder a un recurso comn,
concediendo los permisos por orden de prioridad. Si varios procesos prioritarios se alternan
en el uso de un recurso, un proceso menos prioritario podra no obtener acceso nunca.
Indeterminismo: El orden e instantes concretos en que ocurren las interrupciones pueden variar
de una ejecucin a otra, por lo que errores que no suceden en una ejecucin podran ocurrir
77
en otra, lo cul dificulta la depuracin.
3. Paradigmas de programacin
Programacin Concurrente
3. Paradigmas de programacin
Programacin Paralela
3. Paradigmas de programacin
Concurrencia en Java
3. Paradigmas de programacin
81
basados en Interaccin
Introduccin a la interaccin
Programacin por eventos
Emergentes
83
En programacin tradicional, un
programa describe la secuencia de
pasos necesarios para producir la
salida a partir de las entradas,
siguiendo un flujo de control que
est prefijado por el propio cdigo
(programacin como clculo en el
estilo Von Neumann).
Sin embargo, este modelo no se
adapta a las necesidades de
algunas reas: HCI, robtica,
agentes software, IA, aplicaciones
orientadas a servicios,
En estas reas los programas se ajustan mejor a un modelo de
computacin como interaccin, en el que las entradas se
monitorizan y las salidas son acciones que se llevan a cabo
dinmicamente mientras se ejecuta el proceso.
Introduccin
una
secuencia de eventos
un dispatcher que procesa la secuencia
un conjunto de manejadores
Pseudo-cdigo para un
dispatcher tipico con:
bucle principal,
operacin salir,
determinacin del tipo de
evento y seleccin del
manejador apropiado segn
el tipo
gestin de los eventos.
do forever:
91
LTPP: Bibliografa
BSICA
ESPECFICA