Sunteți pe pagina 1din 20

Paradigma de programacin

Un paradigma es una forma de representar y manipular el conocimiento. Representa un


enfoque particular o filosofa para la construccin del software. No es mejor uno que
otro sino que cada uno tiene ventajas y desventajas. Tambin ay situaciones donde un
paradigma resulta m!s apropiado que otro.
Algunos ejemplos de paradigmas de programacin"
#l paradigma imperativo es considerado el m!s com$n y est! representado% por
ejemplo% por el & o por '()*&..
#l paradigma funcional est! representado por la familia de lenguajes +*),% en
particular )ceme.
#l paradigma lgico% un ejemplo es ,R-+-..
#l paradigma orientado a objetos. Un lenguaje completamente orientado a
objetos es )malltal/.
Nota" +a representacin orientada a objetos mejora la estructura de los datos y por lo
tanto se a aplicado a diferentes paradigmas como Redes de ,etri% *mperativo
)ecuencial% +gica de ,redicados% 0uncional... No obstante% la manipulacin no queda
fundamentalmente afectada y por lo tanto el paradigma inicial tampoco a pesar de ser
re1orientado a objetos.
)i bien puede seleccionarse la forma pura de estos paradigmas al momento de
programar% en la pr!ctica es abitual que se me2clen. Tal es el caso de lenguajes como
&33% 4elpi o 5isual 'asic% los cuales combinan el paradigma imperativo con el
orientado a objetos. *ncluso e6isten lenguajes multiparadigma que permiten la me2cla
de forma natural% como en el caso de -2
-tro ejemplo" lenguajes como )ceme o ,rolog% paradigma funcional y lgico
respectivamente% cuentan con estructuras repetitivas. #stas son m!s propias del
paradigma imperativo que a la forma pura de aquellos.
Programacin imperativa
+a programacin imperativa% en contraposicin a la programacin declarativa es un
paradigma de programacin que describe la programacin en trminos del estado del
programa y sentencias que cambian dico estado. +os programas imperativos son un
conjunto de instrucciones que le indican al computador cmo reali2ar una tarea. +a
implementacin de ardware de la mayora de computadores es imperativa7
pr!cticamente todo el ardware de los computadores est! dise8ado para ejecutar cdigo
de m!quina% que es nativo al computador% escrito en una forma imperativa. #sto se debe
a que el ardware de los computadores implementa el paradigma de las 9!quinas de
Turing. 4esde esta perspectiva de bajo nivel% el estilo del programa est! definido por los
contenidos de la memoria% y las sentencias son instrucciones en el lenguaje de m!quina
nativo del computador :por ejemplo el lenguaje ensamblador;. +os lenguajes
imperativos de alto nivel usan variables y sentencias m!s complejas% pero a$n siguen el
mismo paradigma. +as recetas y las listas de revisin de procesos% a pesar de no ser
programas de computadora% son tambin conceptos familiares similares en estilo a la
programacin imperativa7 cada paso es una instruccin% y el mundo fsico guarda el
estado :<oom;. ,uesto que las ideas de la programacin imperativa son tanto
conceptualmete familiares :=; y directamente embebidas o incrustadas en el ardware% la
mayora de los lenguajes de computadores son de un estilo imperativo.
+a mayora de los lenguajes de alto nivel incorporan cuatro tipos b!sicos de sentencias"
asignaciones% ciclos% ramificaciones condicionales% y ramificaciones incondicionales
:para estos $ltimos vase control de flujo;. +as sentencias de asignacin% en general%
reali2an una operacin sobre la informacin locali2ada en la memoria y almacenan los
resultados para uso posterior. +os lenguajes imperativos de alto nivel% adicionalmente%
permiten la evaluacin de e6presiones complejas% que pueden consistir de operaciones
aritmticas y evaluaciones de funciones y la asignacin del valor resultante a la
memoria. +as sentencias de ciclos permite a una secuencia de instrucciones ser
ejecutada m$ltiples veces. +o ciclos pueden tanto ejecutar las sentencias que ellos
tienen un n$mero predefinido de veces% como ejecutarlas repetidamente asta que
alguna condicin cambie. +as sentecias de ramificacin condicional permiten a un
bloque de instrucciones o sentencias ser ejecutado slo si alguna condicin se cumple.
4e lo contrario% las sentencias son saltadas y la secuencia de ejecucin continua al
siguiente bloque de instruccione. +as ramificaciones incondicionales permiten a la
ejecucin de una sencuencia ser transferida a alguna otra parte del programa. #stas
incluyen el salto llamado >goto> en mucos lenguajes y la llamada de un subprograma o
procedimiento.
+os primeros lenguajes imperativos fueron los lenguajes de m!quina de los
computadores originales. #n estos lenguajes% las instrucciones fueron muy simples% lo
cual i2o la implementacin de ardware f!cil% pero obstruyendo la creacin de
programas complejos. 0ortran% cuyo desarrollo fue iniciado en ?@AB por Con 'ac/us en
*'9% fue el primer gran lenguaje de programacin en superar los obst!culos
presentados por el cdigo de m!quina en la creacin de programas complejos.
Algunos lenguajes imperativos
'()*&
&
&33
Cava
&D
,erl
-btenido de >ttp"EEes.wi/ipedia.orgEwi/iE,rogramaciF&GF'GnHimperativa>
+a Programacin funcional es un paradigma de programacin declarativa basado en la
utili2acin de funciones matem!ticas.
)us orgenes provienen del &!lculo +ambda :o I1c!lculo;% una teora matem!tica
elaborada por (lon2o &urc como apoyo a sus estudios sobre computabilidad. Un
lenguaje funcional es% a grandes rasgos% un azcar sintctico del &!lculo +ambda.
Utilidad
#l objetivo es conseguir lenguajes e6presivos y matemticamente elegantes% en los que
no sea necesario bajar al nivel de la m!quina para describir el proceso llevado a cabo
por el programa% y evitando el concepto de estado del cmputo. +a secuencia de
computaciones llevadas a cabo por el programa se regira $nica y e6clusivamente por la
reescritura de definiciones m!s amplias a otras cada ve2 m!s concretas y definidas%
usando lo que se denominan >definiciones dirigidas>.
Caractersticas
+os programas escritos en un lenguaje funcional est!n constituidos $nicamente por
definiciones de funciones% entendiendo stas no como subprogramas cl!sicos de un
lenguaje imperativo% sino como funciones puramente matem!ticas% en las que se
verifican ciertas propiedades como la transparencia referencial :el significado de una
e6presin depende $nicamente del significado de sus sube6presiones;% y por tanto% la
carencia total de efectos laterales.
-tras caractersticas propias de estos lenguajes son la no e6istencia de asignaciones de
variables y la falta de construcciones estructuradas como la secuencia o la iteracin :lo
que obliga en la pr!ctica a que todas las repeticiones de instrucciones se lleven a cabo
por medio de funciones recursivas;.
#6isten dos grandes categoras de lenguajes funcionales" los funcionales puros y los
hbridos. +a diferencia entre ambos estriba en que los lenguajes funcionales bridos
son menos dogm!ticos que los puros% al admitir conceptos tomados de los lenguajes
imperativos% como las secuencias de instrucciones o la asignacin de variables. #n
contraste% los lenguajes funcionales puros tienen una mayor potencia e6presiva%
conservando a la ve2 su transparencia referencial% algo que no se cumple siempre con un
lenguaje funcional brido.
#ntre los lenguajes funcionales puros% cabe destacar a Jas/ell y 9irandaK. +os
lenguajes funcionales bridos m!s conocidos son +isp% )ceme% -caml y )tandard 9+
:estos dos $ltimos% descendientes del lenguaje 9+;.
Programacin lgica
+a programacin lgica consiste en la aplicacin del corpus de conocimiento sobre
lgica para el dise8o de lenguajes de programacin7 no debe confundirse con la
disciplina de la lgica computacional.
+a programacin lgica comprende dos paradigmas de programacin" la programacin
declarativa y la programacin funcional. +a programacin declarativa gira en torno al
concepto de predicado% o relacin entre elementos. +a programacin funcional se basa
en el concepto de funcin :que no es m!s que una evolucin de los predicados;% de
corte m!s matem!tico.
Motivacin
Jistricamente% los ordenadores se an programado utili2ando lenguajes muy cercanos
a las peculiaridades de la propia m!quina" operaciones aritmticas simples%
instrucciones de acceso a memoria% etc. Un programa escrito de esta manera puede
ocultar totalmente su propsito a la comprensin de un ser umano% incluso uno
entrenado. Joy da% estos lenguajes pertenecientes al paradigma de la ,rogramacin
imperativa an evolucionado de manera que ya no son tan crpticos. )in embargo% a$n
e6isten casos donde el uso de lenguajes imperativos es inviable debido a la complejidad
del problema a resolver.
#n cambio% la lgica matem!tica es la manera m!s sencilla% para el intelecto umano% de
e6presar formalmente problemas complejos y de resolverlos mediante la aplicacin de
reglas% iptesis y teoremas. 4e a que el concepto de >programacin lgica> resulte
atractivo en diversos campos donde la programacin tradicional es un fracaso.
Campos de aplicacin
+a programacin lgica encuentra su habitat natural en aplicaciones de inteligencia
artificial o relacionadas"
)istemas e6pertos% donde un sistema de informacin imita las recomendaciones
de un e6perto sobre alg$n dominio de conocimiento.
4emostracin autom!tica de teoremas% donde un programa genera nuevos
teoremas sobre una teora e6istente.
Reconocimiento de lenguaje natural% donde un programa es capa2 de
comprender :con limitaciones; la informacin contenida en una e6presin
lingLstica umana.
#tc.
+a programacin lgica tambin se utili2a en aplicaciones m!s >mundanas> pero de
manera muy limitada% ya que la programacin tradicional es m!s adecuada a tareas de
propsito general.
Fundamentos
+a mayora de los lenguajes de programacin lgica se basan en la teora lgica de
primer orden% aunque tambin incorporan algunos comportamientos de orden superior.
#n este sentido% destacan los lenguajes funcionales% ya que se basan en el c!lculo
lambda% que es la $nica teora lgica de orden superior que es demostradamente
computable :asta el momento;.
En qu consiste (ejemplo)
+a programacin lgica permite formali2ar ecos del mundo real% por ejemplo"
las aves vuelan
los pinginos no vuelan
"pichurri" es un ave
"sandokan" es un perro
"alegra" es un ave
"pocholo" es un pingino
y tambin reglas o restricciones"
una mascota vuela si es un ave y no es un pingino
(nte dico >programa> es posible establecer iptesis que no son mas que preguntas o
incgnitas% por ejemplo"
"pichurri" vuela ?
qu mascotas vuelan ?
.racias a que la lgica de primer orden es computable% el ordenador ser! capa2 de
verificar la iptesis% es decir% responder a las incgnitas"
Es cierto que "pichurri" vuela.
"pichurri" y "alegra" vuelan.
-bsrvese que el programa lgico no solamente es capa2 de responder si una
determinada iptesis es verdadera o falsa. Tambin es capa2 de determinar que valores
de la incgnita acen cierta la iptesis.
#ste ejemplo es claramente acadmico. )in embargo% consideremos el siguiente
ejemplo" el sistema de control de sem!foros de una ciudad.
#l estado de cada uno de los sem!foros :verde% rojo o !mbar; constituye los ecos del
mundo real. #l programa en s consiste en unas pocas reglas de sentido com$n"
determinados sem!foros no pueden permanecer simult!neamente en verde% un sem!foro
solamente puede transitar de verde a ambar y de ambar a rojo% etc. +a iptesis es el
estado en el que deberan estar cada uno de los semaforos en el siguiente instante de
tiempo.
#ste es un ejemplo imposible de resolver mediante programacin tradicional% ya que la
lgica subyacente al comportamiento de los sem!foros en su conjunto queda
enmascarada por simples ordenes imperativas del tipo >cambiar color de tal o cual
semaforo>.
Lenguajes
#l lenguaje de programacin lgica por e6celencia es ,rolog% que cuenta con diversas
variantes. +a m!s importante es la ,rogramacin lgica con restricciones% que posibilita
la resolucin de ecuaciones lineales adem!s de la demostracin de iptesis.
Biliogra!a
+as siguientes referencias bibliogr!ficas corresponden a literatura en ingls"
Foundations of Logic Programming% C.M. +loyd% )pringer15erlag% ?@@?.
Essentials of Logic Programming% &. Jogger% &larendon ,ress% -6ford% ?@@N.
Logic for Computer Science: Foundations of Automatic Theorem Proving%
C.J. .allier% Con Miley and )ons% ?@OP.
#6isten pocas referencias a literatura en castellano"
Lgica nform!tica% C. &uena% #ditorial (lian2a% ?@OA.
Programacin estructurada
+a programacin estructurada es una forma de escribir programas de ordenador
utili2ando ciertas instrucciones de control :bucles y condicionales; y evitando el uso de
la instruccin o instrucciones de transferencia incondicional :tipo .-T-;.
Control de la ejecucin " #$%$
Una de las cuestiones m!s importantes que ay que tener en cuenta al construir un
programa en un lenguaje de alto nivel% es el control de su ejecucin.
)on raros los programas que constan de un conjunto de instrucciones que se ejecutan
sucesivamente una tras otra.
#n la mayor parte de los casos% diversas partes del programa se ejecutan o no%
dependiendo de que se cumpla alguna condicin.
(dem!s% ay instrucciones :los bucles; que deben efectuarse varias veces% ya sea en
n$mero fijo o asta que se cumpla una condicin determinada.
+os lenguajes m!s antiguos :como 0ortran; se apoyaban en una sola instruccin para
definir el control de los programas" la instruccin GOTO :del ingls go to% que significa
ir a;% que corresponde a la transferencia incondicional de los lenguajes simblicos% a la
que se a8ade alguna forma condicional% combinada con ella% que permite bifurcar el
orden de ejecucin de las instrucciones.
Tanto en 0ortran como en 'asic% la instruccin GOTO y sus variantes van acompa8adas
de una o m!s etiquetas% que indican el n$mero de la instruccin a la que debe dirigirse la
transferencia de control.
,ero las etiquetas numricas y las transferencias arbitrarias acen los programas muy
poco legibles y difciles de comprender.
&omo primer intento de resolver el problema% en lenguajes m!s modernos se recurri a
utili2ar etiquetas no numricas% igual que se ace en los lenguajes simblicos de
segunda generacin.
&entajas de la programacin estructurada
&on la programacin estructurada elaborar programas de computador sigue siendo una
labor que demanda esfuer2o% creatividad% abilidad y cuidado. )in embargo% con este
nuevo estilo podemos obtener las siguientes ventajas" ?.1 +os programas son m!s f!ciles
de entender. Un programa estructurado puede ser ledo en secuencia% de arriba acia
abajo% sin necesidad de estar saltando de un sitio a otro en la lgica% lo cual es tpico de
otros estilos de programacin. +a estructura del programa es mas clara puesto que las
instrucciones est!n mas ligadas o relacionadas entre s% por lo que es m!s f!cil
comprender lo que ace cada funcin. Q.Reduccin del esfuer2o en las pruebas. #l
programa se puede tener listo para produccin normal en un tiempo menor del
tradicional7 por otro lado% el seguimiento de las fallas:>debugging>; se facilita debido a
la lgica m!s visible% de tal forma que los errores se pueden detectar y corregir mas
f!cilmente. G.Reduccin de los costos de mantenimiento. B.,rogramas m!s sencillos y
m!s r!pidos A.(umento de la productividad del programador R.)e facilita la utili2acin
de las otras tcnicas para el mejoramiento de la productividad en programacin P.+os
programas quedan mejor documentados internamente.
desventajas" es relativamente dificil de aprender ya que es para e6pertos
'urgimiento de la programacin estructurada
)in embargo% a finales de los a8os sesenta surgi una nueva forma de programar que
reduce a la mnima e6presin el uso de la instruccin GOTO y la sustituye por otras m!s
comprensibles.
Un famoso teorema% demostrado por #dsger 4ij/stra :?@GN1QNNQ; en los a8os sesenta%
demuestra que todo programa puede escribirse utili2ando $nicamente las tres
instrucciones de control siguientes"
#l bloque secuencial de instrucciones% instrucciones ejecutadas sucesivamente.
+a instruccin condicional alternativa% de la forma >*0 condicin TJ#N
instruccin1? #+)# instruccin1Q>.
o )i la condicin se cumple% se ejecutar! >instruccin1?>.
o #n caso contrario% se ejecuta >instruccin1Q>.
o (breviadamente% esta instruccin se suele llamar *01TJ#N1#+)#.
#l bucle condicional >MJ*+# condicin 4- instruccin>% que ejecuta la
instruccin repetidamente mientras la condicin se cumpla.
#n su lugar% se puede utili2ar tambin la forma >UNT*+ condicin 4- instruccin>% que
ejecuta la instruccin asta que la condicin se cumpla. +os dos bucles se diferencian
entre s porque en la forma MJ*+# la condicin se comprueba al principio% por lo que
es posible que la instruccin no se ejecute ni una sola ve2.
#n cambio% en la forma UNT*+ la condicin se comprueba al final del bucle% por lo que
la instruccin se ejecuta siempre al menos una ve2.
+os programas que utili2an slo estas tres instrucciones de control b!sicas o sus
variantes :como los bucles bm%bmcondicional &()#;% pero no la instruccin .-T-% se
llaman estructurados. 5er estructuras de control.
+a programacin estructurada :llamada tambin >programacin sin .-T->; se
convirti durante los a8os setenta en la forma de programar m!s e6tendida. ( pesar de
ello% la mayora de los lenguajes conservan la instruccin GOTO y las etiquetas de las
instrucciones% para utili2arla en casos muy especiales% aunque normalmente se
desaconseja su uso.
#ntre los lenguajes de alto nivel% ,ascal% & y (da pueden considerarse especiali2ados en
programacin estructurada% y aunque todos ellos permiten utili2ar la instruccin GOTO%
se desaconseja su uso :aunque en & es una pr!ctica com$n utili2arlo para manejo de
errores;.
4iferente que la programacin estructurada la programacin orientada a objetos se
enfoca en reducir la cantidad de estructuras de control y reempla2arlo con el concepto
de polimorfismo. ($n as los programadores todava utili2an las estructuras de control
:if% wile% for% etc...; para implementar sus algoritmos porque en mucos casos es la
forma m!s natural de acerlo.
Programacin dirigida por eventos
+a programacin dirigida por eventos es un paradigma de programacin en el que
tanto la estructura como la ejecucin de los programas van determinados por los sucesos
que ocurran en el sistema o que ellos mismos provoquen.
,ara entender la programacin dirigida por eventos% podemos oponerla a lo que no es"
mientras en la programacin secuencial es el programador el que define cu!l va a ser el
flujo del programa% en la programacin dirigida por eventos ser! el propio usuario 11o lo
que sea que est accionando el programa11 el que dirija el flujo del programa.
#n la programacin dirigida por eventos% al comen2ar la ejecucin del programa se
llevar!n a cabo las iniciali2aciones y dem!s cdigo inicial y a continuacin el programa
quedar! bloqueado asta que se produ2ca alg$n evento. &uando alguno de estos eventos
tenga lugar% el programa pasar! a ejecutar el cdigo del correspondiente manejador de
evento. ,or ejemplo% si el evento consiste en que el usuario a eco clic/ en el botn
de play de un reproductor de pelculas% se ejecutar! el cdigo del manejador de evento%
que ser! el que aga que la pelcula se muestre por pantalla.
Un ejemplo claro lo tenemos en los sistemas de programacin +e6ico y 5isual 'asic% en
los que a cada elemento del programa :objetos% controles% etctera; se le asignan una
serie de eventos que generar! dico elemento% como la pulsacin de un botn del ratn
sobre l o el redibujado del control.
-btenido de >ttp"EEes.wi/ipedia.orgEwi/iE,rogramaciF&GF'GnHdirigidaHporHeventos>
Programacin "rientada a Aspectos
+a Programacin "rientada a Aspectos :,-(; es un paradigma de programacin
relativamente reciente cuya intencin es permitir una adecuada modulari2acin de las
aplicaciones y posibilitar una mejor separacin de conceptos. .racias a la ,-( se
pueden capturar los diferentes conceptos que componen una aplicacin en entidades
bien definidas% de manera apropiada en cada uno de los casos y eliminando las
dependencias inerentes entre cada uno de los mdulos. 4e esta forma se consigue
ra2onar mejor sobre los conceptos% se elimina la dispersin del cdigo y las
implementaciones resultan m!s comprensibles% adaptables y reusables. 5arias
tecnologas con nombres diferentes se encaminan a la consecucin de los mismos
objetivos y as% el trmino ,-( es usado para referirse a varias tecnologas relacionadas
como los mtodos adaptivos% los filtros de composicin% la programacin orientada a
sujetos o la separacin multidimensional de competencias.
(rolemas de otros paradigmas
9ucas veces nos encontramos% a la ora de programar% con problemas que no podemos
resolver de una manera adecuada con las tcnicas abituales usadas en la programacin
imperativa o en la programacin orientada a objetos. &on stas% nos vemos for2ados a
tomar decisiones de dise8o que repercuten de manera importante en el desarrollo de la
aplicacin y que nos alejan con frecuencia de otras posibilidades.
,or otro lado% la implementacin de dicas decisiones a menudo implica escribir lneas
de cdigo que est!n distribuidas por toda% o gran parte% de la aplicacin para definir la
lgica de cierta propiedad o comportamiento del sistema% con las consecuentes
dificultades de mantenimiento y desarrollo que ello implica. #n ingls este problema se
conoce como scattered code% que podramos traducir como cdigo disperso. -tro
problema que puede aparecer es que un mismo mdulo se implemente de modo que
maneje m$ltiples comportamientos o aspectos del sistema simult!neamente. #n ingls
este problema se conoce como tangled code% que podramos traducir como cdigo
enmara8ado. #l eco es que ay ciertas decisiones de dise8o que son difciles de
capturar con las tcnicas antes citadas% debindose al eco de que ciertos problemas no
se dejan encapsular de igual forma que los que abitualmente se an resuelto con
funciones u objetos. +a resolucin de stos supone o bien la utili2acin de repetidas
lneas de cdigo por diferentes componentes del sistema% o bien la superposicin dentro
de un componente de funcionalidades dispares.
&entajas de la ($)
+a programacin orientada a aspectos% permite% de una manera comprensible y clara%
definir nuestras aplicaciones considerando estos problemas. ,or aspectos se entiende
dicos problemas que afectan a la aplicacin de manera ori2ontal y que la
programacin orientada a aspectos persigue poder tenerlos de manera aislada de forma
adecuada y comprensible% d!ndonos la posibilidad de poder construir el sistema
componindolos junto con el resto de componentes.
(rogramacin orientada a ojetos
+a programacin orientada a objetos :,--; supuso un gran paso en la ingeniera del
software% ya que presentaba un modelo de objetos que pareca encajar de manera
adecuada con los problemas reales. +a cuestin era saber descomponer de la mejor
manera el dominio del problema al que nos enfrent!ramos% encapsulando cada concepto
en lo que se dio en llamar objetos y acindoles interactuar entre ellos% abindoles
dotado de una serie de propiedades.
)urgieron as numerosas metodologas para ayudar en tal proceso de descomposicin y
aparecieron erramientas que incluso automati2aban parte del proceso. #sto no a
cambiado y se sigue aciendo en el proceso de desarrollo del software. )in embargo%
frecuentemente la relacin entre la complejidad de la solucin y el problema resuelto
ace pensar en la necesidad de un nuevo cambio. (s pues% nos encontramos con
mucos problemas donde la ,-- no es suficiente para capturar de una manera clara
todas las propiedades y comportamientos de los que queremos dotar a nuestra
aplicacin. (s mismo% la programacin imperativa tampoco nos soluciona el problema.
$jetivos
#ntre los objetivos que se a propuesto la ,-( est!n% principalmente% :?; el de separar
conceptos y :Q; el de minimi2ar las dependencias entre ellos. &on el primer objetivo se
persigue que cada decisin se tome en un lugar concreto y no diseminada por la
aplicacin. &on el segundo% se pretende desacoplar los distintos elementos que
intervienen en un programa.
&entajas
)u consecucin implicara las siguientes ventajas"
Un cdigo menos enmara8ado% m!s natural y m!s reducido.
9ayor facilidad para ra2onar sobre los conceptos% ya que est!n separados y las
dependencias entre ellos son mnimas.
Un cdigo m!s f!cil de depurar y m!s f!cil de mantener.
)e consigue que un conjunto grande de modificaciones en la definicin de una
materia tenga un impacto mnimo en las otras.
)e tiene un cdigo m!s reusable y que se puede acoplar y desacoplar cuando sea
necesario.
Enlaces e*ternos
&ada ve2 se puede leer m!s sobre ,-( en *nternet. +a siguiente lista muestra algunos
sitios de inters sobre aspectos"
#l sitio de (spectC" ttp"EEwww.aspectj.org
+a p!gina de .regor Sic2ales" ttp"EEwww.cs.ubc.caETgregorE
+a p!gina de 9ira 9e2ini" ttp"EEwww.informati/.uni1siegen.deETmiraE
+a p!gina de &ristina 5ideira +opes" ttp"EEwww.ics.uci.eduETlopesE
,!gina de Sarl +iebererr" ttp"EEwww.ccs.neu.eduEomeElieberE
,!gina del grupo 4emeter" ttp"EEwww.ccs.neu.eduEresearcEdemeterE
)itio para el 4esarrollo de )oftware -rientado a (spectos" ttp"EEwww.aosd.net
)itio que re$ne varios lin/s sobre la ,-("
ttp"EEwww.iturls.comEenglisEtecotspotETJHe.asp
)itio en #spa8ol sobre (spectos y (spectC" ttp"EEwww.programemos.com
,0& sobre (spectos ttp"EEes.geocities.comEnulainEcomputing
Programacin orientada a o#jetos
La e$actitud de la informacin de este art%culo o seccin est! discutida
+a versin actual no es necesariamente fiable7 en la p!gina de discusin puede consultar
el debate al respecto.
+a Programacin "rientada a "#jetos &P"" u ""P seg$n siglas en ingls; es un
paradigma de programacin que define los programas en trminos de >clases de
objetos>% objetos que son entidades que combinan estado :es decir% datos;%
comportamiento :esto es% procedimientos o mtodos; e identidad :propiedad del objeto
que lo diferencia del resto;. +a programacin orientada a objetos e6presa un programa
como un conjunto de estos objetos% que colaboran entre ellos para reali2ar tareas. #sto
permite acer los programas y mdulos m!s f!ciles de escribir% mantener y reutili2ar.
4e esta forma% un objeto contiene toda la informacin% :los denominados atributos; que
permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases :e
incluso entre objetos de una misma clase% al poder tener valores bien diferenciados en
sus atributos;. ( su ve2% dispone de mecanismos de interaccin :los llamados mtodos;
que favorecen la comunicacin entre objetos :de una misma clase o de distintas;% y en
consecuencia% el cambio de estado en los propios objetos. #sta caracterstica lleva a
tratarlos como unidades indivisibles% en las que no se separan :ni deben separarse;
informacin :datos; y procesamiento :mtodos;.
4ada esta propiedad de conjunto de una clase de objetos% que al contar con una serie de
atributos definitorios% requiere de unos mtodos para poder tratarlos :lo que ace que
ambos conceptos est!n ntimamente entrela2ados;% el programador debe pensar
indistintamente en ambos trminos% ya que no debe nunca separar o dar mayor
importancia a los atributos en favor de los mtodos% ni viceversa. Jacerlo puede llevar
al programador a seguir el !bito errneo de crear clases contenedoras de informacin
por un lado y clases con mtodos que manejen esa informacin por otro :llegando a una
programacin estructurada camuflada en un lenguaje de programacin orientado a
objetos;.
#sto difiere de los lenguajes imperativos tradicionales% en los que los datos y los
procedimientos est!n separados y sin relacin% ya que lo $nico que se busca es el
procesamiento de unos datos de entrada para obtener otros de salida. +a programacin
estructurada anima al programador a pensar sobre todo en trminos de procedimientos o
funciones% y en segundo lugar en las estructuras de datos que esos procedimientos
manejan. +os programadores de lenguajes imperativos escriben funciones y despus les
pasan datos. +os programadores que emplean lenguajes orientados a objetos definen
objetos con datos y mtodos y despus envan mensajes a los objetos diciendo qu
realicen esos mtodos en s mismos.
(lgunas personas tambin distinguen la ,-- sin clases% la cual es llamada a veces
programacin basada en objetos.
"rigen
+os conceptos de la programacin orientada a objetos tienen origen en )imula RP% un
lenguaje dise8ado para acer simulaciones% creado por -le1Coan 4al y Sristen
Nygaard del &entro de &mputo Noruego en -slo. )eg$n se informa% la istoria es que
trabajaban en simulaciones de naves% y fueron confundidos por la e6plosin
combinatoria de cmo las diversas cualidades de diversas naves podan afectar unas a
las otras. +a idea ocurri para agrupar los diversos tipos de naves en diversas clases de
objetos% siendo responsable cada clase de objetos de definir sus propios datos y
comportamiento. 0ueron refinados m!s tarde en )malltal/% que fue desarrollado en
)imula en Uero6 ,(R& :y cuya primera vesin fue escrita sobre 'asic; pero dise8ado
para ser un sistema completamente din!mico en el cual los objetos se podran crear y
modificar >en marca> en lugar de tener un sistema basado en programas est!ticos.
+a programacin orientada a objetos tom posicin como la metodologa de
programacin dominante a mediados de los a8os ocenta% en gran parte debido a la
influencia de &33 % una e6tensin del lenguaje de programacin &. )u dominacin fue
consolidada gracias al auge de las *nterfaces gr!ficas de usuario% para los cuales la
programacin orientada a objetos est! particularmente bien adaptada. #n este caso% se
abla tambin de programacin orientada a eventos.
+as caractersticas de orientacin a objetos fueron agregadas a mucos lenguajes
e6istentes durante ese tiempo% incluyendo (da% '()*&% +isp% ,ascal% y otros. +a adicin
de estas caractersticas a los lenguajes que no fueron dise8ados inicialmente para ellas
condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento
del cdigo. +os lenguajes orientados a objetos >puros>% por otra parte% carecan de las
caractersticas de las cuales mucos programadores aban venido a depender. ,ara
saltar este obst!culo% se icieron mucas tentativas para crear nuevos lenguajes basados
en mtodos orientados a objetos% pero permitiendo algunas caractersticas imperativas
de maneras >seguras>. #l #iffel de 'ertrand 9eyer fue un temprano y moderadamente
acertado lenguaje con esos objetivos pero aora a sido esencialmente reempla2ado por
Cava% en gran parte debido a la aparicin de *nternet% y a la implementacin de la
m!quina virtual de Cava en la mayora de navegadores.
'iferencias con la programacin imperativa
(unque la programacin imperativa :a veces llamada procedural o procedimental;
condujo a mejoras de la tcnica de programacin secuencial% tales como la
programacin estructurada y >refinamientos sucesivos>% los mtodos modernos de
dise8o de software orientado a objetos incluyen mejoras entre las que est!n el uso de los
patrones de dise8o% dise8o por contrato% y lenguajes de modelado :ej" U9+;.
+as principales diferencias entre la programacin imperativa y la orientada a objetos
son"
+a programacin orientada a objetos es m!s moderna% es una evolucin de la
programacin imperativa que plasma en el dise8o de una familia de lenguajes
conceptos que e6istan previamente con algunos nuevos.
+a programacin orientada a objetos se basa en lenguajes que soportan sint!ctica
y sem!nticamente la unin entre los tipos abstractos de datos y sus operaciones
:a esta unin se la suele llamar clase;.
+a programacin orientada a objetos incorpora en su entorno de ejecucin
mecanismos tales como el polimorfismo y el envo de mensajes entre objetos.
#rroneamente se le adjudica a la programacin imperativa cl!sica ciertos problemas
como si fueran inerentes a la misma. #sos problemas fueron acindose cada ve2 m!s
graves y antes de la programacin orientada a objetos diversos autores :de los que
podemos destacar a Courdon; encontraron soluciones basadas en aplicar estrictas
metodologas de trabajo. 4e esa poca son los conceptos de coesin y acoplamiento.
4e esos problemas se destacan los siguientes"
9odelo mental anmalo. Nuestra imagen del mundo se apoya en los seres% a los
que asignamos nombres sustantivos% mientras la programacin cl!sica se basa en
el comportamiento% representado usualmente por verbos.
#s difcil modificar y e6tender los programas% pues suele aber datos
compartidos por varios subprogramas% que introducen interacciones ocultas entre
ellos.
#s difcil mantener los programas. &asi todos los sistemas inform!ticos grandes
tienen errores ocultos% que no surgen a la lu2 asta despus de mucas oras de
funcionamiento.
#s difcil reutili2ar los programas. #s pr!cticamente imposible aprovecar en
una aplicacin nueva las subrutinas que se dise8aron para otra.
#s compleja la coordinacin y organi2acin entre programadores para la
creacin de aplicaciones de media y gran envergadura.
#n la programacin orientada a objetos pura no deben utili2arse llamadas de subrutinas%
$nicamente mensajes.
,or ello% a veces recibe el nombre de programacin sin CALL% igual que la
programacin estructurada se llama tambin programacin sin ("T".
)in embargo% no todos los lenguajes orientados a objetos proben la instruccin &(++
:o su equivalente;% permitiendo reali2ar programacin brida% imperativa y orientada a
objetos a la ve2.
La Programacin "rientada a "#jetos &P"") como solucin
+a programacin orientada a objetos es una nueva forma de programar que trata de
encontrar solucin a estos problemas. *ntroduce nuevos conceptos% que superan y
amplan conceptos antiguos ya conocidos. #ntre ellos destacan los siguientes"
"#jeto" entidad provista de un conjunto de propiedades o atributos :datos; y de
comportamiento o funcionalidad :>mtodos>;. &orresponden a los objetos reales
del mundo que nos rodea% o a objetos internos del sistema :del programa;.
Clase" definiciones de las propiedades y comportamiento de un tipo de objeto
concreto. +a instanciacin es la lectura de estas definiciones y la creacin de un
objeto a partir de ellas.
*+todo" algoritmo asociado a un objeto :o a una clase de objetos;% cuya
ejecucin se desencadena tras la recepcin de un >mensaje>. 4esde el punto de
vista del comportamiento% es lo que el objeto puede acer. Un mtodo puede
producir un cambio en las propiedades del objeto% yEo la generacin de un
>evento> con un nuevo mensaje para otro objeto del sistema.
Evento" un suceso en el sistema :tal como una interaccin del usuario con la
m!quina% o un mensaje enviado por un objeto;. #l sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente.
*ensaje" una comunicacin dirigida a un objeto% que le ordena que ejecute uno
de sus mtodos con ciertos par!metros asociados al evento que lo gener.
Propiedad o atri#uto" contenedor de un tipo de datos asociados a un objeto :o a
una clase de objetos;% que ace los datos visibles desde fuera del objeto% y cuyo
valor puede ser alterado por la ejecucin de alg$n mtodo.
Estado interno" es una propiedad invisible de los objetos% que puede ser
$nicamente accedida y alterada por un mtodo del objeto% y que se utili2a para
indicar distintas situaciones posibles para el objeto :o clase de objetos;.
#n comparacin con un lenguaje imperativo% una >variable> no es m!s que un
contenedor interno del atributo del objeto o de un estado interno% as como la >funcin>
es un procedimiento interno del mtodo del objeto.
Caracter%sticas de la P""
Jay un cierto desacuerdo sobre e6actamente qu caractersticas de un mtodo de
programacin o lenguaje le definen como >orientado a objetos>% pero ay un consenso
general en que las caractersticas siguientes son las m!s importantes :para m!s
informacin% seguir los enlaces respectivos;"
A#straccin" cada objeto en el sistema sirve como modelo de un >agente>
abstracto que puede reali2ar trabajo% informar y cambiar su estado% y
>comunicarse> con otros objetos en el sistema sin revelar cmo se implementan
estas caractersticas. +os procesos% las funciones o los mtodos pueden tambin
ser abstrados y cuando lo est!n% una variedad de tcnicas son requeridas para
ampliar una abstraccin.
Encapsulamiento" tambin llamado >ocultacin de la informacin>. &ada
objeto est! aislado del e6terior% es un mdulo natural% y cada tipo de objeto
e6pone una interfaz a otros objetos que especifica cmo pueden interactuar con
los objetos de la clase. #l aislamiento protege a las propiedades de un objeto
contra su modificacin por quien no tenga dereco a acceder a ellas% solamente
los propios mtodos internos del objeto pueden acceder a su estado. #sto asegura
que otros objetos no pueden cambiar el estado interno de un objeto de maneras
inesperadas% eliminando efectos secundarios e interacciones inesperadas.
(lgunos lenguajes relajan esto% permitiendo un acceso directo a los datos
internos del objeto de una manera controlada y limitando el grado de
abstraccin. +a aplicacin entera se reduce a un agregado o rompecabe2as de
objetos.
Polimorfismo" comportamientos diferentes% asociados a objetos distintos%
pueden compartir el mismo nombre% al llamarlos por ese nombre se utili2ar! el
comportamiento correspondiente al objeto que se est usando. - dico de otro
modo% las referencias y las colecciones de objetos pueden contener objetos de
diferentes tipos% y la invocacin de un comportamiento en una referencia
producir! el comportamiento correcto para el tipo real del objeto referenciado.
&uando esto ocurre en >tiempo de ejecucin>% esta $ltima caracterstica se llama
asignacin tarda o asignacin dinmica. (lgunos lenguajes proporcionan
medios m!s est!ticos :en >tiempo de compilacin>; de polimorfismo% tales como
las plantillas y la sobrecarga de operadores de &33.
,erencia" las clases no est!n aisladas% sino que se relacionan entre s% formando
una jerarqua de clasificacin. +os objetos eredan las propiedades y el
comportamiento de todas las clases a las que pertenecen. +a erencia organi2a y
facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser
definidos y creados como tipos especiali2ados de objetos pree6istentes. #stos
pueden compartir :y e6tender; su comportamiento sin tener que reimplementar
su comportamiento. #sto suele acerse abitualmente agrupando los objetos en
clases y estas en rboles o enrejados que reflejan un comportamiento com$n.
&uando un objeto pertenece a m!s de una clase se llama erencia m$ltiple7 esta
caracterstica no est! soportada por algunos lenguajes :como Cava;.
Lenguajes orientados a o#jetos
#ntre los lenguajes orientados a objetos destacan los siguientes"
(da
&33
&D
&larion
4elpi
#iffel
Cava
+e6ico :en castellano;
-bjective1&
-caml
,J,
,ower'uilder
,yton
Ruby
)malltal/
No todos estos lenguajes de programacin son igualmente puros :avan2ados; en
orientacin a objetos.
(l igual que &33 otros lenguajes% como --&-'-+% --+*),% --,R-+-. y -bject
R#UU% an sido creados a8adiendo e6tensiones orientadas a objetos a un lenguaje de
programacin cl!sico.
Un nuevo paso en la abstraccin de paradigmas de programacin es la ,rogramacin
-rientada a (spectos :,-(;. (unque es todava una metodologa en estado de
maduracin% cada ve2 atrae a m!s investigadores e incluso proyectos comerciales en
todo el mundo.
-btenido de >ttp"EEes.wi/ipedia.orgEwi/iE,rogramaciF&GF'GnHorientadaHaHobjetos>
Programacin con restricciones
+a programacin con restricciones es un paradigma de la programacin en inform!tica%
actualmente usado como una tecnologa de software para la descripcin y resolucin
problemas combinatorios particularmente difciles% especialmente en las areas de
planificacin y calendari2acin.
#ste paradigma representa uno de los desarrollos m!s fascinantes en los lenguajes de
programacin desde ?@@N y no es sorprendente que recientemente aya sido identificada
por la (&9 :(sociacin de 9aquinaria &omputacional; como una direccin estratgica
en la investigacin en computacin.
'!sicamente es un paradigma de programacin% en la cual se especifica un conjunto de
restricciones% las cuales deben satisfacer una solucin% en ve2 de especificar los pasos
para obtener dica solucin.
+a programacin con restricciones se relaciona muco con la programacin lgica. 4e
eco cualquier programa logico puede ser traducido en programa basado con
restricciones y viceversa. 9ucas veces los programas lgicos son traducidos a
programas basados en restricciones debido a que la resolucin de un programa basado
en restricciones se puede desempe8ar mejor que su contraparte.
+a diferencia entre ambos se debe principalmente en sus estilos y enfoques en el
modelamiento de mundo. ,ara ciertos problemas es m!s natural :y por ende m!s simple;
escribirlos como programas lgicos% mientras que en otros es m!s natural escribirlos
como programas basados en restricciones.
#l enfoque de la programacin con restricciones se basa principalmen en buscar un
estado en el cual una gran cantidad de restricciones sean satisfecas simult!neamente.
Un problema se define tpicamente como un estado de la realidad en el cual e6iste un
n$mero de variables con valor desconocido. Un programa basado en restricciones busca
dicos valores para todas las variables.
(lgunos dominios de aplicacin de este paradigma son
4ominios booleanos% donde solo e6isten restricciones del tipo verdaderoEfalso
4ominios en variables enteras y racionales
4ominios lineales% donde solo se describen y anali2an funciones lineales
4ominios finitos% donde las restricciones son definidas en conjuntos finitos
4ominios mi6tos% los cuales involucran dos o m!s de los anteriores
+os lenguajes basados en restricciones son tpicamente incrustados en un lenguaje ost.
#l prmer lenguaje ost usado fue ,rolog% es por esta ra2n que este campo fue llamado
inicialmente ,rogramacin +gica con Restricciones. (mbos paradigmas comparten
caractersticas muy similares% tales como las variables lgicas :una ve2 que una variable
es asignada a un valor% no puede ser cambiado;% o bac/trac/ing.
+a programacin con restrcciones puede ser vista como un lenguaje propio o como
libreras para ser usadas en alg$n lenguaje de programacin regular. (lgunos lenguajes
populares basados en restricciones son"
'1,rolog :'asado en ,rolog % proprietario;
&J*, 5A :'asado en ,rolog% tambin e6isten libreras en & y &33 % proprietario;
&iao ,rolog :'asado en ,rolog % software libre" .,+E+.,+;
#&+i,)e :'asado en ,rolog % proprietario;
9o2art : 'asado en -2 % software libre" U??;
)*&)tus :'asado en ,rolog %proprietario;
(lgunas libreras populares"
&oco :Cava% software libre" U?? ;
4isolver :&33% proprietaria;
.ecode :&33 %software libre" U?? ;
*+-. )olver :&33 % proprietaria;
Soalog &onstraint )olver :Cava % proprietaria;
Programacin por capas
+a programacin por capas es un estilo de programacin en la que el objetivo
primordial es la separacin de la lgica de negocios de la lgica de dise8o% un ejemplo
b!sico de esto es separar la capa de datos de la capa de presentacin al usuario.
+a ventaja principal de este estilo% es que el desarrollo se puede llevar a cabo en varios
niveles y en caso de alg$n cambio slo se ataca al nivel requerido sin tener que revisar
entre cdigo me2clado.
(dem!s permite distribuir el trabajo de creacin de una aplicacin por niveles% de este
modo% cada grupo de trabajo est! totalmente abstrado del resto de niveles% smplemente
es necesario conocer la (,* que e6iste entre niveles.
#n el dise8o de sistemas inform!ticos actual se suele usar las arquitecturas multinivel o
Programacin por capas. #n dicas arquitecturas a cada nivel se le confa una misin
simple% lo que permite el dise8o de arquitecturas escalables :que pueden ampliarse con
facilidad en caso de que las necesidades aumenten;.
#l dise8o m!s en boga actualmente es el dise8o en tres niveles :o en tres capas;.
Capas o niveles
-./ Capa de presentacin: es la que ve el usuario% presenta el sistema al usuario% le
comunica la informacin y captura la informacin del usuario dando un mnimo de
proceso :reali2a un filtrado previo para comprobar que no ay errores de formato;. #sta
capa se comunica $nicamente con la capa de negocio.
0./ Capa de negocio: es donde residen los programas que se ejecutan% recibiendo las
peticiones del usuario y enviando las respuestas tras el proceso. )e denomina capa de
negocio :e incluso de lgica del negocio; pues es aqu donde se establecen todas las
reglas que deben cumplirse. #sta capa se comunica con la capa de presentacin% para
recibir las solicitudes y presentar los resultados% y con la capa de datos% para solicitar al
gestor de base de datos para almacenar o recuperar datos de l.
1./ Capa de datos: es donde residen los datos. #st! formada por uno o mas gestor de
bases de datos que reali2a todo el almacenamiento de datos% reciben solicitudes de
almacenamiento o recuperacin de informacin desde la capa de negocio.
Todas estas capas pueden residir en un $nico ordenador :no sera lo normal;% si bien lo
m!s usual es que aya una multitud de ordenadores donde reside la capa de presentacin
:son los clientes de la arquitectura clienteEservidor;. +as capas de negocio y de datos
pueden residir en el mismo ordenador% y si el crecimiento de las necesidades lo aconseja
se pueden separar en dos o mas ordenadores. (s% si el tama8o o complejidad de la base
de datos aumenta% se puede separar en varios ordenadores los cuales recibiran las
peticiones del ordenador en que resida la capa de negocio.
)i por el contrario fuese la complejidad en la capa de negocio lo que obligase a la
separacin% esta capa de negocio podra residir en uno o mas ordenadores que
reali2arian solicitudes a una $nica base de datos. #n sistemas muy complejos se llega a
tener una serie de ordenadores sobre los cuales corre la capa de datos% y otra serie de
ordenadores sobre los cuales corre la base de datos.
#n una arquitectura de tres niveles% los trminos >capas> y >niveles> no significan lo
mismo ni son similares.
#l trmino >capa> ace referencia a la forma como una solucin es segmentada desde el
punto de vista lgico"
,resentacinE +gica de NegocioE 4atos.
#n cambio% el trmino >nivel>% corresponde a la forma en que las capas lgicas se
encuentran distribuidas de forma fsica. ,or ejemplo"
Una solucin de tres capas :presentacin% lgica% datos; que residen en
un solo ordenador :,resentacin3lgica3datos;. )e dice% que la
arquitectura de la solucin es de tres capas y un nivel.
Una solucin de tres capas :presentacin% lgica% datos; que residen en
dos ordenadores :presentacin3lgica% lgica3datos;. )e dice que la
arquitectura de la solucin es de tres capas y dos niveles.
Una solucin de tres capas :presentacin% lgica% datos; que residen en
tres ordenadores :presentacin% lgica% datos;. +a arquitectura que la
define es" solucin de tres capas y tres niveles.
Programacin a nivel funcional
+a programacin a nivel funcional es unos de los dos paradigmas contrastantes
identificados por Con 'ac/us en su trabajo sobre los ,rogramas como objetos
matem!ticos% siendo el otro la programacin a nivel de valores.
#n su discurso de aceptacin del ,remio Turing en ?@PP% 'ac/us describi lo que
considera como la necesidad de un cambio a una filosofa diferente en le dise8o de
lenguajes de programacin"
>Pareciera eistir un problema en el dise!o de los lenguajes de programacin"
#ada nuevo lenguaje incorpora$ luego de algo de limpieza$ todas las
caractersticas de los lenguajes anteriores ms algunas otras" %"""& #ada nuevo
lenguaje presenta nuevas caractersticas de moda""" pero el hecho es 'ue pocos
lenguajes hacen 'ue la tarea de programar sea ms econmica$ o ms segura
como para justificar el costo de producirlo ( aprender a utilizarlo.>
#l lenguaje de programacin 0, fue el primer lenguaje dise8ado especficamente para
dar soporte al estilo de programacin a nivel funcional.
Un programa de nivel funcional no necesita la nocin de varia#le2 dado que las
variables% que son elemento esencial en las definiciones a nivel de valores no acen falta
en el nivel funcional.
#n el estilo de programacin de nivel funcional los programas se escriben como
combinacin de otros programas con la ayuda de los operaciones de construccin de
programas o funcionales.
'ajo este enfoque los programas% con los funcionales como operadores% forman un
espacio matem!tico.
-tra ventaja potencial de este enfoque es la posibilidad de restringirse $nicamente a las
funciones estrictas y asociarles un mecanismo de evaluacin por valor. que es el m!s
sencillo de implementar. -tra ventaja es la e6istencia de definiciones de nivel funcional
que no son simplemente el correspondiente de una definicin de nivel de valores. #stas
definiciones% a veces un poco crpticas por lo concisas representan un estilo de
programacin muy poderoso.
)i bien la propuesta de 'ac/us data de los a8os PN ella a sido poco adoptada por la
comunidad de programacin funcional que an preferido basar sus trabajos en el c!lculo
+ambda.
+a programacin a nivel funcional en el estilo de 0, tiene una fuerte relacin con la
lgica combinatoria de Jas/ell &urry% con los lenguajes de combinadores% antecesores
de 9iranda y Jas/ell% as como con las categoras cartesianas cerradas% teora que dio
origen al lenguaje &(9+ :&ategorical (bstract 9acine +anguaje; antecesor del
lenguaje -caml.
Programacin a nivel de valores
+a programacin a nivel de valores es unos de los dos paradigmas contrastantes
identificados por Con 'ac/us en su trabajo sobre los ,rogramas como objetos
matem!ticos% siendo el otro la programacin a nivel funcional. #l trmino inicialmente
utili2ado por 'ac/us fue el de programacin a nivel de objetos% pero en la actualidad ese
trmino traera confusin con la programacin orientada a objetos.
+os programas a nivel de valores describen como combinar diferentes valores :por
ejemplo% n$meros% caracteres% etc.; para formar nuevos valores asta obtener el
resultado final. +os nuevos valores se obtienen como resultado de la aplicacin de
operaciones que transforman valores en otros valores% como por ejemplo% la suma% la
concatenacin% la inversin de matrices% etc.
+os lenguajes que siguen el estilo de von Neumann son de nivel de valores" las
e6presiones a la dereca de una asignacin tienen por objeto la creacin del nuevo valor
a asignar.
+elacin con los tipos de datos
#l enfoque de programacin a nivel de valores se presta para el estudio de los valores
bajo las operaciones de formacin de valores y de sus propiedades algebraicas.
+elacin con los lenguajes asados en el c,lculo lamda
)eg$n este punto de vista% los lenguajes basados en el c!lculo lambda :tales como +isp%
*)M*9% y )ceme; son lenguajes a nivel de valores% si bien su dise8o no los restringe a
ello.
,or ejemplo% en una definicin tpica en el c!lculo lambda de la forma f V I.E la
variable as como la e6presin E denotan valores. Tpicamente% E es una e6presin
que aplica funciones de formacin de valores a variables y constantes.
Punto de vista opuesto
,or su parte% los partidarios de la programacin funcional consideran a los lenguajes
basados en el c!lculo lambda como contentivos de ambos paradigmas% dado que tanto
las operaciones de formacin de valores como las operaciones de construccin de
programas se e6presan en el mismo formalismo% dejando al usuario escoger que partes
de su programa deben ser escritas en un paradigma o en el otro.

S-ar putea să vă placă și