Está en la página 1de 35

Paradigmas de Programacin

CYPLP

PARADIGMAS
Un paradigma de programacin es un estilo de
desarrollo de programas. Es decir, un modelo para
resolver problemas computacionales. Los lenguajes de
programacin, necesariamente, se encuadran en uno o
varios paradigmas a la vez a partir del tipo de rdenes
que permiten implementar, tiene una relacin
directa con su sintaxis.

PRINCIPALES PARADIGMAS
Imperativo: sentencias + secuencias de
comandos
Declarativo. Los programas describen los
resultados esperados sin listar explcitamente
los pasos a llevar a cabo para alcanzarlos.
Lgico. Aserciones lgicas: hechos + reglas
Funcional. Los programas se componen de
funciones
Orientado a Objetos : Mtodos + mensajes.

PRINCIPALES PARADIGMAS
Otros son de aparicin relativamente reciente y no
forman parte del grupo principal:
Dirigido por eventos. El flujo del programa est
determinado por sucesos externos (por ejemplo, una
accin del usuario).
Orientado a aspectos. Apunta a dividir el
programa en mdulos independientes, cada uno con
un comportamiento bien definido.

PARADIGMA APLICATIVO O FUNCIONAL


Basado en el uso de funciones. Muy popular en la
resolucin de problemas de inteligencia artificial,
matemtica, lgica, procesamiento paralelo
Ventajas:
Vista uniforme de programa y funcin
Tratamiento de funciones como datos
Liberacin de efectos colaterales
Manejo automtico de memoria
Desventaja:
Ineficiencia de ejecucin

PARADIGMA FUNCIONAL
Caractersticas de los lenguajes funcionales
Define un conjunto de datos
Provee un conjunto de funciones primitivas
Provee un conjunto de formas funcionales
Requiere de un operador de aplicacin
Caractersticas de los programas funcionales
Semntica basada en valores
Transparencia referencial
Regla de mapeo basada en combinacin o
composicin
Las funciones de primer orden

PROGRAMACIN FUNCIONAL
Funciones
El VALOR ms importante en la programacin
funcional es el de una FUNCIN
Matemticamente una funcin es un correspondencia :
f: A
B
A cada elemento de A le corresponde un nico elemento
en B
f(x) denota el resultado de la aplicacin de f a x
Las funciones son tratadas como valores, pueden ser
pasadas como parmetros, retornar resultados, etc.

PROGRAMACIN FUNCIONAL
Definiendo Funciones:
Se debe distinguir entre el VALOR y la DEFINICIN
de una funcin.
Existen muchas maneras de DEFINIR una misma
funcin, pero siempre dar el mismo valor, ejemplo:
DOBLE X = X + X
DOBLE X= 2 * X
Denotan la misma funcin pero son dos formas
distintas de definirlas
Tipo de una funcin
Puede estar definida explcitamente dentro del
SCRIPT, por ejemplo:
cuadrado::num
num
cuadrado x= x + x
O puede deducirse/inferirse

PROGRAMACIN FUNCIONAL
Expresiones y valores
La expresin es la nocin central de la programacin
Funcional
Caracterstica ms importante:
Una expresin es su VALOR
El valor de una expresin depende NICAMENTE de los
valores de las sub expresiones que la componen.
Las expresiones tambin pueden contener VARIABLES,
(valores desconocidos)

PROGRAMACIN FUNCIONAL
Expresiones y valores
La nocin de Variable es la de variable matemtica, no
la de celda de memoria. Diferentes ocurrencias del
mismo nombre hacen referencia al mismo valor
desconocido
Las expresiones cumplen con la propiedad de
TRANSPARENCIA REFERENCIAL: Dos expresiones
sintcticamente iguales darn el mismo valor, porque no
existen EFECTOS LATERALES

PROGRAMACIN FUNCIONAL
Ejemplos de expresiones para evaluar
Expresin
Valor

47
(* 4 7)
(+ 49 5)

47
28
54

Se est utilizando una


Funcin primitiva

Definiendo funciones.

cuadrado x = x * x
min x y = x, if x < y
y, if x > y
cube (x) = x * x * x

PROGRAMACIN FUNCIONAL
Un script es una lista de definiciones y.
Pueden someterse a evaluacin. Ejemplos:

?cuadrado (3 + 4 )
49

?min 3 4
3

Pueden combinarse, Ejemplo:

?min(cuadrado ( 1 + 1 ) 3)
Pueden modificarse, ejemplo: Al script anterior le
agrego nuevas definiciones:

lado = 12
rea = cuadrado lado,

PROGRAMACIN FUNCIONAL
Algunas expresiones pueden NO llegar a reducirse del
todo, ejemplo: 1/0
A esas expresiones se las denominan CANNICAS,
pero se les asigna un VALOR INDEFINIDO y
corresponde al smbolo bottom(^)
Por lo tanto toda EXPRESIN siempre denota un
VALOR

PROGRAMACIN FUNCIONAL
Evaluacin de las expresiones:
La forma de evaluar es a travs de un mecanismo de
REDUCCIN o SIMPLIFICACIN
Ejemplo:
cuadrado (3 + 4)
=> cuadrado 7 (+)
=> 7 * 7 (cuadrado)
=> 49 (*)
Otra forma sera:
cuadrado (3 + 4)
=> (3 + 4) * (3 + 4) (cuadrado)
=> 7 * (3 + 4) (+)
=> 7 * 7 (+)
=> 49 (*)
No importa la forma de evaluarla, siempre el
resultado final ser el mismo

PROGRAMACIN FUNCIONAL

Existen dos formas de reduccin:


Aunque no lo necesite
SIEMPRE evala los
argumentos

Orden aplicativo
Orden normal
(lazy evaluation)

No calcula ms de lo necesario
La expresin NO es evaluada hasta que
su valor se necesite
Una expresin compartida NO es
evaluada ms de una vez

PROGRAMACIN FUNCIONAL
TIPOS

Bsicos
Derivados

Bsicos: Son los primitivos, ejemplo:


NUM (INT y FLOAT) (Nmeros)
BOOL(Valores de verdad)
CHAR(Caracteres)
Derivados: Se construyen de otros tipos, ejemplo:
(num,char) Tipo de pares de valores
(num char) Tipo de una funcin
TODA FUNCIN TIENE ASOCIADO UN TIPO

PROGRAMACIN FUNCIONAL
Expresiones de tipo polimrficas:
En algunas funciones no es tan fcil deducir su tipo.

Ejemplo:
id x = x
Esta funcin es la funcin Identidad
Su tipo puede ser de char
char, de num
num, etc.
Por lo tanto su tipo ser de B
B
Se utilizan letras griegas para tipos
polimrficos
Otro ejemplo: letra x = A
Su tipo ser B
char

PROGRAMACIN FUNCIONAL
Currificacin:
Mecanismo que reemplaza argumentos estructurados
por argumentos ms simples.
Ejemplo: sean dos definiciones de la Funcin Suma
1. Suma(x,y) = x + y
Suma x y = Sumax (y) = x + y
2. Suma x y = x + y
Existen entre estas dos definiciones una diferencia
sutil: Diferencia de tipos de funcin
Por cada valor de
El tipo de Suma es : (num,num) num
x devuelve una
El tipo de Suma es : num
(num num) funcin
Aplicando la funcin:
Suma(1,2)
3
Suma 1 2
Suma1 aplicado al valor 2

Para todo los


valores devuelve el
siguiente

PROGRAMACIN FUNCIONAL
Clculo Lambda
El un modelo de computacin para definir funciones
Se utiliza para entender los elementos de la
programacin funcional y la semntica subyacente,
independientemente de los detalles sintcticos de un
lenguaje de programacin en particular.
Las expresiones del Lambda clculo pueden ser de 3
clases:
Un simple identificador o una constante. Ej: x, 3
Una definicin de una funcin. Ej:
x.x+1
Una aplicacin de una funcin. La forma es (e1 e2),
dnde se lee e1 se aplica a e2.
Ej: en la funcion cube (x) = x * x * x

x. x * x * x

x. x * x * x) 2)

Evaluamos la
funcin con 2
y resulta en 8

PROGRAMACIN LGICA
Es un paradigma en el cual los programas se son
una serie de aserciones lgicas.
El conocimiento se representa a travs de reglas
y hechos
Los objetos son representados por trminos, los
cuales contienen constantes y variables
PROLOG es el lenguaje lgico ms utilizado.

ELEMENTOS DE LA PROGRAMACIN LGICA


La sintxis bsica es el trmino
Variables:
Se refieren a elementos indeterminados que
pueden sustituirse por cualquier otro.
humano(X), la X puede ser sustituda por
constantes como: juan, pepe, etc.
Los nombres de las variables comienzan con
maysculas y pueden incluir nmeros.
Constantes:
A diferencia de las variables son elementos
determinados.
humano(juan)
La constantes son string de letras en minsculas
(representan objetos atmicos) o string de dgitos
(representan nmeros).

ELEMENTOS DE LA PROGRAMACIN LGICA


Trmino compuesto:
Consisten en un functor seguido de un nmero fijo
de argumentos encerrados entre parntesis, los cuales
son a su vez trminos.
Se denomina aridad al nmero de argumentos.
Se denomina estructura (ground term) a un trmino
compuesto cuyos argumentos no son variables.
Ejemplos:
padre
constante
Longitud
variable
tamao(4,5)
estructura

ELEMENTOS DE LA PROGRAMACIN LGICA


Listas:
La constante [] representa una lista vaca
El functor . construye una lista de un elemento y una
lista. Ejemplo: .(alpha,[]), representa una lista que
contiene un nico elemento que es alpha.
Otra manera de representar la lista es usando [] en
lugar de .(). Ejemplo anterior la lista quedara:
[alpha,[]]
Y tambin se representa utilizando el smbolo |
[alpha|[]]
La notacin general para denotar lista es : [X|Y]
X es el elemento cabeza de la lista e
Y es una lista, que representa la cola de la lista que se
est modelando

CLUSULAS DE HORN
Un programa escrito en un lenguaje lgico es una
secuencia de clusulas.
Las clusulas pueden ser: un Hecho o una Regla.
Hecho:
Expresan relaciones entre objetos
Expresan verdades
Son expresiones del tipo p(t1,t2,.tn)
Ejemplos:
tiene(coche,ruedas)
representa el hecho que un
coche tiene ruedas
longuitud([],0)
representa el hecho que una lista
vaca tiene longuitud cero
virus(ithaqua)
representa el hecho que ithaqua es
un virus.

CLUSULAS DE HORN
Regla:
Sintxis de Prolog
Clusula de Horn
Tiene la forma: conclusin :- condicin.
Dnde:
:- indica Si
conclusin es un simple predicado y
condicin es una conjuncin de predicados,
separados por comas. Representan un AND
lgico
Una regla en PROLOG
conclusin:-condiciones.
En un lenguaje procedural una regla la podramos
representar como: if condicin else conclusin;
Ejemplo:
virus(X):- programa(X),propaga(X)

PROGRAMAS Y QUERIES
Ejemplo de programa:
HECHO
OR

AND

longuitud ([],0).
longuitud ([X|Y],N) :- longuitud(Y, M), N=M + 1.
REGLA

Programa: conjunto de clusulas


?-longuitud([rojo| [verde | [azul | [] ] ] ] ,X).

QUERY

Query: Representa lo que deseamos que sea contestado

PROGRAMAS Y QUERIES
Programa:
longuitud ([],0).
longuitud ([X|Y],N) :- longuitud(Y, M), N=M + 1.
?-longuitud([rojo| [verde | [azul | [] ] ] ] ,X).
longuitud([verde | [azul | [] ] ],M) y X=M+1
longuitud([azul | [] ] ,Z) y M=Z+1
longuitud([],T) Z=T+1 T=0 => Z=1
M=2
X=3

EJECUCIN DE PROGRAMAS
Un programa es un conjunto de reglas y hechos que
proveen una especificacin declarativa de que es lo
que se conoce y la pregunta es el objetivo que
queremos alcanzar.
La ejecucin de dicho programa ser el intento de
obtener una respuesta.
Desde un punto de vista lgico la respuesta a esa
pregunta es YES, si la pregunta puede ser
derivada aplicando deducciones del conjunto de
reglas y hechos dados.

EJECUCIN DE PROGRAMAS: EJEMPLO


Programa que describe una relacin binaria (rel) y
su cierre (clos):
clos (a,f)

rel(a,b).
rel(a,f)
PROGRAMA
rel(a,c).
rel(b,f).
falla
rel(f,g).
clos(X,Y) :- rel(X, Y).
clos(X,Y) : - rel(X, Z), clos(Z, Y).
?-clos(a,f)

clos (a,f)

rel(a,Z1), clos(Z1,f)

QUERY
EJECUCIN

rel(a,b), clos(b,f)

rel(b,f)

YES

PROGRAMACIN ORIENTADA A OBJETOS


Un programa escrito con una lenguaje OO es un conjunto
de OBJETOS que INTERACTAN mandndose
MENSAJES
Los elementos que intervienen en la programacin OO
son:
Objetos
Mensajes
Mtodos
Clases
Objetos:
Son entidades que poseen estado interno y
comportamiento
Es el equivalente a un dato abstracto

PROGRAMACIN ORIENTADA A OBJETOS


Mensajes:
Es una peticin de un objeto a otro para que este
se comporte de una determinada manera,
ejecutando uno de sus mtodos
TODO el procesamiento en este modelo es
activado por mensajes entre objetos.
Mtodos:
Es un programa que est asociado a un objeto
determinado y cuya ejecucin solo puede
desencadenarse a travs de un mensaje recibido
por ste o por sus descendientes
Enva un mensaje
Objeto A
Objeto B
Ejecuta el mtodo
(Objeto Emisor)
(Objeto Receptor) correspondiente
Resultados
(de la ejecucin del mtodo)

PROGRAMACIN ORIENTADA A OBJETOS


Clases:
Es un tipo definido por el usuario que determina las
estructuras de datos y las operaciones asociadas con ese
tipo
Cada objeto pertenece a una clase y recibe de ella su
funcionalidad
Primer nivel de abstraccin de datos: definimos
estructura, comportamiento y tenemos ocultamiento.
La informacin contenida en el objeto solo puede ser
accedida por la ejecucin de los mtodos
correspondientes
Instancia de clase:
Cada vez que se construye un objeto se est creando
una INSTANCIA de esa clase
Una instancia es un objeto individualizado por los
valores que tomen sus atributos

PROGRAMACIN ORIENTADA A OBJETOS


Otro aspecto de las abstracciones de datos
GENERALIZACIN/ESPECIFICACIN
HERENCIA
El segundo nivel de abstraccin consiste en
agrupar las clases en jerarquas de clases (definiendo
SUB y SUPER clases), de forma tal que una clase A
herede todas las propiedades de su superclase B
(suponiendo que tiene una)
Ejemplo:
Se tiene definido la siguiente clase
Nombre
PERSONAEdad
Sexo
Documento
Direccin
Telfono

ver-nombre
ver-edad
ver-telfono
ver-documento
ver-sexo
cambiar-direccin
sacar-documento, etc.

EMPLEADO
Curriculum
cuil

PROGRAMACIN ORIENTADA A OBJETOS


Otros conceptos adicionales
Polimorfismo:
Es la capacidad que tienen los objetos de distintas
clases de responder a mensajes con el mismo nombre
Ejemplo:
3+5
Se aplica suma entre nmeros
Buenos + das
Se concatenan strings
Binding dinmico:
Es la vinculacin en el proceso de ejecucin de los
objetos con los mensajes

PROGRAMACIN ORIENTADA A OBJETOS


C++ (Lenguaje hbrido)
Algunas caractersticas
Lenguaje extendido del lenguaje C
Incorpor caractersticas de POO
Lenguaje compilativo el ambiente de programacin es de
los lenguajes tradicionales.
Los objetos en C:
Se agrupan en tipos denominados clases
Contienen datos internos que definen su estado interno
Soportan ocultamiento de datos
Los mtodos son los que definen su comportamiento
Pueden heredar propiedades de otros objetos
Pueden comunicarse con otros objetos envindose
mensajes

También podría gustarte