0 evaluări0% au considerat acest document util (0 voturi)
114 vizualizări20 pagini
Este documento describe y compara diferentes paradigmas de programación como imperativo, funcional y lógico. Cada paradigma representa una filosofía distinta para construir software, con ventajas y desventajas dependiendo de la situación. Además, los paradigmas a menudo se mezclan en la práctica.
Este documento describe y compara diferentes paradigmas de programación como imperativo, funcional y lógico. Cada paradigma representa una filosofía distinta para construir software, con ventajas y desventajas dependiendo de la situación. Además, los paradigmas a menudo se mezclan en la práctica.
Este documento describe y compara diferentes paradigmas de programación como imperativo, funcional y lógico. Cada paradigma representa una filosofía distinta para construir software, con ventajas y desventajas dependiendo de la situación. Además, los paradigmas a menudo se mezclan en la práctica.
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.