21
Comparativa de lenguajes en programación representativa: Lógica y Funcional. 1 Introducción Existen muchos paradigmas de programación diferentes, cada uno de ellos tiene sus propias características y tratan de solucionar los problemas clásicos del desarrollo de software desde diferentes perspectivas y filosofías. Hoy vamos a ver algunas diferencias entre paradigmas de programación populares. Los paradigmas de programación solo son propuestas tecnológicas adoptadas por la Comunidad de desarrolladores que se enfocan a resolver uno o varios problemas definidos y delimitados. Existen muchos paradigmas de programación diferentes, posiblemente el más ampliamente utilizado hoy en día sea el de la programación orientada a objetos. Un paradigma de programación es una colección de patrones conceptuales que moldean la forma de razonar sobre problemas, de formular soluciones y de estructurar programas. Los principales paradigmas de programación son: Programación Imperativa: En este paradigma, un programa es una secuencia finita de instrucciones, que se ejecutan una tras otra. adfa, p. 1, 2011. © Springer-Verlag Berlin Heidelberg 2011

Comparativa de Lenguajes en Programación Representativa

Embed Size (px)

DESCRIPTION

Programación Funcional

Citation preview

Comparativa de lenguajes en programacin representativa: Lgica y Funcional.

1 IntroduccinExisten muchos paradigmas de programacin diferentes, cada uno de ellos tiene sus propias caractersticas y tratan de solucionar los problemas clsicos del desarrollo de software desde diferentes perspectivas y filosofas. Hoy vamos a ver algunas diferencias entre paradigmas de programacin populares.Los paradigmas de programacin solo son propuestas tecnolgicas adoptadas por la Comunidad de desarrolladores que se enfocan a resolver uno o varios problemas definidos y delimitados. Existen muchos paradigmas de programacin diferentes, posiblemente el ms ampliamente utilizado hoy en da sea el de la programacin orientada a objetos.Un paradigma de programacin es una coleccin de patrones conceptuales que moldean la forma de razonar sobre problemas, de formular soluciones y de estructurar programas. Los principales paradigmas de programacin son:

Programacin Imperativa: En este paradigma, un programa es una secuencia finita de instrucciones, que se ejecutan una tras otra. Los datos utilizados se almacenan en memoria principal y se referencian utilizando variables. Programacin Funcional: Paradigma en el que las sentencias son funciones en el sentido matemtico del trmino. Un programa es una funcin que se define por composicin de funciones simples. Programacin Lgica: En este paradigma un programa consiste en declarar una serie de hechos (elementos conocidos, relacin de objetos concretos) y reglas (relacin general entre objetos que cumplen unas propiedades y luego preguntar por un resultado. Programacin orientada a objetos: El paradigma orientado a objetos (OO) se refiere a un estilo de programacin. Un lenguaje de programacin orientado a objetos (LOO) puede ser tanto imperativo como funcional o lgico. Programacin Declarativa: No presenta un estado implcito de los valores asociados a las variables, sino que el nfasis es puesto en la programacin, en lo que se quiere hacer por medio de expresiones o trminos definidos con el lenguaje.

En seguida, enfatizaremos en este ltimo y en los paradigmas que estn dentro de esta categora:

2 Paradigma DeclarativoLa programacin declarativa (a veces llamada programacin inferencial) puede entenderse como un estilo de programacin en el que el programador especifica qu debe computarse ms bien que cmo deben realizarse los cmputos. En este paradigma de programacin, un programa = lgica + control, y la tarea consiste en centrar la atencin en la lgica dejando de lado el control, que se asume automtico, al sistema. El componente lgico determina el significado del programa mientras que el componente de control solamente afecta a su eficiencia. Esta distincin tiene la ventaja de que la eficiencia de un programa puede mejorarse modificando el componente de control sin tener que modificar la lgica del algoritmo (del que el programa es una representacin posible en la mquina). Con ms precisin, la caracterstica fundamental de la programacin declarativa es el uso de la lgica como lenguaje de programacin, lo cual puede conceptualizarse como sigue: Un programa es una teora formal en una cierta lgica, esto es, un conjunto de frmulas lgicas que resultan ser la especificacin del problema que se pretende resolver, y La computacin se entiende como un forma de inferencia o deduccin en dicha lgica.El paradigma declarativo plantea que los problemas sean descritos al ordenador con una serie de unidades conceptuales bsicas que se pueden combinar segn unas determinadas reglas para generar nueva informacin. Para la resolucin de un problema, se crearn las descripciones que representan al dominio en el cual existe el problema a resolver y se plantear el problema como una pregunta que debe ser respondida bien con alguna de las unidades conceptuales iniciales o bien con una combinacin vlida de ellas que es el propio ordenador quien debe buscar.

2.1 Ventajas Descripciones compactas y muy expresivas. Es posible describir universos de problemas con muy pocas lneas de cdigo del lenguaje que permitan la solucin de un gran nmero de problemas. Desarrollo del programa no tan orientado a la solucin de un nico problema. Con una programacin adecuada, basta haber descrito un dominio de problemas de forma correcta y saber formular nuestro problema como una simple consulta en dicho dominio. La variedad de preguntas que se pueden responder con una nica descripcin del dominio de problemas concreto suele ser muy elevada. No hay necesidad de emplear esfuerzo en disear un algoritmo que resuelva el problema.3 Programacin FuncionalComo su nombre lo indica, tiene como su principal unidad de proceso lo que se conoce como una funcin. Las funciones son procedimientos, pero con la caracterstica especial de que al ejecutarlas pueden emplearse para evaluaciones (comparacin entre datos o expresiones). Es un concepto de funcin algo diferente al que estamos acostumbrados, ms cercano al matemtico que su contraparte en los lenguajes imperativos. No hay variables, por lo que estas funciones slo tratarn con sus valores de entrada y con constantes predefinidas; no tienen ms posibilidad de accin.Los lenguajes habituales se basan, en mayor o menor medida, en realizar una serie de pasos, en definir lo que las cosas hacen; esto se conoce como programacin imperativa.

3.1 CaractersticasComo consecuencia de todo esto, en los programas funcionales se encuentran algunas caractersticas:

Transparencia referencial. Al no haber variables, no hay efectos laterales, es decir, al ejecutar la funcin (aunque ya hemos visto que el concepto de ejecutar no existe como tal) no cambiar nada fuera del entorno de sta. Tampoco depender para nada de lo que haya en ese entorno. Se dice que una funcin tiene transparencia referencial si, para un valor de entrada, produce siempre la misma salida. En programacin funcional esto es siempre as por definicin.

Evaluacin perezosa (Lazy evaluation). Para una mente acostumbrada a lo imperativo esto cuesta de entender, as que atencin. Al no tener que seguir una serie de rdenes, una tras otra, algunos los lenguajes funcionales slo evalan lo que les es requerido en cada momento.

Altsima abstraccin. Los lenguajes funcionales implementan muchsimos mecanismos de abstraccin que te hacen la vida muy, muy feliz. Un brutal sistema de tipos de datos, polimorfismo en muchos niveles, y nuevos conceptos Las inevitables operaciones que no son puramente funcionales, como la entrada/salida o los nmeros aleatorios, quedan envueltos en abstracciones que resuelven la papeleta con elegancia.

Elegancia, legibilidad, flexibilidad. Por lo general, cuanto ms abstracto es un lenguaje, ms se potencian estas caractersticas, por lo que los programas funcionales suelen ser ms claros, ms concisos y ms bellos que sus contrapartidas en lenguajes imperativos.

Facilidad para las pruebas y la depuracin. Gracias a la transparencia referencial, hacer unit testing en lenguajes imperativos es trivial. Adems, el alto nivel hace que los errores lo tengan difcil para esconderse por el cdigo, por lo que suelen salir programas muy fiables.

3.2 Tipos de lenguajes funcionalesErlangEs un lenguaje funcional y de programacin concurrente, fue diseado por la compaa Ericsson con el propsito de hacer aplicaciones que puedan soportar fallos, funcionamiento ininterrumpido, aplicaciones distribuidas, entre otras cosas.El equipo de Erlang desarrollo ciertas caracterisitcas en el lenguajes de acuerdo a los requisitos que tienen las aplicaciones de telecomunicaciones, las cuales son: alta disponibilidad, modificacin del cdigo sin detener la aplicacin, y dems.

Algunas de las caractersticas desarrollados por el equipo de Erlang son: Concurrencia Lenguaje funcional Tolerancia a fallos Reemplazo de cdigo en caliente Comunicacin entre los procesos mediante mensajes. El soporte de concurrencia, se dice que es la mayor fortaleza de Erlang, y como ya lo mencione anteriormente, la concurrencia es cuando se llevan a cabo o se ejecutan varios procesos al mismo tiempo.

Adems, Erlang es un lenguaje funcional, ya que esta estructurado por definicin de funciones.Los programas en Erlang se componen de bloques funcionales, llamados funciones.Podemos identificar una funcin en un programa en Erlang, mediante el nombre y la aridad de la funcin, dicha aridad es el nmero de datos de entrada, que se permitirn en la funcin.

HaskellEs un lenguaje de programacin estandarizado multi-propsito puramente funcional con semnticas no estrictas y fuerte tipificacin esttica. Su nombre se debe al lgico estadounidense Haskell Curry. En Haskell, "una funcin es un ciudadano de primera clase" del lenguaje de programacin. Como lenguaje de programacin funcional, el constructor de controles primario es la funcin. El lenguaje tiene sus orgenes en las observaciones de Haskell Curry y sus descendientes intelectuales.Las caractersticas ms interesantes de Haskell incluyen el soporte para tipos de datos y funciones recursivas, listas, tuplas, guardas y calce de patrones. La combinacin de las mismas puede resultar en algunas funciones casi triviales cuya versin en lenguajes imperativos pueden llegar a resultar extremadamente tediosas de programar.

LISPEl LISP es entendido como el modelo de un lenguaje de programacin funcional hoy. Hay gente quien cree que all una vez era un diseo de lengua limpio "puro" en la direccin funcional que fue comprendida por AI-programadores en busca de la eficacia. Lisp (o LISP) es una familia de lenguajes de programacin de computadora de tipo multiparadigma con una larga historia y una sintaxis completamente entre parntesis.

Caractersticas bsicas Lenguaje Interpretado Tambin posible compilado Todas las variables son punteros Liberacin automtica de memoria Eficiencia menor que otros lenguajes Adecuado para prototipados y clculo Adecuado para prototipados y clculosimblico.

4 Programacin lgicaConlleva un alto grado de expresiones y razonamiento lgico para realizar y expresar una actividad en especial, su nombre, en este caso, destaca el hecho de que se emplean relaciones y reglas por definir, en lugar de funciones y expresiones para asignar valores a variable. Su origen tiene orgenes matemticos, principalmente en lo que se denomina el clculo de predicados, que por medio de una serie de reglas y teora lgica puede modelar una realidad dada.La programacin lgica es un tipo de paradigmas de programacin dentro del paradigma de programacin declarativa. Al separar el control y la lgica, el programa se transforma en un conjunto de declaraciones formales de especificaciones que deben ser correctas por definicin. Un programa lgico no tiene un algoritmo que indique los pasos que detallen la manera de llegar a un resultado, sino que est formado por expresiones que describen la solucin (o ms precisamente, la declaran). De esta manera, la clave para hacer un programa lgico es poder explicitar una declaracin que describa correctamente la solucin del problema.

4.1 AplicacinLa programacin lgica encuentra su hbitat natural en aplicaciones de inteligencia artificial o relacionadas: Sistemas expertos, donde un sistema de informacin imita las recomendaciones de un experto sobre algn dominio de conocimiento. Demostracin automtica de teoremas, donde un programa genera nuevos teoremas sobre una teora existente. Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la informacin contenida en una expresin lingstica humana.La programacin lgica tambin se utiliza en aplicaciones ms "mundanas" pero de manera muy limitada, ya que la programacin tradicional es ms adecuada a tareas de propsito general.

4.2 Caractersticas Se basa en "premisas" que se dan a un universo, y basado en esas reglas (el cual se asumen como verdaderas) el programa responde un valor de verdad, concluido usando la lgica matemtica.

El paradigma tiene sus fundamentos en las teoras de la lgica proposicional.

Por su esencia declarativa, un programa lgico no tiene un algoritmo que indique los pasos que detallen la manera de llegar a un resultado, sino que es el sistema internamente el que proporciona la secuencia de control.

No existe el concepto de asignacin de variables, sino el de unificacin. No hay un estado de las variables que se vaya modificando por sucesivas asignaciones, generalmente asociadas a posiciones de memoria, sino que las variables asumen valores al unificarse o ligarse con valores particulares temporalmente y se van sustituyendo durante la ejecucin del programa.

Un programa lgico contiene una base de conocimiento sobre la que se hacen consultas. La base de conocimiento est formada por hechos, que representan la informacin del sistema expresada como relaciones entre datos, y por reglas lgicas que permiten deducir consecuencias a partir de combinaciones entre los hechos y, en general, otras reglas. Se construye especificando la informacin del problema real en una base de conocimiento en un lenguaje formal y el problema se resuelve mediante un mecanismo de inferencia que acta sobre ella. As pues, una clave de la programacin lgica es poder expresar apropiadamente todos los hechos y reglas necesarios que definen el dominio de un problema.

4.3 Tipos de lenguajes lgicosPrologProlog es un lenguaje de programacin seminterpretado. Su funcionamiento es muy similar a Java. El cdigo fuente se compila a un cdigo de byte el cul se interpreta en una mquina virtual denominada Warren Abstract Machine (comnmente denominada WAM).Por eso, un entorno de desarrollo Prolog se compone de:Un compilador: Transforma el cdigo fuente en cdigo de byte. A diferencia de Java, no existe un Standard al respecto. Por eso, el cdigo de byte generado por un entorno de desarrollo no tiene por que funcionar en el intrprete de otro entorno.Un intrprete: Ejecuta el cdigo de byte. Un shell o top-level. Se trata de una utilidad que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los interfaces de lnea de comando de los sistemas operativos.Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades bsicas como manipular cadenas, entrada/salida, etc.Generalmente, los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la programacin con restricciones, concurrente, orientada a objetos, etc. Sera injusto no mencionar aqu el entorno de desarrollo ms popular: SICStus Prolog, si bien, se trata de un entorno de desarrollo comercial (no gratuito).

Elementos en PrologComo hemos especificado antes, para construir programas en Prolog necesitamos una serie de elementos. Vamos a especificarlos:tomos: Es una definicin genrica de un objeto del mundo que queremos representar.Predicados: Nos permite especificar caractersticas de los objetos de nuestro mundo o las relaciones entre ellos.Hechos: Es algo que est ocurriendo en el mundo, caracterstica o relacin entre objetos. En el lenguaje natural un hecho podra ser por ejemplo que Lgica y Compatibilidad es una asignatura de Ingeniera Informtica. Expresan relaciones entre objetos. Variables: No es variable con el concepto que se tiene de ella en la programacin habitual. En Prolog, una variable representa el valor de un tomo. Representan objetos que el mismo PROLOG determina. Una variable puede estar instanciada no instanciada. Estar instanciada cuando existe un objeto determinado representado por la variable. Los nombres de variables comienzan siempre por una letra mayscula.Reglas: Las reglas se utilizan en PROLOG para significar que un hecho depende de uno mas hechos. Son la representacin de las implicaciones lgicas del tipo p ---> q (p implica q).Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-".La cabeza est formada por un nico hecho.El cuerpo puede ser uno mas hechos (conjuncin de hechos), separados por una coma (","), que acta

Completamos la explicacin cada lenguaje de programacin en la siguiente tabla en donde se renen las principales caractersticas que se explicaron anteriormente:

Tabla 1-Caractersticas de la programacin lgica y la programacin funcional: Diferencias esenciales

5 ConclusionesAlumnoConclusin

Reyes Raya Sandra GiovannaSe deduce que la programacin lgica se basa especficamente en la lgica de predicados, en donde se implementa la solucin de varios problemas, no solo de uno nico, mientras que los lenguajes funcionales se basan en el concepto de funcin pero ms adaptado a la matemtica en donde se requiere obtener un valor.

Rocha Morazn Jorge AntonioEn general en la actualidad los lenguajes se van adaptando de acuerdo a las paradigmas de programacin existentes para que los lenguajes sean ms sencillos para los programadores.Esto facilita que cada vez sea ms sencillo programar problemas ms complejas de una manera ms sencilla y teniendo mayores posibilidades al momento de desarrollar.

6 BibliografaIntroduccin a la programacin. Teora y prctica: teora y prctica - Jess Javier Rodrguez Sala - Google Books. (n.d.). Retrieved February 5, 2015, from https://books.google.com.mx/books?id=nLMJsInMyBwC&pg=PA4&dq=paradigmas+de+programacion&hl=es-419&sa=X&ei=OOnSVPriHsy1sASo1oGwAg&ved=0CB0Q6AEwAA#v=onepage&q=paradigmas%20de%20programacion&f=false

Lenguaje Logo Iii. Explorando la Programacin - Google Books. (n.d.). Retrieved February 5, 2015, from https://books.google.com.mx/books?id=InF1lQGdJ5oC&pg=PA143&dq=paradigmas+de+programacion&hl=es-419&sa=X&ei=OOnSVPriHsy1sASo1oGwAg&ved=0CDkQ6AEwBQ#v=onepage&q=paradigmas%20de%20programacion&f=false

Manual gua de aprendizaje de programacin avanzada - Google Books. (n.d.). Retrieved February 5, 2015, from https://books.google.com.mx/books?id=fBtqpGE_5PYC&pg=PA91&dq=programacion+funcional+caracteristicas&hl=es-419&sa=X&ei=cbvSVNi9FLjCsATImYKoCQ&ved=0CCUQ6AEwAQ#v=onepage&q=programacion%20funcional%20caracteristicas&f=falseIranzo Julin, P., & Alpuente Frasnedo, M. (2007). Programacin Lgica: Teora y Prctica. Madrid: Pearson Prentice Hall.

7 Fuentes ElectrnicasDiferencias entre paradigmas de programacin. (n.d.). Retrieved February 5, 2015, from http://www.genbetadev.com/paradigmas-de-programacion/diferencias-entre-paradigmas-de-programacion

Ingenieria en Informatica: Paradigma Logico. (n.d.). Retrieved February 5, 2015,from http://seguridadensistemascomputacionalesp.blogspot.mx/2011/09/paradigma-logico.html

Inteligencia Artificial: Programacion logica... por encima de la funcional? (n.d.). Retrieved from https://carloscatzin.wordpress.com/2010/03/29/inteligencia-artificial-programacion-logica-por-encima-de-la-funcional/

Lenguaje de Programacin Haskell. (n.d.). Retrieved February 5, 2015, from http://www.larevistainformatica.com/Haskell.htm

Lenguaje Lisp. (n.d.). Retrieved February 5, 2015, from http://jyplisp.galeon.com/Programacin declarativa. (2014, December 31). In Wikipedia, la enciclopedia libre. Retrieved from http://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_declarativa&oldid=79131564

Programacin funcional. (2015, February 2). In Wikipedia, la enciclopedia libre. Retrieved from http://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_funcional&oldid=78655498

Programacin funcional, un enfoque diferente a los problemas de siempre. (n.d.). Retrieved February 5, 2015, from http://www.genbetadev.com/paradigmas-de-programacion/programacion-funcional-un-enfoque-diferente-a-los-problemas-de-siempre

Programacin lgica. (2015, February 4). In Wikipedia, la enciclopedia libre. Retrieved from http://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_l%C3%B3gica&oldid=79816603

Prolog (Lenguaje de programacin) - EcuRed. (n.d.). Retrieved February 5, 2015, from http://www.ecured.cu/index.php/Prolog_%28Lenguaje_de_programaci%C3%B3n%29

Taller de Programacin Orientada a Objetos: Lenguaje Funcional Erlang. (n.d.). Retrieved February 5, 2015, from http://gemmatmtz.blogspot.mx/2010/11/lenguaje-funcional-erlang_698.htmladfa, p. 1,2011. Springer-Verlag Berlin Heidelberg 2011